Vai al contenuto

Perché la libreria fa così

Alcune scelte di questa libreria sorprendono chi la usa per la prima volta: un limite che rifiuta invece di troncare, un identificatore che solleva un'eccezione anziché tentare, metà dei nomi in italiano e metà in inglese.

Limitare o rifiutare

Due parametri che sembrano fare la stessa cosa fanno l'opposto. Nella ricerca, massimo limita: l'iteratore scorre i risultati e si ferma dopo quel numero. Nell'esportazione, massimo_atti rifiuta: gli atti vengono contati prima di partire e, se sono più del limite, l'esportazione non parte affatto.

La differenza sta in chi fa il lavoro. Scorrere una ricerca è lavoro di chi la chiede: fermarsi a metà risparmia qualche richiesta e non riguarda nessun altro. Un'esportazione è lavoro del servizio: dura minuti e una volta partita non si annulla, quindi un filtro che per sbaglio prende mezzo corpus impegna il servizio fino in fondo.

Contare prima costa una richiesta, e con massimo_atti=None si può saltare.

Non indovinare un identificatore

Delle trenta denominazioni del corpus, diciotto rispondono a un URN composto secondo la regola standard. Per le altre dodici quella regola non funziona e la forma corretta non è nota. Per quelle, AttoTrovato.urn solleva InvalidUrnError invece di comporre un URN plausibile.

Un identificatore inventato non fallisce in modo visibile: ottiene un 404, che è la stessa risposta che il servizio dà a un atto inesistente. Chi lo riceve conclude che l'atto non c'è, e va a cercare altrove un testo che invece esiste; per questo la libreria preferisce sollevare un'eccezione.

Lo stesso vale per gli allegati dei codici, che la libreria non deduce ma elenca uno per uno in codici, e per la vigenza chiesta a un atto raggiungibile solo dalle coordinate di Gazzetta: quel percorso le date non le conosce, e ignorare il parametro restituirebbe il testo di oggi facendolo passare per quello storico.

Italiano e inglese nello stesso nome

Il criterio di scelta è la distinzione fra dominio e tecnica, non la lingua in sé.

Il dominio giuridico è in italiano: dettaglio, vigenza, atto, comma, gazzetta, cronologia. Tradurre vigenza vorrebbe dire inventare un termine che nessun giurista riconosce, e la parola inventata sarebbe più difficile da capire dell'originale, non meno.

Lo strato tecnico è in inglese: ConnectionError, retries, timeout, wait(), download(), ExportStatus. Sono nomi con una forma canonica, che chi scrive Python riconosce da qualunque altra libreria; italianizzarli costringerebbe a impararli di nuovo.

Le due convenzioni convivono nella stessa firma: Export ha un metodo wait() e restituisce AttoStorico; dettaglio() accetta vigenza e solleva ConnectionError. Messaggi d'errore e documentazione restano in italiano.

Che cosa non viene esposto

Alcuni campi che la specifica dell'API documenta non hanno un parametro nella libreria. L'elenco, con la ragione di ciascuno, sta fra gli endpoint.

Il criterio è uno solo: un parametro viene esposto se si è visto che ha effetto. Un parametro accettato e ignorato dal servizio produce risultati sbagliati che sembrano giusti, e non c'è modo di accorgersene guardando la risposta; un parametro che non c'è si nota alla prima riga di codice.