hdx-python-database 1.2.8__py3-none-any.whl → 1.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
hdx/database/__init__.py CHANGED
@@ -23,7 +23,7 @@ class Database:
23
23
  reflected classes. db_has_tz which defaults to False indicates whether
24
24
  database datetime columns have timezones. If not, conversion occurs between
25
25
  Python datetimes with timezones to timezoneless database columns (but not
26
- when using reflection).
26
+ when using reflection). If table_base is supplied, db_has_tz is ignored.
27
27
 
28
28
  Args:
29
29
  database (Optional[str]): Database name
@@ -34,6 +34,7 @@ class Database:
34
34
  dialect (str): Database dialect. Defaults to "postgresql".
35
35
  driver (Optional[str]): Database driver. Defaults to None (psycopg if postgresql or None)
36
36
  db_has_tz (bool): True if db datetime columns have timezone. Defaults to False.
37
+ table_base (Optional[Type[DeclarativeBase]]): Override table base. Defaults to None.
37
38
  reflect (bool): Whether to reflect existing tables. Defaults to False.
38
39
  **kwargs: See below
39
40
  ssh_host (str): SSH host (the server to connect to)
@@ -55,6 +56,7 @@ class Database:
55
56
  dialect: str = "postgresql",
56
57
  driver: Optional[str] = None,
57
58
  db_has_tz: bool = False,
59
+ table_base: Optional[Type[DeclarativeBase]] = None,
58
60
  reflect: bool = False,
59
61
  **kwargs: Any,
60
62
  ) -> None:
@@ -98,10 +100,11 @@ class Database:
98
100
  )
99
101
  if dialect == "postgresql":
100
102
  wait_for_postgresql(db_uri)
101
- if db_has_tz:
102
- table_base = TZBase
103
- else:
104
- table_base = NoTZBase
103
+ if not table_base:
104
+ if db_has_tz:
105
+ table_base = TZBase
106
+ else:
107
+ table_base = NoTZBase
105
108
  self.session = self.get_session(
106
109
  db_uri, table_base=table_base, reflect=reflect
107
110
  )
hdx/database/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.2.8'
16
- __version_tuple__ = version_tuple = (1, 2, 8)
15
+ __version__ = version = '1.3.0'
16
+ __version_tuple__ = version_tuple = (1, 3, 0)
hdx/database/views.py CHANGED
@@ -4,8 +4,10 @@ Create a DB View.
4
4
  Copied from:
5
5
  https://github.com/sqlalchemy/sqlalchemy/wiki/Views#sqlalchemy-14-20-version
6
6
  """
7
+ from typing import Dict, List
8
+
7
9
  import sqlalchemy as sa
8
- from sqlalchemy import MetaData, Select, TableClause
10
+ from sqlalchemy import MetaData, Selectable, TableClause
9
11
  from sqlalchemy.ext import compiler
10
12
  from sqlalchemy.schema import DDLElement
11
13
  from sqlalchemy.sql import table
@@ -43,13 +45,13 @@ def view_doesnt_exist(ddl, target, connection, **kw):
43
45
  return not view_exists(ddl, target, connection, **kw)
44
46
 
45
47
 
46
- def view(name: str, metadata: MetaData, selectable: Select) -> TableClause:
48
+ def view(name: str, metadata: MetaData, selectable: Selectable) -> TableClause:
47
49
  """Create SQLAlchemy view
48
50
 
49
51
  Args:
50
52
  name (str): View name
51
53
  metadata (MetaData): Base metadata
52
- selectable (Select): SQLAlchemy select statement
54
+ selectable (Selectable): SQLAlchemy select statement
53
55
 
54
56
  Returns:
55
57
  TableClause: SQLAlchemy View
@@ -71,3 +73,31 @@ def view(name: str, metadata: MetaData, selectable: Select) -> TableClause:
71
73
  DropView(name).execute_if(callable_=view_exists),
72
74
  )
73
75
  return t
76
+
77
+
78
+ def build_view(view_params: Dict) -> TableClause:
79
+ """Create SQLAlchemy view from dictionary with keys: name, metadata and
80
+ selectable
81
+
82
+ Args:
83
+ view_params (Dict): Dictionary with keys name, metadata, selectable
84
+
85
+ Returns:
86
+ TableClause: SQLAlchemy View
87
+ """
88
+ return view(**view_params)
89
+
90
+
91
+ def build_views(view_params_list: List[Dict]) -> List[TableClause]:
92
+ """Create SQLAlchemy views from a list of dictionaries with keys: name,
93
+ metadata and selectable
94
+
95
+ Args:
96
+ view_params_list (List[Dict]): List of dictionaries with view parameters
97
+ Returns:
98
+ List[TableClause]: SQLAlchemy Views
99
+ """
100
+ results = []
101
+ for view_params in view_params_list:
102
+ results.append(build_view(view_params))
103
+ return results
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hdx-python-database
3
- Version: 1.2.8
3
+ Version: 1.3.0
4
4
  Summary: HDX Python database utilities
5
5
  Project-URL: Homepage, https://github.com/OCHA-DAP/hdx-python-database
6
6
  Author-email: Michael Rans <rans@email.com>
@@ -0,0 +1,12 @@
1
+ hdx/database/__init__.py,sha256=0CpgEC9GAqCtmZtBsTvwoDsW3T0VHY0aCNAh53piP6g,5835
2
+ hdx/database/_version.py,sha256=HGwtpza1HCPtlyqElUvIyH97K44TO13CYiYVZNezQ1M,411
3
+ hdx/database/dburi.py,sha256=hNksrjaCC7AtD_M5ef0DCjkS0rJCofQqdXVD2BHBIGc,2938
4
+ hdx/database/no_timezone.py,sha256=jawupasbCwNo-lDbX24CtxaSilb6LS-jLx-wZAa58nM,1129
5
+ hdx/database/postgresql.py,sha256=9VlcdHhBURZPDaazj1kEq8gA4hUFJY-5hIN9uzibOlM,969
6
+ hdx/database/utils.py,sha256=6lLymWriMFCq8BZgrDt4V5z14GR3PbvG_WXZeBc99Ws,415
7
+ hdx/database/views.py,sha256=qJ_f6DpBUSzAGuBbgOXwQDZGni7b-DOUlAdAjSXKwhs,2635
8
+ hdx/database/with_timezone.py,sha256=GUUylmTwQHp22yedmCVKpVJzvjWgdS9lg9KeqciNJkY,235
9
+ hdx_python_database-1.3.0.dist-info/METADATA,sha256=8lJk615nDYiwB9vT9JUzfd-mpGVa6rIFA6kP9WVMgxI,2785
10
+ hdx_python_database-1.3.0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
11
+ hdx_python_database-1.3.0.dist-info/licenses/LICENSE,sha256=wc-4GpMn-ODs-U_bTe1YCiPVgvcjzrpYOx2wPuyAeII,1079
12
+ hdx_python_database-1.3.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.18.0
2
+ Generator: hatchling 1.21.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,12 +0,0 @@
1
- hdx/database/__init__.py,sha256=2_cogxv3jcucC5bnhB6OP8MAB1Yw9Mi7HQnuQUyBtTk,5590
2
- hdx/database/_version.py,sha256=s3iHFZtIHrLA43BEwwqCJ5Ch9SA-UTWHAi57WzfyPLM,411
3
- hdx/database/dburi.py,sha256=hNksrjaCC7AtD_M5ef0DCjkS0rJCofQqdXVD2BHBIGc,2938
4
- hdx/database/no_timezone.py,sha256=jawupasbCwNo-lDbX24CtxaSilb6LS-jLx-wZAa58nM,1129
5
- hdx/database/postgresql.py,sha256=9VlcdHhBURZPDaazj1kEq8gA4hUFJY-5hIN9uzibOlM,969
6
- hdx/database/utils.py,sha256=6lLymWriMFCq8BZgrDt4V5z14GR3PbvG_WXZeBc99Ws,415
7
- hdx/database/views.py,sha256=xT5_G-WgrmNtzICZluoy78VNMx3j8DC21yVyAlL0aDQ,1816
8
- hdx/database/with_timezone.py,sha256=GUUylmTwQHp22yedmCVKpVJzvjWgdS9lg9KeqciNJkY,235
9
- hdx_python_database-1.2.8.dist-info/METADATA,sha256=mu8VfUUThus3MdNQUkURcUnOsuDoNPHX22y9Smurh0c,2785
10
- hdx_python_database-1.2.8.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
11
- hdx_python_database-1.2.8.dist-info/licenses/LICENSE,sha256=wc-4GpMn-ODs-U_bTe1YCiPVgvcjzrpYOx2wPuyAeII,1079
12
- hdx_python_database-1.2.8.dist-info/RECORD,,