Skip to content

feat(scaffold): scaffolding CKAN via DataStore schema (#363)#408

Merged
Gabrymi93 merged 2 commits into
mainfrom
feat/ckan-datastore-scaffold
Jun 25, 2026
Merged

feat(scaffold): scaffolding CKAN via DataStore schema (#363)#408
Gabrymi93 merged 2 commits into
mainfrom
feat/ckan-datastore-scaffold

Conversation

@Gabrymi93

Copy link
Copy Markdown
Member

Descrizione

Lo scaffold CKAN attuale (_scaffold_ckan -> _scaffold_minimal_ckan) scarica il CSV per profilare colonne e tipi. Se il download fallisce (auth, redirect, formati misti), produce un clean.sql con SELECT * FROM raw_input.

Con questa PR, se la risorsa CKAN ha datastore_active=True, lo scaffold chiama datastore_search?limit=0 e genera colonne mappate senza scaricare nulla. Il fallback trasparente garantisce che per i portali senza DataStore (es. dati.gov.it) il comportamento resta invariato.

Modifiche

File Cosa
toolkit/scout/http.py discover_ckan_resources include datastore_active; nuova fetch_ckan_datastore_schema()
toolkit/scaffold/clean.py _map_datastore_type() e profile_from_datastore() per tradurre fields DataStore in profile
toolkit/cli/cmd_scout.py _scaffold_ckan() tenta DataStore prima del download CSV
toolkit/scout/__init__.py Esporta fetch_ckan_datastore_schema

Test

  • test_scout_datastore.py — 11 test contrattuali (discover con datastore_active, fetch_ckan_datastore_schema con mock)
  • test_scaffold_clean.py — 24 test pure_unit (_map_datastore_type parametrizzato 20 casi, profile_from_datastore, integrazione con generate_clean_sql)
  • Smoke test reali: OpenGA (7 colonne, DATA_UDIENZA->DATE), MUR (9 colonne)

Verifica

pytest tests/test_scout_datastore.py tests/test_scaffold_clean.py -v
# 35 passed
# Smoke test reale (richiede rete):
toolkit scout "https://openga.giustizia-amministrativa.it/dataset/cds-calendario-udienze" --scaffold

Copertura portali

Portale DataStore Scaffold
OpenGA (436 dataset) clean.sql con colonne mappate
MUR (69 dataset) clean.sql con colonne mappate
CONSIP (16 dataset) clean.sql con colonne mappate
12 portali via dati.gov.it Invariato (scaricava CSV, resta invariato)

Closes #363

@Gabrymi93 Gabrymi93 force-pushed the feat/ckan-datastore-scaffold branch from c4ebc4e to 0cdb667 Compare June 25, 2026 19:20
@Gabrymi93 Gabrymi93 force-pushed the feat/ckan-datastore-scaffold branch from 0cdb667 to 74b1e1a Compare June 25, 2026 19:23
CKAN DataStore numeric = PostgreSQL NUMERIC(p,s) che ammette decimali.
TRY_CAST(x AS BIGINT) tronca 12.34 a 12 — perdita dati silenziosa.
TRY_CAST(x AS DOUBLE) mantiene 12.34.

Fix in _map_datastore_type e test relativi.
@Gabrymi93 Gabrymi93 merged commit b619c3a into main Jun 25, 2026
3 checks passed
@Gabrymi93 Gabrymi93 deleted the feat/ckan-datastore-scaffold branch June 25, 2026 19:35
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.

feat(scaffold): scaffolding CKAN con schema DataStore per colonne e tipi precisi

1 participant