clickzetta-dbutils 1.0.5__py3-none-any.whl → 1.0.7__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- clickzetta_dbutils/db_utils.py +40 -22
- clickzetta_dbutils/version.py +1 -1
- {clickzetta_dbutils-1.0.5.dist-info → clickzetta_dbutils-1.0.7.dist-info}/METADATA +5 -8
- clickzetta_dbutils-1.0.7.dist-info/RECORD +7 -0
- clickzetta_dbutils-1.0.5.dist-info/RECORD +0 -7
- {clickzetta_dbutils-1.0.5.dist-info → clickzetta_dbutils-1.0.7.dist-info}/WHEEL +0 -0
- {clickzetta_dbutils-1.0.5.dist-info → clickzetta_dbutils-1.0.7.dist-info}/top_level.txt +0 -0
clickzetta_dbutils/db_utils.py
CHANGED
@@ -23,6 +23,7 @@ class ConnectionConfig:
|
|
23
23
|
dsType: int
|
24
24
|
schema: str = "public"
|
25
25
|
workspaceName: str = "default"
|
26
|
+
table: Optional[str] = None
|
26
27
|
host: Optional[str] = None
|
27
28
|
magicToken: Optional[str] = None
|
28
29
|
username: Optional[str] = None
|
@@ -223,6 +224,7 @@ class DatabaseConnectionManager:
|
|
223
224
|
query=conn_info.query
|
224
225
|
)
|
225
226
|
connect_args = {'options': self._convert_options(options)}
|
227
|
+
|
226
228
|
elif ds_type == 1: # ClickZetta
|
227
229
|
if not conn_info.workspaceName or not conn_info.instanceName:
|
228
230
|
raise DatabaseConnectionError("Missing required parameters 'workspace_name', "
|
@@ -230,32 +232,39 @@ class DatabaseConnectionManager:
|
|
230
232
|
if not self._vcluster:
|
231
233
|
raise DatabaseConnectionError("Missing virtual cluster for ClickZetta data source")
|
232
234
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
f"?virtualcluster={self._vcluster}"
|
238
|
-
)
|
239
|
-
elif conn_info.magicToken:
|
240
|
-
base_url = (f"clickzetta://{conn_info.instanceName}.{conn_info.host}/"
|
241
|
-
f"{conn_info.workspaceName}"
|
242
|
-
f"?magic_token={conn_info.magicToken}"
|
243
|
-
f"&virtualcluster={self._vcluster}"
|
244
|
-
)
|
245
|
-
else:
|
246
|
-
raise ValueError("username and password or token must be specified")
|
235
|
+
# Generate base parameters
|
236
|
+
query_params = {
|
237
|
+
"virtualcluster": self._vcluster
|
238
|
+
}
|
247
239
|
|
248
|
-
# Add schema if provided
|
249
240
|
if schema:
|
250
|
-
|
241
|
+
query_params["schema"] = schema
|
251
242
|
|
252
|
-
|
243
|
+
query_params.update(options)
|
244
|
+
query_params.update(conn_info.query)
|
253
245
|
|
254
|
-
|
255
|
-
if options:
|
256
|
-
base_url += f"&{urllib.parse.urlencode(options)}"
|
246
|
+
full_host = f"{conn_info.instanceName}.{conn_info.host}"
|
257
247
|
|
258
|
-
|
248
|
+
if conn_info.username and conn_info.password:
|
249
|
+
url = URL.create(
|
250
|
+
drivername="clickzetta",
|
251
|
+
username=conn_info.username,
|
252
|
+
password=conn_info.password,
|
253
|
+
host=full_host,
|
254
|
+
database=conn_info.workspaceName,
|
255
|
+
query=query_params
|
256
|
+
)
|
257
|
+
elif conn_info.magicToken:
|
258
|
+
# Use magic token for authentication, do not require username and password
|
259
|
+
query_params["magic_token"] = conn_info.magicToken
|
260
|
+
url = URL.create(
|
261
|
+
drivername="clickzetta",
|
262
|
+
host=full_host,
|
263
|
+
database=conn_info.workspaceName,
|
264
|
+
query=query_params
|
265
|
+
)
|
266
|
+
else:
|
267
|
+
raise ValueError("username and password or token must be specified")
|
259
268
|
else:
|
260
269
|
raise ValueError(f"Unsupported data source type: {ds_type}")
|
261
270
|
|
@@ -266,7 +275,7 @@ class DatabaseConnectionManager:
|
|
266
275
|
def _convert_options(options):
|
267
276
|
if not options:
|
268
277
|
return ''
|
269
|
-
return ' '.join([f'-c
|
278
|
+
return ' '.join([f'-c{k}={v}' for k, v in options.items()])
|
270
279
|
|
271
280
|
|
272
281
|
def get_lakehouse_connection(conn):
|
@@ -279,6 +288,8 @@ def get_active_engine(
|
|
279
288
|
workspace: Optional[str] = None,
|
280
289
|
schema: Optional[str] = None,
|
281
290
|
options: Optional[Dict[str, str]] = None,
|
291
|
+
query: Optional[Dict[str, str]] = None,
|
292
|
+
driver: Optional[str] = None,
|
282
293
|
*args, **kwargs
|
283
294
|
) -> Engine:
|
284
295
|
"""
|
@@ -290,6 +301,9 @@ def get_active_engine(
|
|
290
301
|
workspace (str, optional): Workspace name. Default is 'default'.
|
291
302
|
schema (str, optional): Schema name for the connection. Default is 'public'.
|
292
303
|
options (dict, optional): Additional connection options.
|
304
|
+
query (dict, optional): Additional query parameters for SQLAlchemy url.
|
305
|
+
driver (str, optional): Driver name for the connection.
|
306
|
+
*args: Additional arguments for SQLAlchemy engine.
|
293
307
|
|
294
308
|
Returns:
|
295
309
|
SQLAlchemy Engine instance
|
@@ -304,5 +318,9 @@ def get_active_engine(
|
|
304
318
|
manager.use_vcluster(vcluster)
|
305
319
|
if options:
|
306
320
|
manager.use_options(options)
|
321
|
+
if query:
|
322
|
+
manager.use_query(query)
|
323
|
+
if driver:
|
324
|
+
manager.use_driver(driver)
|
307
325
|
|
308
326
|
return manager.build(*args, **kwargs)
|
clickzetta_dbutils/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "1.0.
|
1
|
+
__version__ = "1.0.7"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: clickzetta-dbutils
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.7
|
4
4
|
Summary: clickzetta dbutils
|
5
5
|
Author-email: "lin.zhang" <lin.zhang@clickzetta.com>
|
6
6
|
Project-URL: documentation, https://www.yunqi.tech/
|
@@ -14,13 +14,10 @@ Requires-Dist: psycopg2-binary
|
|
14
14
|
Requires-Dist: mysql-connector-python
|
15
15
|
Provides-Extra: dev
|
16
16
|
Requires-Dist: pytest==8.2.1; extra == "dev"
|
17
|
-
Requires-Dist: sqlparse; extra == "dev"
|
18
|
-
Requires-Dist: grpcio; extra == "dev"
|
19
|
-
Requires-Dist: grpcio-tools; extra == "dev"
|
20
17
|
Requires-Dist: build; extra == "dev"
|
21
18
|
Requires-Dist: pytest-xdist; extra == "dev"
|
22
|
-
|
23
|
-
Requires-Dist:
|
19
|
+
Provides-Extra: cliclzetta-legecy-sdk
|
20
|
+
Requires-Dist: clickzetta-connector; extra == "cliclzetta-legecy-sdk"
|
21
|
+
Requires-Dist: clickzetta-sqlalchemy; extra == "cliclzetta-legecy-sdk"
|
24
22
|
Provides-Extra: cliclzetta
|
25
|
-
Requires-Dist: clickzetta-connector; extra == "cliclzetta"
|
26
|
-
Requires-Dist: clickzetta-sqlalchemy; extra == "cliclzetta"
|
23
|
+
Requires-Dist: clickzetta-connector-python; extra == "cliclzetta"
|
@@ -0,0 +1,7 @@
|
|
1
|
+
clickzetta_dbutils/__init__.py,sha256=Q_6kas0RvZ0767qlaA_xGESmXxm0dks1YQ8DqCX8LV0,290
|
2
|
+
clickzetta_dbutils/db_utils.py,sha256=Vv00OcjoBZdC8z1ucEtekEwqPhu95GkgazBdoRBd-bI,10643
|
3
|
+
clickzetta_dbutils/version.py,sha256=98rTj2jvgnCZhTIeHpbml7e2xuhIqt_9BJNSWkWEQb8,21
|
4
|
+
clickzetta_dbutils-1.0.7.dist-info/METADATA,sha256=IPehhi4jMgaS7VZfqMhSwTkYkAbnLXHKf708o4537jo,852
|
5
|
+
clickzetta_dbutils-1.0.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
6
|
+
clickzetta_dbutils-1.0.7.dist-info/top_level.txt,sha256=8o5KqMSg9pxnPNejHjMaqZV2vEDvwvsz2GdChZI0N6I,19
|
7
|
+
clickzetta_dbutils-1.0.7.dist-info/RECORD,,
|
@@ -1,7 +0,0 @@
|
|
1
|
-
clickzetta_dbutils/__init__.py,sha256=Q_6kas0RvZ0767qlaA_xGESmXxm0dks1YQ8DqCX8LV0,290
|
2
|
-
clickzetta_dbutils/db_utils.py,sha256=TQobsTlxNTzUwIFgWZvVMtydNUPk_7AG82ChWQ4BCQY,10085
|
3
|
-
clickzetta_dbutils/version.py,sha256=ZR1VA9cGs0vIK6cWK4YKLfBTnmUCAcDaaP9ARPPYxEs,21
|
4
|
-
clickzetta_dbutils-1.0.5.dist-info/METADATA,sha256=2QYdvLVx4oQCI0J727G0ACdKrwuNAlYXjPpUKuSS6mI,938
|
5
|
-
clickzetta_dbutils-1.0.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
6
|
-
clickzetta_dbutils-1.0.5.dist-info/top_level.txt,sha256=8o5KqMSg9pxnPNejHjMaqZV2vEDvwvsz2GdChZI0N6I,19
|
7
|
-
clickzetta_dbutils-1.0.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|