py2dag 0.1.5__py3-none-any.whl → 0.1.7__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.
py2dag/parser.py CHANGED
@@ -139,12 +139,29 @@ def parse(source: str, function_name: Optional[str] = None) -> Dict[str, Any]:
139
139
  elif isinstance(stmt, ast.Return):
140
140
  if i != len(fn.body) - 1: # type: ignore[index]
141
141
  raise DSLParseError("return must be the last statement")
142
- if not isinstance(stmt.value, ast.Name):
143
- raise DSLParseError("return must return a variable name")
144
- var = stmt.value.id
145
- if var not in defined:
146
- raise DSLParseError(f"Undefined return variable: {var}")
147
- returned_var = var
142
+ if isinstance(stmt.value, ast.Name):
143
+ var = stmt.value.id
144
+ if var not in defined:
145
+ raise DSLParseError(f"Undefined return variable: {var}")
146
+ returned_var = var
147
+ elif isinstance(stmt.value, ast.Constant):
148
+ # Support returning a literal (e.g., "DONE"): synthesize a const op
149
+ lit = stmt.value.value
150
+ const_id_base = "return_value"
151
+ const_id = const_id_base
152
+ n = 1
153
+ while const_id in defined:
154
+ const_id = f"{const_id_base}_{n}"
155
+ n += 1
156
+ ops.append({
157
+ "id": const_id,
158
+ "op": "CONST.value",
159
+ "deps": [],
160
+ "args": {"value": lit},
161
+ })
162
+ returned_var = const_id
163
+ else:
164
+ raise DSLParseError("return must return a variable name or literal")
148
165
  else:
149
166
  raise DSLParseError("Only assignments, expression calls, and a final return are allowed in function body")
150
167
 
@@ -156,7 +173,9 @@ def parse(source: str, function_name: Optional[str] = None) -> Dict[str, Any]:
156
173
  if len(ops) > 200:
157
174
  raise DSLParseError("Too many operations")
158
175
 
159
- plan: Dict[str, Any] = {"version": 1, "ops": ops, "outputs": outputs}
176
+ # Include the parsed function name for visibility/debugging
177
+ fn_name = getattr(fn, "name", None) # type: ignore[attr-defined]
178
+ plan: Dict[str, Any] = {"version": 1, "function": fn_name, "ops": ops, "outputs": outputs}
160
179
  if settings:
161
180
  plan["settings"] = settings
162
181
  return plan
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: py2dag
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary: Convert Python function plans to DAG (JSON, pseudo, optional SVG).
5
5
  License: MIT
6
6
  Author: rvergis
@@ -2,10 +2,10 @@ py2dag/__init__.py,sha256=i8VB44JCVcRJAcvnQtbH8YVRUz5j7dE355iRbikXPGQ,250
2
2
  py2dag/cli.py,sha256=BCBi5mNxOqeEN8uEMt_hiDx0iSt7ZE3y74cGXREzZ2I,1296
3
3
  py2dag/export_dagre.py,sha256=S244wUxBMuM9qXD8bklaslkMp3rcbBGWvMhwWVBzBF0,3487
4
4
  py2dag/export_svg.py,sha256=YyjqOuj8GhUTDWP70SKnnSWAKI1PvJwyOhHLwB29uNM,1812
5
- py2dag/parser.py,sha256=2sYscG3hFHK7RxJ6rNlO1w9GnxF-9hZG6SMAs_oGDu0,8849
5
+ py2dag/parser.py,sha256=1U16-GOQMa8oriJLePJ2TQlRZsrC9A4apy5V-V10M1A,9774
6
6
  py2dag/pseudo.py,sha256=NJK61slyFLtSjhj8gJDJneUInEpBN57_41g8IfHNPWI,922
7
- py2dag-0.1.5.dist-info/LICENSE,sha256=3Qee1EPwej_nusovTbyIQ8LvD2rXHdM0c6LNwk_D8Kc,1067
8
- py2dag-0.1.5.dist-info/METADATA,sha256=yEDK8WOlw2SYEa5J_3H7OINAfFLmPLgvi0UzJ50O9Cg,3537
9
- py2dag-0.1.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
10
- py2dag-0.1.5.dist-info/entry_points.txt,sha256=Q0SHexJJ0z1te4AYL1xTZogx5FrxCCE1ZJ5qntkFMZs,42
11
- py2dag-0.1.5.dist-info/RECORD,,
7
+ py2dag-0.1.7.dist-info/LICENSE,sha256=3Qee1EPwej_nusovTbyIQ8LvD2rXHdM0c6LNwk_D8Kc,1067
8
+ py2dag-0.1.7.dist-info/METADATA,sha256=MEkl1D4hDnS69pFadkzMpLkULnek1jCo4R7_of6PqjE,3537
9
+ py2dag-0.1.7.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
10
+ py2dag-0.1.7.dist-info/entry_points.txt,sha256=Q0SHexJJ0z1te4AYL1xTZogx5FrxCCE1ZJ5qntkFMZs,42
11
+ py2dag-0.1.7.dist-info/RECORD,,
File without changes