clickzetta-dbutils 1.0.6__py3-none-any.whl → 1.0.8__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  from .db_utils import get_active_engine, get_lakehouse_connection, DatabaseConnectionManager, ConnectionConfig, \
2
- DatabaseConnectionError
2
+ DatabaseConnectionError, get_active_lakehouse_engine
3
3
 
4
- __all__ = ["get_active_engine", "get_lakehouse_connection", "DatabaseConnectionManager", "ConnectionConfig",
4
+ __all__ = ["get_active_engine", "get_lakehouse_connection", "get_active_lakehouse_engine", "DatabaseConnectionManager", "ConnectionConfig",
5
5
  "DatabaseConnectionError"]
@@ -38,7 +38,7 @@ class DatabaseConnectionManager:
38
38
  Manages database connections with flexible configuration options.
39
39
  """
40
40
 
41
- def __init__(self, ds_name: str):
41
+ def __init__(self, ds_name: Optional[str] = None):
42
42
  """
43
43
  Initialize a database connection for a specific data source.
44
44
  """
@@ -52,7 +52,7 @@ class DatabaseConnectionManager:
52
52
  self._query: Dict[str, str] = {}
53
53
 
54
54
  @classmethod
55
- def _load_connection_configs(cls) -> Dict[str, ConnectionConfig]:
55
+ def load_connection_configs(cls) -> Dict[str, ConnectionConfig]:
56
56
  """
57
57
  Load and cache connection configurations from environment variables.
58
58
 
@@ -83,7 +83,7 @@ class DatabaseConnectionManager:
83
83
  """
84
84
  Find connection info by data source name
85
85
  """
86
- connections = self._load_connection_configs()
86
+ connections = self.load_connection_configs()
87
87
 
88
88
  # Validate data source exists
89
89
  if ds_name not in connections:
@@ -95,11 +95,12 @@ class DatabaseConnectionManager:
95
95
  config.query.update(self._query)
96
96
  return config
97
97
 
98
- def get_connection_infos(self):
98
+ @classmethod
99
+ def get_connection_infos(cls) -> Dict[str, ConnectionConfig]:
99
100
  """
100
101
  Get all connection infos
101
102
  """
102
- return self._load_connection_configs()
103
+ return DatabaseConnectionManager.load_connection_configs()
103
104
 
104
105
  def use_workspace(self, workspace: str) -> 'DatabaseConnectionManager':
105
106
  """
@@ -255,6 +256,7 @@ class DatabaseConnectionManager:
255
256
  query=query_params
256
257
  )
257
258
  elif conn_info.magicToken:
259
+ # Use magic token for authentication, do not require username and password
258
260
  query_params["magic_token"] = conn_info.magicToken
259
261
  url = URL.create(
260
262
  drivername="clickzetta",
@@ -287,6 +289,8 @@ def get_active_engine(
287
289
  workspace: Optional[str] = None,
288
290
  schema: Optional[str] = None,
289
291
  options: Optional[Dict[str, str]] = None,
292
+ query: Optional[Dict[str, str]] = None,
293
+ driver: Optional[str] = None,
290
294
  *args, **kwargs
291
295
  ) -> Engine:
292
296
  """
@@ -298,6 +302,9 @@ def get_active_engine(
298
302
  workspace (str, optional): Workspace name. Default is 'default'.
299
303
  schema (str, optional): Schema name for the connection. Default is 'public'.
300
304
  options (dict, optional): Additional connection options.
305
+ query (dict, optional): Additional query parameters for SQLAlchemy url.
306
+ driver (str, optional): Driver name for the connection.
307
+ *args: Additional arguments for SQLAlchemy engine.
301
308
 
302
309
  Returns:
303
310
  SQLAlchemy Engine instance
@@ -312,5 +319,63 @@ def get_active_engine(
312
319
  manager.use_vcluster(vcluster)
313
320
  if options:
314
321
  manager.use_options(options)
322
+ if query:
323
+ manager.use_query(query)
324
+ if driver:
325
+ manager.use_driver(driver)
315
326
 
316
327
  return manager.build(*args, **kwargs)
328
+
329
+
330
+ def get_active_lakehouse_engine(
331
+ vcluster: Optional[str] = None,
332
+ workspace: Optional[str] = None,
333
+ schema: Optional[str] = None,
334
+ options: Optional[Dict[str, str]] = None,
335
+ query: Optional[Dict[str, str]] = None,
336
+ driver: Optional[str] = None,
337
+ *args, **kwargs
338
+ ) -> Engine:
339
+ """
340
+ Convenience function to create a database engine for lakehouse (ClickZetta) data source.
341
+
342
+ Args:
343
+ vcluster (str, optional): Virtual cluster name for ClickZetta data source. Required.
344
+ workspace (str, optional): Workspace name. Default is 'default'.
345
+ schema (str, optional): Schema name for the connection. Default is 'public'.
346
+ options (dict, optional): Additional connection options.
347
+ query (dict, optional): Additional query parameters for SQLAlchemy url.
348
+ driver (str, optional): Driver name for the connection.
349
+ *args: Additional arguments for SQLAlchemy engine.
350
+ **kwargs: Additional keyword arguments for SQLAlchemy engine.
351
+
352
+ Returns:
353
+ SQLAlchemy Engine instance
354
+
355
+ Raises:
356
+ DatabaseConnectionError: If no lakehouse data source is found in the configuration.
357
+ """
358
+ # Get all connection configurations
359
+ conn_infos = DatabaseConnectionManager.get_connection_infos()
360
+
361
+ # Find the lakehouse (ClickZetta) data source
362
+ lakehouse_ds = None
363
+ for ds_name, conn_info in conn_infos.items():
364
+ if conn_info.dsType == 1: # ClickZetta type
365
+ lakehouse_ds = ds_name
366
+ break
367
+
368
+ if not lakehouse_ds:
369
+ raise DatabaseConnectionError("No lakehouse (ClickZetta) data source found in configuration")
370
+
371
+ # Create engine using the found lakehouse data source
372
+ return get_active_engine(
373
+ ds_name=lakehouse_ds,
374
+ vcluster=vcluster,
375
+ workspace=workspace,
376
+ schema=schema,
377
+ options=options,
378
+ query=query,
379
+ driver=driver,
380
+ *args, **kwargs
381
+ )
@@ -1 +1 @@
1
- __version__ = "1.0.6"
1
+ __version__ = "1.0.8"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: clickzetta-dbutils
3
- Version: 1.0.6
3
+ Version: 1.0.8
4
4
  Summary: clickzetta dbutils
5
5
  Author-email: "lin.zhang" <lin.zhang@clickzetta.com>
6
6
  Project-URL: documentation, https://www.yunqi.tech/
@@ -16,6 +16,8 @@ Provides-Extra: dev
16
16
  Requires-Dist: pytest==8.2.1; extra == "dev"
17
17
  Requires-Dist: build; extra == "dev"
18
18
  Requires-Dist: pytest-xdist; 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"
19
22
  Provides-Extra: cliclzetta
20
- Requires-Dist: clickzetta-connector; extra == "cliclzetta"
21
- Requires-Dist: clickzetta-sqlalchemy; extra == "cliclzetta"
23
+ Requires-Dist: clickzetta-connector-python; extra == "cliclzetta"
@@ -0,0 +1,7 @@
1
+ clickzetta_dbutils/__init__.py,sha256=XSofC7BRKAZbgXkil1HFUiHZztzWWyHcbKNi5tpOjCk,350
2
+ clickzetta_dbutils/db_utils.py,sha256=AHtyOD-Kk980CtPg6mKIRhW1M7gG9j68-Y7TBJvgF0Q,12681
3
+ clickzetta_dbutils/version.py,sha256=p_ws-9W7HeP_RfNuGscH3UIczaDFgLeGOeDgRBhdzrc,21
4
+ clickzetta_dbutils-1.0.8.dist-info/METADATA,sha256=_sO2JXZFTe5AFT0cPa2Uuqz_v-mlRo0qDay1MZ0IOPs,852
5
+ clickzetta_dbutils-1.0.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
6
+ clickzetta_dbutils-1.0.8.dist-info/top_level.txt,sha256=8o5KqMSg9pxnPNejHjMaqZV2vEDvwvsz2GdChZI0N6I,19
7
+ clickzetta_dbutils-1.0.8.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- clickzetta_dbutils/__init__.py,sha256=Q_6kas0RvZ0767qlaA_xGESmXxm0dks1YQ8DqCX8LV0,290
2
- clickzetta_dbutils/db_utils.py,sha256=1iVaiYIQosukrQBAbgjNXJJW51p7k1ihQKBIcl_MvQM,10166
3
- clickzetta_dbutils/version.py,sha256=fCDDAyG3nMZcE_hvt1RHdxkiFN3DfNSyU_k-rLUDrpE,21
4
- clickzetta_dbutils-1.0.6.dist-info/METADATA,sha256=mpfK67NkOGCBN_wu5NcTvMLLTsVGlLxmnNdcX3KTiFw,726
5
- clickzetta_dbutils-1.0.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
6
- clickzetta_dbutils-1.0.6.dist-info/top_level.txt,sha256=8o5KqMSg9pxnPNejHjMaqZV2vEDvwvsz2GdChZI0N6I,19
7
- clickzetta_dbutils-1.0.6.dist-info/RECORD,,