pydpm_xl 0.2.12__tar.gz → 0.2.14__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.12/pydpm_xl.egg-info → pydpm_xl-0.2.14}/PKG-INFO +1 -1
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/__init__.py +1 -1
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/ast_generator.py +1 -1
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/serialization.py +25 -6
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14/pydpm_xl.egg-info}/PKG-INFO +1 -1
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pyproject.toml +2 -2
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/LICENSE +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/README.md +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/data_dictionary.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/explorer.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/hierarchical_queries.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/instance.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm/migration.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/complete_ast.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/operation_scopes.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/semantic.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/api/dpm_xl/syntax.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/cli/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/cli/commands/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/cli/main.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/migration.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/models.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/base.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/basic_objects.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/explorer_queries.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/filters.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/glossary.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/hierarchical_queries.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/queries/tables.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm/utils.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/constructor.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/ml_generation.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/module_analyzer.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/module_dependencies.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/nodes.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/operands.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/template.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/visitor.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/ast/where_clause.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.interp +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlLexer.tokens +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.interp +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlParser.tokens +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserListener.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/dpm_xlParserVisitor.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/grammar/generated/listeners.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/aggregate.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/arithmetic.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/base.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/boolean.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/clause.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/comparison.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/conditional.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/string.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/operators/time.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/semantic_analyzer.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/symbols.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/types/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/types/promotion.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/types/scalar.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/types/time.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/data_handlers.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/operands_mapping.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/operator_mapping.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/scopes_calculator.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/dpm_xl/utils/tokens.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/exceptions/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/exceptions/exceptions.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/exceptions/messages.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/instance/__init__.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/py_dpm/instance/instance.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pydpm_xl.egg-info/SOURCES.txt +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pydpm_xl.egg-info/dependency_links.txt +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pydpm_xl.egg-info/entry_points.txt +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pydpm_xl.egg-info/requires.txt +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/pydpm_xl.egg-info/top_level.txt +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/setup.cfg +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_cli_semantic.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_data_dictionary_releases.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_db_connection_handling.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_get_table_details.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_get_tables_date_filter.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_get_tables_release_code.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_hierarchical_query.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_migration_type_inference.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_query_refactor.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/tests/test_release_filters_semantic.py +0 -0
- {pydpm_xl-0.2.12 → pydpm_xl-0.2.14}/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.14"
|
|
45
45
|
__author__ = "MeaningfulData S.L."
|
|
46
46
|
__email__ = "info@meaningfuldata.eu"
|
|
47
47
|
__license__ = "GPL-3.0-or-later"
|
|
@@ -413,19 +413,28 @@ class ASTToJSONVisitor(NodeVisitor):
|
|
|
413
413
|
'component': node.component
|
|
414
414
|
}
|
|
415
415
|
|
|
416
|
-
# Include property_id if present (required by adam-engine)
|
|
417
|
-
if hasattr(node, 'property_id') and node.property_id is not None:
|
|
418
|
-
result['property_id'] = node.property_id
|
|
419
|
-
|
|
420
416
|
return result
|
|
421
417
|
|
|
422
418
|
def visit_SubOp(self, node):
|
|
423
419
|
"""Visit SubOp nodes and serialize as SubClauseOp."""
|
|
420
|
+
# Create a Dimension node for the property_code
|
|
421
|
+
dimension = {
|
|
422
|
+
'class_name': 'Dimension',
|
|
423
|
+
'dimension_code': node.property_code
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
# Create a BinOp with "=" operator
|
|
427
|
+
condition = {
|
|
428
|
+
'class_name': 'BinOp',
|
|
429
|
+
'op': '=',
|
|
430
|
+
'left': dimension,
|
|
431
|
+
'right': self.visit(node.value)
|
|
432
|
+
}
|
|
433
|
+
|
|
424
434
|
return {
|
|
425
435
|
'class_name': 'SubClauseOp',
|
|
426
436
|
'operand': self.visit(node.operand),
|
|
427
|
-
'
|
|
428
|
-
'value': self.visit(node.value)
|
|
437
|
+
'condition': condition
|
|
429
438
|
}
|
|
430
439
|
|
|
431
440
|
def visit_WhereClauseOp(self, node):
|
|
@@ -695,6 +704,16 @@ def serialize_ast(ast_obj):
|
|
|
695
704
|
if isinstance(expanded_obj, dict):
|
|
696
705
|
return {key: serialize_ast(value) for key, value in expanded_obj.items()}
|
|
697
706
|
|
|
707
|
+
# Use visitor pattern for GetOp and SubOp to get correct structure
|
|
708
|
+
# This must be checked BEFORE toJSON() to ensure nested nodes are handled correctly
|
|
709
|
+
if hasattr(ASTObjects, 'GetOp') and isinstance(expanded_obj, ASTObjects.GetOp):
|
|
710
|
+
visitor = ASTToJSONVisitor()
|
|
711
|
+
return visitor.visit(expanded_obj)
|
|
712
|
+
|
|
713
|
+
if hasattr(ASTObjects, 'SubOp') and isinstance(expanded_obj, ASTObjects.SubOp):
|
|
714
|
+
visitor = ASTToJSONVisitor()
|
|
715
|
+
return visitor.visit(expanded_obj)
|
|
716
|
+
|
|
698
717
|
if hasattr(expanded_obj, 'toJSON'):
|
|
699
718
|
serialized = expanded_obj.toJSON()
|
|
700
719
|
# Recursively serialize nested AST objects
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pydpm_xl"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.14"
|
|
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.14"
|
|
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
|