mercredi, 1 avril, 2026
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éthode | Description |
|---|---|
| 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.samples | Liste des échantillons (dicts). |
| report.methods | Dictionnaire des méthodes analytiques. |
| report.created_by | Métadonnées de création (logiciel, opérateur, organisation). |
Exceptions
| Exception | Cause |
|---|---|
| ISOfParseError | JSON invalide ou structure ISOF non reconnue. |
| ISOfVersionError | Version du format non supportée par cette version du package. |
| ISOfSignatureError | Erreur 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.