Un atto intero¶
Finora abbiamo letto un articolo per volta. Un atto intero, con tutte le sue versioni, si ottiene dall'esportazione, che impiega circa un minuto.
Perché non basta dettaglio¶
Il percorso che abbiamo usato finora restituisce un articolo alla volta, e degli articoli molto lunghi restituisce solo i primi cento commi. L'esportazione restituisce l'atto completo, con tutti gli articoli e tutte le versioni, e non si ferma ai cento commi.
In cambio non è immediata: si avvia, si attende, si scarica.
Avviamo e attendiamo¶
esportazione = normattiva.start_export(anno=1990, numero=241)
print(esportazione.token)
esportazione.wait()
corpus = esportazione.download()
atto = corpus.atti[0]
print(
f"{atto.estremi.citazione}: {len(atto.versioni)} versioni, "
f"{len(atto.aggiornamenti)} aggiornamenti"
)
Il token identifica il lavoro presso il servizio, e sarà diverso ogni volta.
Serve se il programma che aspetta finisce prima dell'esportazione: con
normattiva.export_from_token(token) ci si riaggancia più tardi, senza
ricominciare.
wait() aspetta che il servizio abbia finito; download() scarica l'archivio e
lo legge in modelli. Sessantuno versioni, per una legge del 1990: ogni modifica
in trentasei anni ne ha aperta una nuova.
Leggiamo l'atto a una data¶
alla_data sceglie la versione in vigore quel giorno, e da lì si scorrono gli
articoli:
vigente_nel_2005 = atto.alla_data(date(2005, 1, 1))
articoli = list(vigente_nel_2005.articoli())
print(f"in vigore dal {vigente_nel_2005.vigente_dal}, {len(articoli)} articoli")
print(next(a.testo for a in articoli if a.numero == "19")[:80])
in vigore dal 2004-04-29, 34 articoli
Art. 19.
((1. In tutti i casi in cui l'esercizio di un'attivita' privata
È la stessa domanda della seconda lezione, ma adesso la risposta arriva da un archivio già in memoria: nessuna richiesta in più, e tutti gli articoli insieme invece di uno per volta.
Gli accenti qui sono vocale più apostrofo, attivita': nell'esportazione
arrivano così. Per confrontare o cercare nel testo c'è normalize_accents, che
riscrive attivita' come attività.
Salviamo e rileggiamo¶
from normattiva import Corpus
di_nuovo = Corpus.from_zip("241.zip")
print(len(di_nuovo.atti[0].versioni))
Da qui in avanti l'atto si rilegge da disco quante volte serve, senza chiedere di nuovo al servizio la stessa cosa.
Da qui¶
- le guide di come fare, una per obiettivo: identificare un atto, cercarlo, leggerlo a una data, esportarlo intero, lavorare in asincrono, usarlo dal terminale;
- capire, per com'è fatto il servizio e perché la libreria si comporta così;
- il taccuino Jupyter, che percorre la libreria su dati reali con gli output già dentro.