Skip to content

fix(script source): timeout configurabile via client + iniezione client appiattito - #475

Merged
Gabrymi93 merged 5 commits into
mainfrom
fix/script-source-timeout
Aug 26, 2026
Merged

fix(script source): timeout configurabile via client + iniezione client appiattito#475
Gabrymi93 merged 5 commits into
mainfrom
fix/script-source-timeout

Conversation

@Gabrymi93

@Gabrymi93 Gabrymi93 commented Aug 18, 2026

Copy link
Copy Markdown
Member

Sintesi

Rende configurabile il timeout del source type script (era hardcoded a 600s) e sistema l'iniezione del client per i plugin quando il dataset.yml non dichiara il blocco client:.

Necessario per gli harvest lunghi via script (es. candidate inpa-bandi in dataset-incubator: OPEN ~13 min, CLOSED ~17 min), che venivano uccisi dal limite di 10 minuti.

Contesto collegato

Collegata a intake di dataset-incubator: inpa-bandi e inpa-comunicazioni (reclutamento PA dal Portale inPA).

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

Impatto su contratti pubblici

  • Struttura dataset.ymlraw.sources[].client.timeout ora letto dal source script (campo già usato da http_file/http_post_file, quindi coerente)
  • Path output
  • Schema parquet
  • CLI o MCP tool
  • API pubblica del toolkit

Backward-compatible: default invariato (600s); il campo client.timeout era già documentato per altri source.

Verifica

python -m pytest -q                     # 1379 passed (1401 collected, 22 deselected)
ruff check toolkit/raw/_fetch_utils.py toolkit/raw/run.py

Test aggiunto: tests/test_script_source.py::test_script_client_timeout_applied verifica che client.timeout venga letto dal subprocess.

Gabrymi93 added a commit that referenced this pull request Aug 24, 2026
RawSourceConfig.to_dict() ricostruisce il blocco client annidato
(timeout/retries/user_agent/headers) invece di appiattirlo a livello source.
Rimuove il workaround in run_raw (la parte 2 del commit precedente) che
iniettava i campi piatti: ora il contratto è onesto — il client del
dataset.yml è quello che i plugin vedono via source.get('client').

Risponde alla review PR #475: la parte 2 non serve come workaround; il fix
corretto è nel layer config (to_dict), che rende il client dichiarato
realmente utilizzabile senza complicare il motore.
- _fetch_script: timeout leggibile da client.timeout (default 600) — gli harvest
  lunghi (es. inPA ~17min) venivano uccisi dal limite hardcoded
- run_raw: se il source non ha il blocco client:, inietta i campi appiattiti
  (timeout/retries/user_agent/headers) da RawSourceConfig.to_dict() — i plugin
  script/http vedevano client vuoto e usavano i default
Regressione per il timeout hardcoded 600s — verifica che client.timeout
venga letto (1s per il test) invece del default.
RawSourceConfig.to_dict() ricostruisce il blocco client annidato
(timeout/retries/user_agent/headers) invece di appiattirlo a livello source.
Rimuove il workaround in run_raw (la parte 2 del commit precedente) che
iniettava i campi piatti: ora il contratto è onesto — il client del
dataset.yml è quello che i plugin vedono via source.get('client').

Risponde alla review PR #475: la parte 2 non serve come workaround; il fix
corretto è nel layer config (to_dict), che rende il client dichiarato
realmente utilizzabile senza complicare il motore.
ensure_dict(RawConfig) usava asdict che appiattiva i source ignorando il
to_dict di RawSourceConfig. Aggiunto RawConfig.to_dict che delega ai singoli
source: così il blocco client: (timeout/retries/...) del dataset.yml arriva
davvero ai plugin via source.get('client').
@Gabrymi93
Gabrymi93 force-pushed the fix/script-source-timeout branch from 0ee6ba8 to 7dc4e04 Compare August 24, 2026 13:14
Fix da review PR #475 (Medium): il test era comfort — con echo terminava in
<1s e passava identico anche se il timeout non veniva letto (default 600).

Ora usa uno script con 'sleep 5' e client.timeout=1: se il timeout non è
letto il subprocess completa senza errore (test fallisce), se è letto il
subprocess viene ucciso → TimeoutExpired. Verificato con prova del fuoco
(ripristino del timeout fisso → il test fallisce).
@Gabrymi93
Gabrymi93 merged commit 34407d1 into main Aug 26, 2026
3 checks passed
@Gabrymi93
Gabrymi93 deleted the fix/script-source-timeout branch August 26, 2026 11:26
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