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 +8 -5
- hdx/database/_version.py +2 -2
- hdx/database/views.py +33 -3
- {hdx_python_database-1.2.8.dist-info → hdx_python_database-1.3.0.dist-info}/METADATA +1 -1
- hdx_python_database-1.3.0.dist-info/RECORD +12 -0
- {hdx_python_database-1.2.8.dist-info → hdx_python_database-1.3.0.dist-info}/WHEEL +1 -1
- hdx_python_database-1.2.8.dist-info/RECORD +0 -12
- {hdx_python_database-1.2.8.dist-info → hdx_python_database-1.3.0.dist-info}/licenses/LICENSE +0 -0
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
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
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,
|
|
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:
|
|
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 (
|
|
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
|
|
@@ -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,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,,
|
{hdx_python_database-1.2.8.dist-info → hdx_python_database-1.3.0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|