pydpm_xl 0.1.39rc30__tar.gz → 0.1.39rc32__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.1.39rc30 → pydpm_xl-0.1.39rc32}/PKG-INFO +2 -2
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/__init__.py +1 -1
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/__init__.py +2 -2
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/complete_ast.py +38 -8
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/client.py +225 -79
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/PKG-INFO +2 -2
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/SOURCES.txt +1 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/requires.txt +1 -1
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pyproject.toml +4 -4
- pydpm_xl-0.1.39rc32/tests/test_cli_semantic.py +193 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/LICENSE +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/README.md +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ASTConstructor.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ASTObjects.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ASTTemplate.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ASTVisitor.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/MLGeneration.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ModuleAnalyzer.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/ModuleDependencies.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/WhereClauseChecker.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/AST/check_operands.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/DataTypes/ScalarTypes.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/DataTypes/TimeClasses.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/DataTypes/TypePromotion.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/DataTypes/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Exceptions/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Exceptions/exceptions.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Exceptions/messages.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/OperationScopes/OperationScopeService.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/OperationScopes/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/AggregateOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/BooleanOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/ClauseOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/ComparisonOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/ConditionalOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/NumericOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/Operator.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/StringOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/TimeOperators.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Operators/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/ValidationsGenerationUtils.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/ast_serialization.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/operands_mapping.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/operator_mapping.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/tokens.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/Utils/utils.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/ValidationsGeneration/PropertiesConstraintsProcessor.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/ValidationsGeneration/Utils.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/ValidationsGeneration/VariantsProcessor.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/ValidationsGeneration/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/ValidationsGeneration/auxiliary_functions.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/ast_generator.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/data_dictionary.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/data_dictionary_validation.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/migration.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/operation_scopes.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/semantic.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/api/syntax.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/data_handlers.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/db_utils.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlLexer.interp +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlLexer.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlLexer.tokens +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlParser.interp +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlParser.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlParser.tokens +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlParserListener.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/dpm_xlParserVisitor.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dist/listeners.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dpm_xlLexer.g4 +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/grammar/dpm_xlParser.g4 +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/migration.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/models.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/semantics/DAG/DAGAnalyzer.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/semantics/DAG/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/semantics/SemanticAnalyzer.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/semantics/Symbols.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/semantics/__init__.py +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/data_types.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/datapoints.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/hierarchy_operand_reference.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/hierarchy_preconditions.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/hierarchy_variables.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/hierarchy_variables_context.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/key_components.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/module_from_table.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/open_keys.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/operation_info.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/operation_list.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/operations_versions_from_module_version.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/precondition_info.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/report_type_operand_reference_info.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/subcategory_info.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/py_dpm/views/table_info.sql +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/dependency_links.txt +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/entry_points.txt +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/pydpm_xl.egg-info/top_level.txt +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/setup.cfg +0 -0
- {pydpm_xl-0.1.39rc30 → pydpm_xl-0.1.39rc32}/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.1.
|
|
3
|
+
Version: 0.1.39rc32
|
|
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
|
|
@@ -25,7 +25,7 @@ Requires-Dist: antlr4-python3-runtime<4.9.3,>=4.9.2
|
|
|
25
25
|
Requires-Dist: pyodbc<5.2.0,>=5.1.0
|
|
26
26
|
Requires-Dist: click<8.2.0,>=8.1.6
|
|
27
27
|
Requires-Dist: python-dotenv<1.1.0,>=1.0.1
|
|
28
|
-
Requires-Dist: psycopg2<3.0.0,>=2.9.0
|
|
28
|
+
Requires-Dist: psycopg2-binary<3.0.0,>=2.9.0
|
|
29
29
|
Provides-Extra: test
|
|
30
30
|
Requires-Dist: pytest<8.0.0,>=7.4.0; extra == "test"
|
|
31
31
|
Requires-Dist: pytest-cov<5.0.0,>=4.1.0; extra == "test"
|
|
@@ -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.1.
|
|
44
|
+
__version__ = "0.1.39rc32"
|
|
45
45
|
__author__ = "MeaningfulData S.L."
|
|
46
46
|
__email__ = "info@meaningfuldata.eu"
|
|
47
47
|
__license__ = "GPL-3.0-or-later"
|
|
@@ -167,10 +167,10 @@ class API:
|
|
|
167
167
|
cls.visitor = ASTVisitor()
|
|
168
168
|
cls.AST = cls.visitor.visit(cls.CST)
|
|
169
169
|
|
|
170
|
-
def semantic_validation(self, expression):
|
|
170
|
+
def semantic_validation(self, expression, release_id=None):
|
|
171
171
|
self.create_ast(expression=expression)
|
|
172
172
|
|
|
173
|
-
oc = OperandsChecking(session=self.session, expression=expression, ast=self.AST, release_id=
|
|
173
|
+
oc = OperandsChecking(session=self.session, expression=expression, ast=self.AST, release_id=release_id)
|
|
174
174
|
semanticAnalysis = SemanticAnalyzer.InputAnalyzer(expression)
|
|
175
175
|
|
|
176
176
|
semanticAnalysis.data = oc.data
|
|
@@ -14,7 +14,12 @@ from typing import Dict, Any, Optional
|
|
|
14
14
|
from py_dpm.Utils.ast_serialization import ASTToJSONVisitor
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
def generate_complete_ast(
|
|
17
|
+
def generate_complete_ast(
|
|
18
|
+
expression: str,
|
|
19
|
+
database_path: str = None,
|
|
20
|
+
connection_url: str = None,
|
|
21
|
+
release_id: Optional[int] = None
|
|
22
|
+
):
|
|
18
23
|
"""
|
|
19
24
|
Generate complete AST with all data fields, exactly like json_scripts examples.
|
|
20
25
|
|
|
@@ -25,6 +30,8 @@ def generate_complete_ast(expression: str, database_path: str = None, connection
|
|
|
25
30
|
expression: DPM-XL expression string
|
|
26
31
|
database_path: Path to SQLite database file (e.g., "./database.db")
|
|
27
32
|
connection_url: SQLAlchemy connection URL for PostgreSQL (optional)
|
|
33
|
+
release_id: Optional release ID to filter database lookups by specific release.
|
|
34
|
+
If None, uses all available data (release-agnostic).
|
|
28
35
|
|
|
29
36
|
Returns:
|
|
30
37
|
dict: {
|
|
@@ -59,7 +66,7 @@ def generate_complete_ast(expression: str, database_path: str = None, connection
|
|
|
59
66
|
|
|
60
67
|
# Perform complete semantic validation with operand checking
|
|
61
68
|
# This should populate all data fields on VarID nodes
|
|
62
|
-
semantic_result = api.semantic_validation(expression)
|
|
69
|
+
semantic_result = api.semantic_validation(expression, release_id=release_id)
|
|
63
70
|
|
|
64
71
|
|
|
65
72
|
# Force data population if semantic validation completed successfully
|
|
@@ -87,7 +94,7 @@ def generate_complete_ast(expression: str, database_path: str = None, connection
|
|
|
87
94
|
session=session,
|
|
88
95
|
expression=expression,
|
|
89
96
|
ast=inner_ast,
|
|
90
|
-
release_id=
|
|
97
|
+
release_id=release_id
|
|
91
98
|
)
|
|
92
99
|
|
|
93
100
|
# Apply the data from operand checker to VarID nodes
|
|
@@ -246,7 +253,12 @@ def _check_data_fields_populated(ast_dict):
|
|
|
246
253
|
return False
|
|
247
254
|
|
|
248
255
|
|
|
249
|
-
def generate_complete_batch(
|
|
256
|
+
def generate_complete_batch(
|
|
257
|
+
expressions: list,
|
|
258
|
+
database_path: str = None,
|
|
259
|
+
connection_url: str = None,
|
|
260
|
+
release_id: Optional[int] = None
|
|
261
|
+
):
|
|
250
262
|
"""
|
|
251
263
|
Generate complete ASTs for multiple expressions.
|
|
252
264
|
|
|
@@ -254,20 +266,29 @@ def generate_complete_batch(expressions: list, database_path: str = None, connec
|
|
|
254
266
|
expressions: List of DPM-XL expression strings
|
|
255
267
|
database_path: Path to SQLite database file
|
|
256
268
|
connection_url: SQLAlchemy connection URL for PostgreSQL (optional)
|
|
269
|
+
release_id: Optional release ID to filter database lookups by specific release.
|
|
270
|
+
If None, uses all available data (release-agnostic).
|
|
257
271
|
|
|
258
272
|
Returns:
|
|
259
273
|
list: List of result dictionaries
|
|
260
274
|
"""
|
|
261
275
|
results = []
|
|
262
276
|
for i, expr in enumerate(expressions):
|
|
263
|
-
result = generate_complete_ast(
|
|
277
|
+
result = generate_complete_ast(
|
|
278
|
+
expr, database_path, connection_url, release_id=release_id
|
|
279
|
+
)
|
|
264
280
|
result['batch_index'] = i
|
|
265
281
|
results.append(result)
|
|
266
282
|
return results
|
|
267
283
|
|
|
268
284
|
|
|
269
285
|
# Convenience function with cleaner interface
|
|
270
|
-
def parse_with_data_fields(
|
|
286
|
+
def parse_with_data_fields(
|
|
287
|
+
expression: str,
|
|
288
|
+
database_path: str = None,
|
|
289
|
+
connection_url: str = None,
|
|
290
|
+
release_id: Optional[int] = None
|
|
291
|
+
):
|
|
271
292
|
"""
|
|
272
293
|
Simple function to parse expression and get AST with data fields.
|
|
273
294
|
|
|
@@ -275,11 +296,15 @@ def parse_with_data_fields(expression: str, database_path: str = None, connectio
|
|
|
275
296
|
expression: DPM-XL expression string
|
|
276
297
|
database_path: Path to SQLite database file
|
|
277
298
|
connection_url: SQLAlchemy connection URL for PostgreSQL (optional)
|
|
299
|
+
release_id: Optional release ID to filter database lookups by specific release.
|
|
300
|
+
If None, uses all available data (release-agnostic).
|
|
278
301
|
|
|
279
302
|
Returns:
|
|
280
303
|
dict: AST dictionary with data fields, or None if failed
|
|
281
304
|
"""
|
|
282
|
-
result = generate_complete_ast(
|
|
305
|
+
result = generate_complete_ast(
|
|
306
|
+
expression, database_path, connection_url, release_id=release_id
|
|
307
|
+
)
|
|
283
308
|
return result['ast'] if result['success'] else None
|
|
284
309
|
|
|
285
310
|
|
|
@@ -296,6 +321,7 @@ def generate_enriched_ast(
|
|
|
296
321
|
operation_code: Optional[str] = None,
|
|
297
322
|
table_context: Optional[Dict[str, Any]] = None,
|
|
298
323
|
precondition: Optional[str] = None,
|
|
324
|
+
release_id: Optional[int] = None,
|
|
299
325
|
) -> Dict[str, Any]:
|
|
300
326
|
"""
|
|
301
327
|
Generate enriched, engine-ready AST from DPM-XL expression.
|
|
@@ -311,6 +337,8 @@ def generate_enriched_ast(
|
|
|
311
337
|
operation_code: Optional operation code (defaults to "default_code")
|
|
312
338
|
table_context: Optional table context dict with keys: 'table', 'columns', 'rows', 'sheets', 'default', 'interval'
|
|
313
339
|
precondition: Optional precondition variable reference (e.g., {v_F_44_04})
|
|
340
|
+
release_id: Optional release ID to filter database lookups by specific release.
|
|
341
|
+
If None, uses all available data (release-agnostic).
|
|
314
342
|
|
|
315
343
|
Returns:
|
|
316
344
|
dict: {
|
|
@@ -321,7 +349,9 @@ def generate_enriched_ast(
|
|
|
321
349
|
"""
|
|
322
350
|
try:
|
|
323
351
|
# Generate complete AST first
|
|
324
|
-
complete_result = generate_complete_ast(
|
|
352
|
+
complete_result = generate_complete_ast(
|
|
353
|
+
expression, database_path, connection_url, release_id=release_id
|
|
354
|
+
)
|
|
325
355
|
|
|
326
356
|
if not complete_result['success']:
|
|
327
357
|
return {
|