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.
@@ -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
- if conn_info.username and conn_info.password:
234
- base_url = (f"clickzetta://{conn_info.username}:{conn_info.password}@{conn_info.instanceName}."
235
- f"{conn_info.host}/"
236
- f"{conn_info.workspaceName}"
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
- base_url += f"&schema={schema}"
241
+ query_params["schema"] = schema
251
242
 
252
- options.update(conn_info.query)
243
+ query_params.update(options)
244
+ query_params.update(conn_info.query)
253
245
 
254
- # Add query string if provided
255
- if options:
256
- base_url += f"&{urllib.parse.urlencode(options)}"
246
+ full_host = f"{conn_info.instanceName}.{conn_info.host}"
257
247
 
258
- url = base_url
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 {k}={v}' for k, v in options.items()])
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)
@@ -1 +1 @@
1
- __version__ = "1.0.5"
1
+ __version__ = "1.0.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: clickzetta-dbutils
3
- Version: 1.0.5
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
- Requires-Dist: pytz; extra == "dev"
23
- Requires-Dist: apache-superset==4.0.2; extra == "dev"
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,,