pydpm_xl 0.2.7__tar.gz → 0.2.8__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.
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/PKG-INFO +1 -1
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/__init__.py +1 -1
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/utils.py +17 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/PKG-INFO +1 -1
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pyproject.toml +2 -2
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/LICENSE +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/README.md +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/data_dictionary.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/explorer.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/hierarchical_queries.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/instance.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/migration.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/ast_generator.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/complete_ast.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/operation_scopes.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/semantic.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/syntax.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/commands/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/main.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/migration.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/models.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/base.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/basic_objects.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/explorer_queries.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/filters.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/glossary.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/hierarchical_queries.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/tables.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/constructor.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/ml_generation.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/module_analyzer.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/module_dependencies.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/nodes.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/operands.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/template.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/visitor.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/where_clause.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.interp +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.tokens +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.interp +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.tokens +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserListener.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserVisitor.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/listeners.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/aggregate.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/arithmetic.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/base.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/boolean.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/clause.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/comparison.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/conditional.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/string.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/time.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/semantic_analyzer.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/symbols.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/promotion.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/scalar.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/time.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/data_handlers.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/operands_mapping.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/operator_mapping.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/scopes_calculator.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/serialization.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/tokens.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/exceptions.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/messages.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/instance/__init__.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/instance/instance.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/SOURCES.txt +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/dependency_links.txt +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/entry_points.txt +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/requires.txt +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/top_level.txt +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/setup.cfg +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_cli_semantic.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_data_dictionary_releases.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_db_connection_handling.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_table_details.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_tables_date_filter.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_tables_release_code.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_hierarchical_query.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_query_refactor.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_release_filters_semantic.py +0 -0
- {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_semantic_release.py +0 -0
|
@@ -41,7 +41,7 @@ Available packages:
|
|
|
41
41
|
- pydpm.api: Main APIs for migration, syntax, and semantic analysis
|
|
42
42
|
"""
|
|
43
43
|
|
|
44
|
-
__version__ = "0.2.
|
|
44
|
+
__version__ = "0.2.8"
|
|
45
45
|
__author__ = "MeaningfulData S.L."
|
|
46
46
|
__email__ = "info@meaningfuldata.eu"
|
|
47
47
|
__license__ = "GPL-3.0-or-later"
|
|
@@ -117,6 +117,13 @@ def create_engine_from_url(connection_url, pool_config=None):
|
|
|
117
117
|
# Detect database type from URL scheme
|
|
118
118
|
is_sqlite = connection_url.startswith("sqlite://")
|
|
119
119
|
|
|
120
|
+
# For PostgreSQL, ensure ISO datestyle if not already set
|
|
121
|
+
# This prevents date parsing errors when PostgreSQL returns dates in locale format
|
|
122
|
+
is_postgres = connection_url.startswith("postgresql://")
|
|
123
|
+
if is_postgres and "datestyle" not in connection_url.lower():
|
|
124
|
+
separator = "&" if "?" in connection_url else "?"
|
|
125
|
+
connection_url = f"{connection_url}{separator}options=-c%20datestyle%3DISO"
|
|
126
|
+
|
|
120
127
|
# For SQLite URLs, always create a fresh engine to avoid
|
|
121
128
|
# surprising cross-test or cross-call state sharing, especially
|
|
122
129
|
# for in-memory databases. For server-based databases, reuse the
|
|
@@ -167,6 +174,14 @@ def create_engine_object(url):
|
|
|
167
174
|
# Detect database type from URL scheme (not from environment variables)
|
|
168
175
|
is_sqlite = url_str.startswith("sqlite://")
|
|
169
176
|
|
|
177
|
+
# For PostgreSQL, ensure ISO datestyle if not already set
|
|
178
|
+
# This prevents date parsing errors when PostgreSQL returns dates in locale format
|
|
179
|
+
is_postgres = url_str.startswith("postgresql://")
|
|
180
|
+
if is_postgres and "datestyle" not in url_str.lower():
|
|
181
|
+
separator = "&" if "?" in url_str else "?"
|
|
182
|
+
url_str = f"{url_str}{separator}options=-c%20datestyle%3DISO"
|
|
183
|
+
url = url_str # Use modified URL for engine creation
|
|
184
|
+
|
|
170
185
|
# Only reuse engines for non-SQLite URLs. SQLite (especially in-memory)
|
|
171
186
|
# should create independent engines to avoid leaking state between calls.
|
|
172
187
|
if not is_sqlite and engine is not None and _current_engine_url == url_str:
|
|
@@ -230,6 +245,7 @@ def get_engine(owner=None, database_path=None, connection_url=None, pool_config=
|
|
|
230
245
|
port = db_port or "5432"
|
|
231
246
|
connection_url = (
|
|
232
247
|
f"postgresql://{db_user}:{db_password}@{db_host}:{port}/{db_name}"
|
|
248
|
+
"?options=-c%20datestyle%3DISO"
|
|
233
249
|
)
|
|
234
250
|
return create_engine_object(connection_url)
|
|
235
251
|
else:
|
|
@@ -277,6 +293,7 @@ def get_engine(owner=None, database_path=None, connection_url=None, pool_config=
|
|
|
277
293
|
connection_url = (
|
|
278
294
|
f"postgresql://{postgres_user}:{postgres_pass}@"
|
|
279
295
|
f"{postgres_host}:{postgres_port}/{postgres_db}"
|
|
296
|
+
"?options=-c%20datestyle%3DISO"
|
|
280
297
|
)
|
|
281
298
|
return create_engine_object(connection_url)
|
|
282
299
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pydpm_xl"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.8"
|
|
4
4
|
description = "Python library for DPM-XL data processing and analysis"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "MeaningfulData S.L.", email = "info@meaningfuldata.eu"}
|
|
@@ -52,7 +52,7 @@ exclude = []
|
|
|
52
52
|
|
|
53
53
|
[tool.poetry]
|
|
54
54
|
name = "pydpm_xl"
|
|
55
|
-
version = "0.2.
|
|
55
|
+
version = "0.2.8"
|
|
56
56
|
description = "Python library for DPM-XL data processing and analysis"
|
|
57
57
|
authors = ["MeaningfulData S.L. <info@meaningfuldata.eu>"]
|
|
58
58
|
readme = "README.md"
|
|
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
|
|
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
|
|
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
|
|
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
|