Skip to main content

Bibliothèque souveraine pour parser ou créer les fichiers ONIX pour les métiers du livre.

Project description

Onixlib

Logo onixlib

Bibliothèque Python souveraine pour lire, parser et produire des fichiers ONIX

pypi 0.1.1 Licence MIT Python ≥ 3.11 Version ONIX 3.0

onixlib est une bibliothèque Python souveraine pour lire, parser et produire des fichiers ONIX — le standard d'échange de métadonnées du monde du livre.

Elle fournit des façades ergonomiques sur les structures ONIX 3.0, un parser streaming adapté aux grands fichiers de distribution, et un système de registre de versions extensible.


Sommaire


Installation

pip install onixlib

Prérequis : Python ≥ 3.11.


Démarrage rapide

Lire un fichier ONIX (streaming)

parse() est un générateur qui désérialise chaque <Product> indépendamment, sans jamais charger l'ensemble du fichier en mémoire — recommandé pour les flux de distribution volumineux.

from onixlib import parse

for product in parse("notice.xml"):
    print(product.isbn, product.title)

    # Contributeurs
    if product.author:
        print("Auteur :", product.author.full_name)
    for c in product.contributors:
        print(f"  {c.role.value}{c.full_name}")

    # Description et couverture
    if product.collateral:
        print("Description :", product.collateral.description)
        print("Couverture   :", product.collateral.cover_url)

    # Date de publication et éditeur
    if product.publishing:
        print("Date  :", product.publishing.publication_date)
        print("Marque:", product.publishing.imprint_name)

    # Prix
    for ps in product.product_supply:
        for price in ps.prices:
            print(f"  {price.amount} {price.currency} (type {price.price_type})")

La version ONIX est auto-détectée à partir de l'attribut release de la racine XML. Pour forcer une version :

for product in parse("notice.xml", version="3.0"):
    ...

Lire un fichier ONIX (chargement complet)

from onixlib import Notice

notice = Notice.parse_full("notice.xml")

print(notice.header.sender_name)
print(notice.header.sent_datetime)

for product in notice.products:
    print(product.isbn, product.title)

Construire et sérialiser une notice ONIX

from onixlib import Notice, Product, ContributorRole

# Produit
product = Product.new(isbn="9782070360024", title="Du côté de chez Swann")

author = product.add_contributor(role=ContributorRole.A01)
author.first_name = "Marcel"
author.last_name  = "PROUST"

# Notice complète
notice = Notice.new(sender_name="MON_EDITEUR", sent_datetime="20260428T000000Z")
notice.add_product(product)

xml = notice.to_xml()
print(xml)

Référence des façades

Toutes les classes suivantes s'importent directement depuis onixlib :

from onixlib import (
    parse, Notice, Product,
    Header, DescriptiveDetail, CollateralDetail,
    PublishingDetail, ProductSupply, SupplyDetail, Price,
    RelatedMaterial, RelatedProduct, RelatedWork,
    Contributor, ContributorRole,
)

parse(source, version=None) — générateur

Paramètre Type Description
source str | Path | BinaryIO Chemin ou flux binaire du fichier XML
version str | None Forcer une version (ex. "3.0"). Auto-détecté si None.

Retourne un générateur de Product.


Product

Façade centrale sur un bloc <Product> ONIX.

Attribut / méthode Type Description
isbn str | None ISBN-13 ou GTIN-13
title str Titre principal (raccourci vers descriptive)
author Contributor | None Premier contributeur de rôle A01
editor Product.Editor | None Détails de l'éditeur (raccourci vers publishing)
price Product.Price | None Premier prix du produit (raccourci vers product_supply)
contributors list[Contributor] Tous les contributeurs
add_contributor(role) Contributor Ajoute un contributeur
descriptive DescriptiveDetail | None Bloc descriptif
collateral CollateralDetail | None Bloc collatéral
publishing PublishingDetail | None Bloc publication
product_supply list[ProductSupply] Blocs disponibilité/prix
related_material RelatedMaterial | None Liens vers œuvres/produits liés
to_xml() str Sérialisation XML ONIX
Product.new(isbn, title, …) Product Constructeur de commodité

Notice

Façade sur la notice ONIX complète (<ONIXMessage>).

Attribut / méthode Type Description
header Header En-tête de la notice
products list[Product] Tous les produits
add_product(product) None Ajoute un produit
to_xml() str Sérialisation XML
Notice.parse_full(source, version) Notice Chargement complet en mémoire
Notice.new(sender_name, sent_datetime, release) Notice Création d'une notice vide

Header

Propriété Type Description
sender_name str Nom de l'expéditeur
sender_gln str | None GLN de l'expéditeur
sender_email str | None E-mail de l'expéditeur
addressee_name str | None Nom du destinataire
addressee_gln str | None GLN du destinataire
message_number str | None Numéro de message
sent_datetime str | None Horodatage d'envoi
Header.new(sender_name, sent_datetime) Header Constructeur minimal

DescriptiveDetail

Propriété Type Description
title / setter str Titre principal
subtitle str | None Sous-titre
product_form str Code List 150 (ex. "BC" = broché)
product_composition str Code List 2 (ex. "00" = exemplaire unique)
contributors list[Contributor] Tous les contributeurs
author Contributor | None Premier auteur (A01)
languages list[tuple[str, str]] (rôle, code_langue)
extents list[tuple[str, str, str]] (type, valeur, unité)
subjects list[tuple[str, str]] (code_schème, code_sujet)

