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.
Files changed (99) hide show
  1. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/PKG-INFO +1 -1
  2. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/__init__.py +1 -1
  3. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/utils.py +17 -0
  4. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/PKG-INFO +1 -1
  5. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pyproject.toml +2 -2
  6. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/LICENSE +0 -0
  7. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/README.md +0 -0
  8. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/__init__.py +0 -0
  9. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/__init__.py +0 -0
  10. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/data_dictionary.py +0 -0
  11. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/explorer.py +0 -0
  12. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/hierarchical_queries.py +0 -0
  13. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/instance.py +0 -0
  14. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm/migration.py +0 -0
  15. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/__init__.py +0 -0
  16. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/ast_generator.py +0 -0
  17. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/complete_ast.py +0 -0
  18. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/operation_scopes.py +0 -0
  19. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/semantic.py +0 -0
  20. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/api/dpm_xl/syntax.py +0 -0
  21. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/__init__.py +0 -0
  22. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/commands/__init__.py +0 -0
  23. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/cli/main.py +0 -0
  24. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/__init__.py +0 -0
  25. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/migration.py +0 -0
  26. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/models.py +0 -0
  27. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/base.py +0 -0
  28. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/basic_objects.py +0 -0
  29. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/explorer_queries.py +0 -0
  30. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/filters.py +0 -0
  31. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/glossary.py +0 -0
  32. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/hierarchical_queries.py +0 -0
  33. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm/queries/tables.py +0 -0
  34. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/__init__.py +0 -0
  35. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/__init__.py +0 -0
  36. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/constructor.py +0 -0
  37. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/ml_generation.py +0 -0
  38. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/module_analyzer.py +0 -0
  39. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/module_dependencies.py +0 -0
  40. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/nodes.py +0 -0
  41. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/operands.py +0 -0
  42. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/template.py +0 -0
  43. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/visitor.py +0 -0
  44. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/ast/where_clause.py +0 -0
  45. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/__init__.py +0 -0
  46. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/__init__.py +0 -0
  47. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.interp +0 -0
  48. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.py +0 -0
  49. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.tokens +0 -0
  50. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.interp +0 -0
  51. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.py +0 -0
  52. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.tokens +0 -0
  53. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserListener.py +0 -0
  54. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserVisitor.py +0 -0
  55. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/grammar/generated/listeners.py +0 -0
  56. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/__init__.py +0 -0
  57. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/aggregate.py +0 -0
  58. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/arithmetic.py +0 -0
  59. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/base.py +0 -0
  60. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/boolean.py +0 -0
  61. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/clause.py +0 -0
  62. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/comparison.py +0 -0
  63. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/conditional.py +0 -0
  64. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/string.py +0 -0
  65. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/operators/time.py +0 -0
  66. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/semantic_analyzer.py +0 -0
  67. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/symbols.py +0 -0
  68. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/__init__.py +0 -0
  69. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/promotion.py +0 -0
  70. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/scalar.py +0 -0
  71. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/types/time.py +0 -0
  72. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/__init__.py +0 -0
  73. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/data_handlers.py +0 -0
  74. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/operands_mapping.py +0 -0
  75. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/operator_mapping.py +0 -0
  76. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/scopes_calculator.py +0 -0
  77. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/serialization.py +0 -0
  78. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/dpm_xl/utils/tokens.py +0 -0
  79. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/__init__.py +0 -0
  80. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/exceptions.py +0 -0
  81. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/exceptions/messages.py +0 -0
  82. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/instance/__init__.py +0 -0
  83. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/py_dpm/instance/instance.py +0 -0
  84. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/SOURCES.txt +0 -0
  85. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/dependency_links.txt +0 -0
  86. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/entry_points.txt +0 -0
  87. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/requires.txt +0 -0
  88. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/pydpm_xl.egg-info/top_level.txt +0 -0
  89. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/setup.cfg +0 -0
  90. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_cli_semantic.py +0 -0
  91. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_data_dictionary_releases.py +0 -0
  92. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_db_connection_handling.py +0 -0
  93. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_table_details.py +0 -0
  94. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_tables_date_filter.py +0 -0
  95. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_get_tables_release_code.py +0 -0
  96. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_hierarchical_query.py +0 -0
  97. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_query_refactor.py +0 -0
  98. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_release_filters_semantic.py +0 -0
  99. {pydpm_xl-0.2.7 → pydpm_xl-0.2.8}/tests/test_semantic_release.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydpm_xl
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Summary: Python library for DPM-XL data processing and analysis
5
5
  Author-email: "MeaningfulData S.L." <info@meaningfuldata.eu>
6
6
  License: GPL-3.0-or-later
@@ -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.7"
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
  Metadata-Version: 2.4
2
2
  Name: pydpm_xl
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Summary: Python library for DPM-XL data processing and analysis
5
5
  Author-email: "MeaningfulData S.L." <info@meaningfuldata.eu>
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pydpm_xl"
3
- version = "0.2.7"
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.5"
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