ecodev-core 0.0.52__tar.gz → 0.0.53__tar.gz
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.
Potentially problematic release.
This version of ecodev-core might be problematic. Click here for more details.
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/PKG-INFO +1 -1
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/__init__.py +2 -1
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/db_upsertion.py +32 -6
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/pyproject.toml +1 -1
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/LICENSE.md +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/README.md +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/app_activity.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/app_rights.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/app_user.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/auth_configuration.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/authentication.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/backup.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/check_dependencies.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/custom_equal.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/db_connection.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/db_filters.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/db_insertion.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/db_retrieval.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/deployment.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/email_sender.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/enum_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/es_connection.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/list_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/logger.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/pandas_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/permissions.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/pydantic_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/read_write.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/safe_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/settings.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/sqlmodel_utils.py +0 -0
- {ecodev_core-0.0.52 → ecodev_core-0.0.53}/ecodev_core/version.py +0 -0
|
@@ -40,6 +40,7 @@ from ecodev_core.db_insertion import get_raw_df
|
|
|
40
40
|
from ecodev_core.db_retrieval import count_rows
|
|
41
41
|
from ecodev_core.db_retrieval import get_rows
|
|
42
42
|
from ecodev_core.db_retrieval import ServerSideField
|
|
43
|
+
from ecodev_core.db_upsertion import add_missing_enum_values
|
|
43
44
|
from ecodev_core.db_upsertion import field
|
|
44
45
|
from ecodev_core.db_upsertion import filter_to_sfield_dict
|
|
45
46
|
from ecodev_core.db_upsertion import get_sfield_columns
|
|
@@ -107,4 +108,4 @@ __all__ = [
|
|
|
107
108
|
'sort_by_keys', 'sort_by_values', 'Settings', 'load_yaml_file', 'Deployment', 'Version',
|
|
108
109
|
'sfield', 'field', 'upsert_df_data', 'upsert_deletor', 'get_row_versions', 'get_versions',
|
|
109
110
|
'db_to_value', 'upsert_data', 'upsert_selector', 'get_sfield_columns', 'filter_to_sfield_dict',
|
|
110
|
-
'SETTINGS']
|
|
111
|
+
'SETTINGS', 'add_missing_enum_values']
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Module handling CRUD and version operations
|
|
3
3
|
"""
|
|
4
4
|
from datetime import datetime
|
|
5
|
+
from enum import EnumType
|
|
5
6
|
from functools import partial
|
|
6
7
|
from typing import Any
|
|
7
8
|
from typing import Union
|
|
@@ -14,6 +15,7 @@ from sqlmodel import inspect
|
|
|
14
15
|
from sqlmodel import select
|
|
15
16
|
from sqlmodel import Session
|
|
16
17
|
from sqlmodel import SQLModel
|
|
18
|
+
from sqlmodel import text
|
|
17
19
|
from sqlmodel import update
|
|
18
20
|
from sqlmodel.main import SQLModelMetaclass
|
|
19
21
|
from sqlmodel.sql.expression import SelectOfScalar
|
|
@@ -27,6 +29,31 @@ INFO = 'info'
|
|
|
27
29
|
SA_COLUMN_KWARGS = 'sa_column_kwargs'
|
|
28
30
|
|
|
29
31
|
|
|
32
|
+
def add_missing_enum_values(enum: EnumType, session: Session, new_vals: list | None = None) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Add to an existing enum its missing db values. Do so by retrieving what is already in db, and
|
|
35
|
+
insert what is new
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
for val in [e.name for e in new_vals or enum if e.name not in get_enum_values(enum, session)]:
|
|
39
|
+
session.execute(text(f"ALTER TYPE {enum.__name__.lower()} ADD VALUE IF NOT EXISTS '{val}'"))
|
|
40
|
+
session.commit()
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_enum_values(enum: EnumType, session: Session) -> set[str]:
|
|
44
|
+
"""
|
|
45
|
+
Return all enum values in db for the passed enum.
|
|
46
|
+
"""
|
|
47
|
+
result = session.execute(text(
|
|
48
|
+
"""
|
|
49
|
+
SELECT enumlabel FROM pg_enum
|
|
50
|
+
JOIN pg_type ON pg_enum.enumtypid = pg_type.oid
|
|
51
|
+
WHERE pg_type.typname = :enum_name
|
|
52
|
+
"""
|
|
53
|
+
), {'enum_name': enum.__name__.lower()})
|
|
54
|
+
return {x[0] for x in result}
|
|
55
|
+
|
|
56
|
+
|
|
30
57
|
def sfield(**kwargs):
|
|
31
58
|
"""
|
|
32
59
|
Field constructor for columns not to be versioned. Those are the columns on which to select.
|
|
@@ -147,11 +174,11 @@ def get_sfield_columns(db_model: SQLModelMetaclass) -> list[str]:
|
|
|
147
174
|
for x in inspect(db_model).c
|
|
148
175
|
if x.info.get(FILTER_ON) is True
|
|
149
176
|
]
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
def filter_to_sfield_dict(row: dict | SQLModelMetaclass,
|
|
153
|
-
|
|
154
|
-
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def filter_to_sfield_dict(row: dict | SQLModelMetaclass,
|
|
180
|
+
db_schema: SQLModelMetaclass | None = None) \
|
|
181
|
+
-> dict[str, dict | SQLModelMetaclass]:
|
|
155
182
|
"""
|
|
156
183
|
Returns a dict with only sfields from object
|
|
157
184
|
Args:
|
|
@@ -162,4 +189,3 @@ def filter_to_sfield_dict(row: dict | SQLModelMetaclass,
|
|
|
162
189
|
"""
|
|
163
190
|
return {pk: getattr(row, pk)
|
|
164
191
|
for pk in get_sfield_columns(db_schema or row.__class__)}
|
|
165
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|