Private
Public Access
0
0
Files
manual_slop/scripts/artifacts/tier2_state/wrap_dag_with_try.py
T
2026-07-02 19:03:49 -04:00

109 lines
3.7 KiB
Python

"""Wrap the body of the if (app.active_track or app.active_tickets) and app.node_editor_ctx:
block in render_task_dag_panel with a try/except. To do this without manually
reindenting ~195 lines, we use a Python script that finds the if line, dedents
the body, inserts try/except, and re-indents.
"""
import re
from pathlib import Path
GUI_2 = Path(r"C:\projects\manual_slop_tier2\src\gui_2.py")
text = GUI_2.read_text(encoding="utf-8")
lines = text.splitlines(keepends=True)
# Find the function start
fn_start = None
for i, line in enumerate(lines):
if "def render_task_dag_panel" in line:
fn_start = i
break
if fn_start is None:
raise RuntimeError("render_task_dag_panel not found")
# Find the if (app.active_track or app.active_tickets) and app.node_editor_ctx: line
if_start = None
for i in range(fn_start, len(lines)):
line = lines[i]
stripped = line.lstrip()
if stripped.startswith("if (app.active_track or app.active_tickets)"):
if_start = i
break
if if_start is None:
raise RuntimeError("if not found")
# Find the end of the if block (matching 0-indent next line, or next def)
if_end = None
for i in range(if_start + 1, len(lines)):
line = lines[i]
if line.strip() == "" or line.startswith(" ") or line.startswith("\t"):
continue
# Found a non-indented line that's not blank
if_end = i
break
if if_end is None:
if_end = len(lines)
# Find body bounds (indented lines)
body_start = if_start + 1
while body_start < if_end and lines[body_start].strip() == "":
body_start += 1
# Find actual body end (last indented line before 0-indent)
body_end = body_end = if_end
for i in range(if_end - 1, if_start, -1):
if lines[i].strip() != "":
body_end = i + 1
break
# Get the indentation of the if line
if_indent = len(lines[if_start]) - len(lines[if_start].lstrip())
# Body indent should be if_indent + 2 (next level)
body_indent = if_indent + 2
# Extract body lines (preserve content)
body_lines = lines[body_start:body_end]
# Detent: strip body_indent spaces from each line
detented_body = []
for ln in body_lines:
if ln.strip() == "":
detented_body.append("\n")
elif ln.startswith(" " * body_indent):
detented_body.append(" " + ln[body_indent:])
else:
detented_body.append(ln)
# Re-indent: add body_indent spaces to each line
reindented_body = []
for ln in detented_body:
if ln.strip() == "":
reindented_body.append("\n")
else:
reindented_body.append(" " * (body_indent - 1) + ln)
# Build the new content
new_lines = []
new_lines.append(lines[if_start]) # the if line
new_lines.append(" " * (if_indent + 1) + "try:\n")
for ln in reindented_body:
new_lines.append(ln)
new_lines.append(" " * (if_indent + 1) + "except Exception as dag_err:\n")
new_lines.append(" " * (if_indent + 2) + "# imgui-node-editor can raise ImGui assertions (e.g. Missing PopID) that\n")
new_lines.append(" " * (if_indent + 2) + "# would otherwise kill the ImGui main loop and break every subsequent\n")
new_lines.append(" " * (if_indent + 2) + "# test in the same xdist worker that shares the live_gui subprocess.\n")
new_lines.append(" " * (if_indent + 2) + "if not hasattr(app, '_last_request_errors'): app._last_request_errors = []\n")
new_lines.append(" " * (if_indent + 2) + "app._last_request_errors.append(('render_task_dag_panel.dag_error', dag_err))\n")
# Lines after the if body (0-indent)
for i in range(body_end, if_end):
new_lines.append(lines[i])
# Replace
new_text = "".join(lines[:if_start]) + "".join(new_lines) + "".join(lines[if_end:])
# Write back
GUI_2.write_text(new_text, encoding="utf-8")
print(f"OK: modified if block at line {if_start+1}, body lines {body_end - body_start}")