pydpm_xl 0.2.12__py3-none-any.whl → 0.2.14__py3-none-any.whl

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.
py_dpm/__init__.py CHANGED
@@ -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,4 +1,4 @@
1
- py_dpm/__init__.py,sha256=ymVfDvLwtVz1BFDL70Tv8rY5NBXcAYLeNmZomO1_0XM,1859
1
+ py_dpm/__init__.py,sha256=rgsGNZWfSYntEZEJZQ9VrdpTXSqGikt7JMPcEgwnixQ,1859
2
2
  py_dpm/api/__init__.py,sha256=bPWo4KWW99GmGkQbq0yQ3_tbTxvidEVVrWmcDXWz-xA,828
3
3
  py_dpm/api/dpm/__init__.py,sha256=HQflgiRbs1eDi3KTadNhxS1NoaG6PGQDVMvFnuIEfXo,506
4
4
  py_dpm/api/dpm/data_dictionary.py,sha256=q6w_5bFdc6WPd5Z601PpDaCcnIw39CnI4wdby3GJmFU,29893
@@ -7,7 +7,7 @@ py_dpm/api/dpm/hierarchical_queries.py,sha256=X4AbpsWy3iItOTVIdVbtaTmRgOHPf0Y64I
7
7
  py_dpm/api/dpm/instance.py,sha256=v3DWzdaM5gPCecLjwjZ49FGfqZzUR3dPC0U8zGwdttk,3795
8
8
  py_dpm/api/dpm/migration.py,sha256=9FT7zzz4QdUIRR6MD01gMODBtfq9HH_RF4hRgZqMcZc,2404
9
9
  py_dpm/api/dpm_xl/__init__.py,sha256=SOsCtwxuCkFQIdYoTcU6tVJdK1j96dPF4ZQpr8okLPc,576
10
- py_dpm/api/dpm_xl/ast_generator.py,sha256=38Kvz9b_SxX1rCMeJ5FqD4y73yNxoQvAPlmqGT5aMNM,100504
10
+ py_dpm/api/dpm_xl/ast_generator.py,sha256=KviFmAW65gMy4Bq1l2IUR7hRHRhC1yWRAhf2UcGK-Jo,100504
11
11
  py_dpm/api/dpm_xl/complete_ast.py,sha256=jjn9tsns4X7EN4RV5mFh5DRxxZfBOuX2b1wic4oB_ls,3967
12
12
  py_dpm/api/dpm_xl/operation_scopes.py,sha256=v2t3f2-AiF39hspNtpf_PA94T69JqbymFK9a5hpckRs,48831
13
13
  py_dpm/api/dpm_xl/semantic.py,sha256=Ddmh2Wj_iXIpQZ4jCjqOI-6ddFCquaO9RTu6W9i1Rts,13968
@@ -69,16 +69,16 @@ py_dpm/dpm_xl/utils/data_handlers.py,sha256=a0E-IaP_-CDKLcj-Gt2ggAziKIOUiwnT2D9I
69
69
  py_dpm/dpm_xl/utils/operands_mapping.py,sha256=LG0hPlUuTM2X2uWOtiD6HkmNeDEJkWJ8gV-Fxej_8QM,2241
70
70
  py_dpm/dpm_xl/utils/operator_mapping.py,sha256=BFgbVbSCSuutFNHJ4gtgm5VuG38pcl8Kmfi-sefg6JU,1913
71
71
  py_dpm/dpm_xl/utils/scopes_calculator.py,sha256=do_emsUqD1TbrjguKlOOqFleaVhxzqm-NnlgdrdIb6I,20906
72
- py_dpm/dpm_xl/utils/serialization.py,sha256=leCZFHyaPjskLM1P27oupXfTdO5Pcbf7R_MFsLCMT28,33429
72
+ py_dpm/dpm_xl/utils/serialization.py,sha256=W1Bi0Ge8dQxS0TIwLiq-uroGqvcATQEuUfndRUiAwBw,34071
73
73
  py_dpm/dpm_xl/utils/tokens.py,sha256=VRIrPDi5ttwgH-on5Qt4-l4ho4bLA755-nfTalponcA,3496
74
74
  py_dpm/exceptions/__init__.py,sha256=yDERfUxYW7NUUEiTQChGpuJx6abr7IDe2XUpwVFPtvM,416
75
75
  py_dpm/exceptions/exceptions.py,sha256=6S3p-_i5O1oStvSMixt_JQG0xwTeSfBcdzrwL8yBy6Q,2413
76
76
  py_dpm/exceptions/messages.py,sha256=UwY6QIK8c-POcDCc9HYbZFGArCIYAanUGNh2LNKPx3U,7534
77
77
  py_dpm/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
78
  py_dpm/instance/instance.py,sha256=gRSg2dh1nEa0Srx9yKcN3bxiYidvZyRU_jsTNaKkP5I,10882
79
- pydpm_xl-0.2.12.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
80
- pydpm_xl-0.2.12.dist-info/METADATA,sha256=lVK_kKSvGgw03PWz5sgSETcEPgeoep0tr9xf7E6L5yA,9154
81
- pydpm_xl-0.2.12.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
82
- pydpm_xl-0.2.12.dist-info/entry_points.txt,sha256=6DDmBfw-AjtgvMHgq_I730i_LAAs_7-N3C95HD_bRr4,47
83
- pydpm_xl-0.2.12.dist-info/top_level.txt,sha256=495PvWZRoKl2NvbQU25W7dqWIBHqY-mFMPt83uxPpcM,7
84
- pydpm_xl-0.2.12.dist-info/RECORD,,
79
+ pydpm_xl-0.2.14.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
80
+ pydpm_xl-0.2.14.dist-info/METADATA,sha256=jy6zXc80F3Hf7DXNhtJo66wXiZwNi0-bu6yBufOmWQA,9154
81
+ pydpm_xl-0.2.14.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
82
+ pydpm_xl-0.2.14.dist-info/entry_points.txt,sha256=6DDmBfw-AjtgvMHgq_I730i_LAAs_7-N3C95HD_bRr4,47
83
+ pydpm_xl-0.2.14.dist-info/top_level.txt,sha256=495PvWZRoKl2NvbQU25W7dqWIBHqY-mFMPt83uxPpcM,7
84
+ pydpm_xl-0.2.14.dist-info/RECORD,,