Skip to content

fix(clean): filtra read_params_used alle opzioni di lettura in validate - #517

Merged
Gabrymi93 merged 1 commit into
mainfrom
fix/validate-read-params-filter
Oct 25, 2026
Merged

Gabrymi93 merged 1 commit into
mainfrom
fix/validate-read-params-filter

Conversation

@Gabrymi93

Copy link
Copy Markdown
Member

Sintesi

La validazione di promozione del clean ri-profila il raw riusando read_params_used dai metadata del clean. Quei params contengono anche metadati di audit come inject_column (colonna costante iniettata per sorgente), che normalize_read_cfg rifiuta:

ValueError: Unsupported clean.read options for CSV reader: ['inject_column']

Risultato: il clean viene prodotto correttamente ma il run fallisce a valle su tutti i dataset multi-source con inject_column.

Contesto collegato

Nessuna issue: bug emerso implementando terna_load_oraria (due sorgenti per anno, distinte dal campo iniettato tipo_carico).

Cosa cambia

  • Bug fix

  • Nuova funzionalità del motore

  • Nuovo plugin sorgente

  • Modifica contratto pubblico (dataset.yml, path output, schema parquet)

  • Refactor / performance

  • Documentazione

  • Dipendenze o CI

  • nuovo helper _read_cfg_from_clean_metadata: filtra read_params_used alle sole chiavi ammesse dal reader (ALLOWED_READ_CSV_KEYS)

  • test di regressione (test_validate_promotion_ignores_inject_column_in_read_params) + unit (test_read_cfg_from_clean_metadata_drops_audit_keys)

Impatto su contratti pubblici

  • Struttura dataset.yml (nuovo campo, cambio obbligatorietà)
  • Path output (nuovo layer, cambio percorso artifact)
  • Schema parquet (nuova colonna, rename, cambio tipo)
  • CLI o MCP tool (nuovo comando, cambio parametro)
  • API pubblica del toolkit (firma funzione, classe, eccezione)

Nessun contratto modificato. read_params_used resta invariato nei metadata; cambia solo il modo in cui la validazione lo rilegge (tollerando chiavi non di lettura). _read_cfg_from_clean_metadata è privato.

Verifica

pytest -q          # 1324 passed, 1 skipped
ruff check .       # All checks passed
mypy toolkit/      # Success: no issues found in 130 source files
  • pytest -m core passa (intera suite verde)
  • ruff check . passa
  • mypy toolkit/ passa
  • Modificato o aggiunto test con marker appropriato (regression / pure_unit)

Regressione verificata: il test test_validate_promotion_ignores_inject_column_in_read_params fallisce senza il fix (ValueError) e passa con il fix.

Checklist PR

  • Perimetro stretto: una PR = un layer o un fix mirato
  • Issue collegata o motivazione dell'assenza (bug riprodotto, senza issue)
  • Nessuna rimozione di superficie pubblica

Note per chi revisiona

  • Il filtro usa ALLOWED_READ_CSV_KEYS (già definito in core/csv_read.py): se in futuro un'opzione di lettura valida venisse aggiunta lì, resta coperta automaticamente.
  • L'alternativa (non registrare inject_column in read_params_used) è stata scartata: quel metadato è utile per l'audit dei run.

La validazione di promozione ri-profila il raw riusando `read_params_used`
dai metadata del clean, che contiene anche metadati di audit come
`inject_column` (colonna costante iniettata per sorgente). Passandoli a
`normalize_read_cfg` la chiave viene rifiutata e il clean fallisce a valle
del run per i dataset multi-source con inject_column (caso reale:
terna_load_oraria).

Aggiunto helper `_read_cfg_from_clean_metadata` che filtra alle chiavi
ammesse (ALLOWED_READ_CSV_KEYS) + test di regressione.
@Gabrymi93
Gabrymi93 merged commit 7b326ed into main Oct 25, 2026
3 checks passed
@Gabrymi93
Gabrymi93 deleted the fix/validate-read-params-filter branch October 25, 2026 20:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant