Fix 7 bugs: async proxies, mode default, JS key serialization, validation

- Use asyncio.to_thread for proxy endpoints to avoid blocking event loop
- Add mode to DEFAULTS so it doesn't silently insert 0
- Use JSON serialization for keys in project_dynamic.js (with comma fallback)
- Validate path exists in change_path, friendly error on duplicate rename
- Remove unused exp param from rename closure
- Use deepcopy for DEFAULTS consistently

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 20:29:24 +01:00
parent 993fc86070
commit 497e6b06fb
5 changed files with 30 additions and 15 deletions

View File

@@ -267,7 +267,7 @@ def render_batch_processor(state: AppState):
with ui.row().classes('q-mt-sm'):
def add_empty():
_add_sequence(DEFAULTS.copy())
_add_sequence(copy.deepcopy(DEFAULTS))
def add_from_source():
item = copy.deepcopy(DEFAULTS)
@@ -383,7 +383,7 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state,
# --- Action row ---
with ui.row().classes('w-full q-gutter-sm action-row'):
# Rename
async def rename(idx=i, s=seq, exp=expansion):
async def rename(s=seq):
result = await ui.run_javascript(
f'prompt("Rename sequence:", {json.dumps(s.get("name", ""))})',
timeout=30.0,