CollateralDetail

Propriété Type Description
description str | None Description produit (TextType 03)
text_contents list[tuple[str, str]] (type_code, texte)
cover_url str | None URL de la couverture (ResourceContentType 01)
supporting_resources list[tuple[str, list[str]]] (type_code, [urls])

PublishingDetail

Propriété Type Description
imprint_name / setter str | None Marque éditoriale
publisher_name str | None Nom de l'éditeur
publishing_status str | None Statut de publication (List 64)
publication_date str | None Date de publication nominale (DateRole 01)
publishing_dates list[tuple[str, str]] (rôle, date)

ProductSupply / SupplyDetail / Price

for ps in product.product_supply:
    for sd in ps.supply_details:
        print(sd.supplier_name, sd.availability)
        for price in sd.prices:
            print(price.amount, price.currency, price.price_type)
Classe Propriétés clés
ProductSupply supply_details, availability, supplier_name, prices (aplatis)
SupplyDetail supplier_name, availability, prices
Price amount: Decimal, currency, price_type

Contributor

Propriété Type Description
first_name / setter str Prénom(s)
last_name / setter str Nom de famille
full_name str "Prénom NOM"
role ContributorRole | None Code List 17 (ex. A01 = auteur)

ContributorRole est l'enum List17 ONIX : ContributorRole.A01, ContributorRole.B06, etc.


Gestion des versions ONIX

onixlib intègre un registre de versions extensible. La version 3.0 est enregistrée par défaut.

from onixlib import available_releases

print(available_releases())  # ['3.0']

Le parser auto-détecte la version depuis l'attribut release de la racine XML.


Ajouter une nouvelle version ONIX

Lorsque EDItEUR publie une nouvelle version des XSD (ex. ONIX 3.1), voici le processus complet pour l'intégrer.

1 — Déclarer la source XSD

Dans xsd_sources.toml, ajouter une entrée :

[versions."3.1"]
source      = "https://www.editeur.org/files/ONIX%203/ONIX_3-1_reference_XSD.zip"
description = "ONIX 3.1 — prochaine version de référence (EDItEUR)"

2 — Générer les classes Python

make generate VERSION=3.1
# ou, pour forcer le re-téléchargement des XSD :
make generate-force VERSION=3.1

Cela produit src/onixlib/models/generated/v3_1.py via xsdata.

3 — Enregistrer la nouvelle version

Dans src/onixlib/models/versions.py, ajouter en bas du fichier :

from .generated import v3_1 as _v3_1

register(VersionInfo(
    release="3.1",
    namespace="http://www.editeur.org/onix/3.1/reference",
    module=_v3_1,
    message_class=_v3_1.Onixmessage,
    product_class=_v3_1.Product,
))

4 — Utiliser la nouvelle version

# Auto-détection depuis release="3.1" dans le XML
for product in parse("notice_3_1.xml"):
    ...

# Ou explicitement :
notice = Notice.parse_full("notice_3_1.xml", version="3.1")

Les versions antérieures ("3.0") restent disponibles sans modification.


Développement

Pré-requis

python -m venv venv
source venv/bin/activate
make install-dev

Cibles Makefile

Commande Description
make generate-all Génère les modèles pour toutes les versions de xsd_sources.toml
make generate VERSION=3.0 Génère les modèles pour une version spécifique
make generate-from SOURCE=url VERSION=3.1 Génère depuis une URL externe
make generate-force VERSION=3.0 Re-télécharge les XSD et régénère
make verify-xsd Vérifie l'intégrité des XSD (checksums .meta.toml)
make list-versions Liste les versions enregistrées et leur statut
make docs Génère la documentation Sphinx (HTML) dans docs/build/html/
make docs-copy Copie documentations/sphinxdoc/ vers docs/
make docs-serve Lance un serveur local sur la doc générée (port 8080)
make clean-generated Supprime les modèles générés (demande confirmation)

Rémi Verschuur · Audit IO · 2026

Project details


Download files

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

Source Distribution

onixlib-0.1.2.tar.gz (249.1 kB view details)

Uploaded Source

Built Distribution

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

onixlib-0.1.2-py3-none-any.whl (259.1 kB view details)

Uploaded Python 3

File details

Details for the file onixlib-0.1.2.tar.gz.

File metadata

  • Download URL: onixlib-0.1.2.tar.gz
  • Upload date:
  • Size: 249.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for onixlib-0.1.2.tar.gz
Algorithm Hash digest
SHA256 aebcc138d458d11ce550eb2a64785b9f4dc14822674b7f823c0e197e37d493ae
MD5 1356628ca2cb8e337a1b7415d14eda88
BLAKE2b-256 751985f4372acc5d50d06031c9ada62ad5725cb2bf6628d69ee82e359d95d53b

See more details on using hashes here.

File details

Details for the file onixlib-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: onixlib-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 259.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for onixlib-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c830c0b0efaee31b21fc898228a8d93b3f0d1612f32aade4808e8e1f91cc7eb0
MD5 07102fb3719985b85570eb2ef8ead1f7
BLAKE2b-256 f34138f28e15c4bbc96ee99897c80033dddc03e2a4fb18d4e4fd8f4793dddd5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page