Impostazioni non validate: csv_delimiter sbagliato blocca la chiusura delle produzioni #23

Closed
opened 2026-09-21 20:14:47 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/backend/api/routers/settings.py:38-79 ; src/backend/services/production_export_service.py:106 ; src/backend/services/production_service.py:443
COSA: PUT /api/settings/ non valida nulla. Delimitatore vuoto o di più caratteri → csv.writer lancia TypeError dentro close_run → 500, rollback: la stazione non chiude più il run né ne apre un altro.
INPUT: admin salva {"csv_delimiter": ";;"}, poi POST /api/production-runs/{id}/close.
VERIFICATO: script pytest → DELIM ';;' -> TypeError "delimiter" must be a 1-character string; idem stringa vuota.
PRESUNTO: il blocco del run (percorso intero non eseguito).

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/backend/api/routers/settings.py:38-79 ; src/backend/services/production_export_service.py:106 ; src/backend/services/production_service.py:443 COSA: `PUT /api/settings/` non valida nulla. Delimitatore vuoto o di più caratteri → `csv.writer` lancia TypeError dentro `close_run` → 500, rollback: la stazione non chiude più il run né ne apre un altro. INPUT: admin salva `{"csv_delimiter": ";;"}`, poi `POST /api/production-runs/{id}/close`. VERIFICATO: script pytest → `DELIM ';;' -> TypeError "delimiter" must be a 1-character string`; idem stringa vuota. PRESUNTO: il blocco del run (percorso intero non eseguito). ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:47 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:23:01 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:23:01Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:23:01Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto A3

MODIFICHE: src/backend/api/routers/settings.py PUT /api/settings/ — validazione per chiave: csv_delimiter esattamente 1 carattere fra , ; \t |; per le altre chiavi note valida tipo/intervallo (leggi l'elenco delle chiavi usate: grep get_setting/chiavi in services) → 422. src/backend/services/production_export_service.py — difesa: delimitatore non valido letto dal DB → usa ; e logga WARNING, così close_run non fallisce mai per questo.
TEST: PUT ;; → 422; PUT `` → 422; DB con valore sporco preesistente → close_run riesce.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto A3 MODIFICHE: src/backend/api/routers/settings.py `PUT /api/settings/` — validazione per chiave: `csv_delimiter` esattamente 1 carattere fra `, ; \t |`; per le altre chiavi note valida tipo/intervallo (leggi l'elenco delle chiavi usate: grep `get_setting`/chiavi in services) → 422. src/backend/services/production_export_service.py — difesa: delimitatore non valido letto dal DB → usa `;` e logga WARNING, così `close_run` non fallisce mai per questo. TEST: PUT `;;` → 422; PUT `` → 422; DB con valore sporco preesistente → close_run riesce.
Author
Owner

Soluzione

ESITO: fatto
COSA: PUT /api/settings/ valida per chiave (csv_delimiter un carattere fra , ; TAB |) → 422. In lettura un delimitatore sporco già nel DB ripiega su ; con WARNING: close_run non fallisce più per questo.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): ea9da34
PROVA: uv run --extra server --extra client --extra dev pytest -q → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).

**Soluzione** ESITO: fatto COSA: `PUT /api/settings/` valida per chiave (csv_delimiter un carattere fra , ; TAB |) → 422. In lettura un delimitatore sporco già nel DB ripiega su `;` con WARNING: `close_run` non fallisce più per questo. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): ea9da34 PROVA: `uv run --extra server --extra client --extra dev pytest -q` → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:28 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#23