Intégration du code open-source

Le format ISOF est ouvert et documenté. Cette page présente le package Python officiel, les règles d'implémentation pour un lecteur tiers, et les ressources disponibles.

Le format ISOF est un standard ouvert. IsoFind SAS publie les outils nécessaires à son intégration dans des logiciels tiers, sans nécessiter de licence IsoFind ni d'accord commercial.

Le package Python isof

Le package isof est publié sur PyPI sous licence MIT. Il permet de lire, vérifier et exporter des fichiers .isof depuis n'importe quel environnement Python.

pip install isof # Avec support pandas pour l'export DataFrame pip install isof[pandas]

Source : github.com/ColinFerrari/isof : licence MIT, contributions bienvenues.

Fonctions principales

Fonction / méthodeDescription
isof.load(path)Charge un fichier .isof depuis le disque.
isof.loads(json_str)Charge depuis une chaîne JSON (API, base de données).
report.verify()Retourne un objet VerificationResult avec valid, level, signer, signed_at, reason.
report.is_authentic()Retourne True si la signature est valide (niveau 1 ou 2).
report.to_pandas()Retourne un DataFrame tidy (une ligne par mesure isotopique).
report.to_csv(path)Exporte les données en CSV.
report.samplesListe des échantillons (dicts).
report.methodsDictionnaire des méthodes analytiques.
report.created_byMétadonnées de création (logiciel, opérateur, organisation).

Exceptions

ExceptionCause
ISOfParseErrorJSON invalide ou structure ISOF non reconnue.
ISOfVersionErrorVersion du format non supportée par cette version du package.
ISOfSignatureErrorErreur lors de la vérification de signature (distinct d'une signature invalide).

Implémenter un lecteur ISOF

N'importe quel logiciel peut implémenter un lecteur ISOF sans dépendance au package Python. Le format est du JSON standard avec les règles suivantes :

Les champs isof_version, created_at et samples sont les seuls obligatoires. Tous les autres champs sont optionnels. Les champs inconnus doivent être ignorés (extensibilité future). L'encodage est UTF-8 obligatoire. Les nombres flottants suivent la représentation JSON standard (pas de virgule décimale locale, pas de guillemets).

Vérification niveau 1 en 4 lignes Python

import json, hashlib doc = json.loads(raw_text) sig = doc["signature"] scope = sig["scope"] payload = {k: doc[k] for k in scope if k in doc} digest = hashlib.sha256( json.dumps(payload, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8") ).hexdigest() valid = digest == sig["hash"]
La sérialisation canonique doit utiliser sort_keys=True et separators=(",", ":") (sans espaces). Un espace de trop ou un ordre de clés différent produit un hash différent et invalide la signature.

Spécification technique

La spécification complète du format ISOF v1.0 est disponible sur isofind.tech/isof-spec. Elle couvre la structure JSON, les types de données, le format des blocs samples, methods, purification et signature, les règles de canonicalisation, et la feuille de route des versions futures.

Pour signaler un problème de compatibilité entre votre implémentation et IsoFind, ou proposer une extension au format, ouvrir une issue sur github.com/ColinFerrari/isof ou contacter colin.ferrari@isofind.tech.