Skip to main content

normattiva-sdk

normattiva-sdk

PyPI Python Scaricamenti CI Contratto Licenza del codice: MIT Licenza dei dati: CC BY 4.0 Tipizzato: PEP 561 Ruff uv standard-readme compliant

SDK non ufficiale per Normattiva, il portale della legge vigente dello Stato italiano

Unofficial Python client for Normattiva, the Italian legislation database. Documentation is in Italian, as is the domain.

Normattiva conserva di ogni atto tutte le versioni che si sono succedute: ogni modifica ne apre una nuova senza cancellare la precedente. Si chiama multivigenza. La legge 241 del 1990 ha sessantuno versioni, e per leggerne una si indica una data.

Lo stesso corpus è pubblicato come open data su dati.normattiva.it, con un'API HTTP gratuita. Questa libreria la interroga da Python, in versione sincrona e asincrona, e traduce le risposte in oggetti tipizzati.

Progetto indipendente e non ufficiale. Non è affiliato con l'Istituto Poligrafico e Zecca dello Stato, con Normattiva né con la Presidenza del Consiglio dei Ministri, e non è approvato da loro. Il testo restituito non è autentico: l'unico ufficiale è quello pubblicato sulla Gazzetta Ufficiale a mezzo stampa, che prevale in caso di discordanza.

Indice

Installazione

pip install normattiva-sdk

Si installa come normattiva-sdk e si importa come normattiva. L'installazione porta anche il comando normattiva.

Dipendenze

Python da 3.10 a 3.14, e httpx come unica dipendenza a runtime. Il pacchetto dichiara i propri tipi secondo il PEP 561.

Uso

from datetime import date

from normattiva import Normattiva, Urn, codici

with Normattiva() as normattiva:
    art2043 = normattiva.dettaglio(codici.CODICE_CIVILE.articolo("2043"))
    print(art2043.testo)

    divorzio = normattiva.dettaglio(Urn.legge(1970, 898, articolo="5"), vigenza=date(2005, 1, 1))
    print(divorzio.finestra)  # 1987-03-12 → 2023-02-27

Ogni DettaglioAtto porta il testo e i dati per citarlo e verificarlo:

atto.testo  # il testo piano, senza le note redazionali
atto.commi  # (Comma(numero="1", testo="..."), ...)
atto.note_aggiornamento  # le note di aggiornamento, separate dal testo
atto.finestra  # la finestra di vigenza in cui quel testo è valido
atto.permalink  # il link pubblico, per verificare sulla fonte
atto.attribuzione  # la citazione che la licenza dei dati richiede

Riga di comando

normattiva testo codice-civile --articolo 2043
normattiva cerca procedimento amministrativo --anno 1990 --faccette
normattiva cronologia urn:nir:stato:legge:1990-08-07\;241 --articolo 19
normattiva esporta --denominazione LEGGE --anno 1990 --numero 241 --archivio 241.zip

Con --json l'output è un documento pronto per jq, e il codice di uscita distingue le famiglie di errore: 3 l'atto non esiste, 4 la richiesta era sbagliata, 5 il servizio è in avaria.

Documentazione

https://ireneburresi.github.io/normattiva-sdk/

Il tutorial porta dall'installazione al testo di un articolo; le guide di come fare sono una per obiettivo; capire spiega com'è fatto il servizio e come si comporta la libreria quando il servizio risponde male; il riferimento elenca classi, metodi ed eccezioni.

API

Normattiva e AsyncNormattiva coprono l'intera API open data e si rispecchiano metodo per metodo; nella versione asincrona gli iteratori diventano iteratori asincroni.

dettaglio(), cronologia() il testo di un atto a una data, e tutte le sue versioni
ricerca(), ricerca_completa() una pagina di risultati, o un iteratore pigro su tutte
start_export(), export_from_token() avviare un'esportazione, o riprenderne una dal suo token
wait(), download() attendere che finisca e leggerne il risultato
Corpus.from_zip(), save() rileggere e salvare un archivio senza rete
Urn.legge(), Urn.decreto_legislativo() comporre gli identificatori NIR
codici gli atti notissimi, con l'allegato attraverso cui rispondono
NormattivaError e discendenti un'eccezione per ciascun caso da gestire

Gli errori che indicano una richiesta sbagliata sono tutti ValueError oltre che NormattivaError, così si prendono insieme senza sapere quale strato li ha sollevati.

Un taccuino Jupyter percorre la libreria su dati reali, con gli output salvati.

Manutentori

Irene Burresi.

Contribuire

Le domande e le segnalazioni vanno negli issue. Le pull request sono benvenute; per un cambiamento sostanziale conviene aprire prima un issue.

uv sync --all-groups
uv run pytest              # la suite offline, su risposte reali registrate
uv run pytest -m rete      # le prove di contratto, contro il servizio reale
uv run ruff check && uv run ruff format --check
uv run ty check src

Le prove di contratto interrogano la produzione e restano fuori dall'esecuzione predefinita: come funziona il monitoraggio è spiegato in tests/contratto/. Le prove nuove partono da una risposta reale registrata: quelle già raccolte stanno in tests/fixtures/ e in tests/contratto/dataset/.

Licenza

Il codice è rilasciato con licenza MIT, Copyright (c) 2026 Irene Burresi. Il testo completo sta in LICENSE.

I dati sono di IPZS, in licenza CC BY 4.0 dal 1° gennaio 2026. L'uso commerciale e la ridistribuzione sono consentiti, e l'unico obbligo è l'attribuzione, che l'avviso legale del portale vuole in tre parti: la fonte, il carattere non autentico del testo e la sua gratuità. Ogni modello la espone già completa:

Fonte: Normattiva (https://www.normattiva.it), Istituto Poligrafico e Zecca
dello Stato, in licenza CC BY 4.0. Testo non autentico e gratuito: l'unico
testo ufficiale è quello pubblicato sulla Gazzetta Ufficiale a mezzo stampa.

Chi ridistribuisce i dati include quella riga.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

normattiva_sdk-0.1.0.tar.gz (363.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

normattiva_sdk-0.1.0-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file normattiva_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: normattiva_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 363.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for normattiva_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4405f8c7bf324ba6e86b4aba1f94f2e91d3309c1693bf1657d142d51a1ab15d9
MD5 7692dd640f11ff35f8b9bd36bb138aa3
BLAKE2b-256 38247f2630ed7fe93d437cf2f9b42a7f0824866e98e72e5d3bfa26df6694eed1

See more details on using hashes here.

Provenance

The following attestation bundles were made for normattiva_sdk-0.1.0.tar.gz:

Publisher: release.yml on IreneBurresi/normattiva-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file normattiva_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: normattiva_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 65.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for normattiva_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c4de30d36054b1d76c7f86b22e5bc4a6f549d1ee0036c708a2ebb1d09950f55a
MD5 f5f701e10c4bf5cf2a55856b7dc9c8e1
BLAKE2b-256 ca429a30467404ab0303146fb74b6abbec47850c3d965bfbe13189b84ff23a51

See more details on using hashes here.

Provenance

The following attestation bundles were made for normattiva_sdk-0.1.0-py3-none-any.whl:

Publisher: release.yml on IreneBurresi/normattiva-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page