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