Bibliothèque souveraine pour utiliser l'API de facturation Henrri.
Project description
henrri-connect
Bibliothèque Python souveraine pour l'API de facturation Henrri. Fournit un client synchrone et asynchrone pour interagir avec l'ensemble des ressources de l'API : clients, factures, articles, unités, revenus, etc.
Ce SDK est un client Python non officiel pour l’API Henrri. Il n’est ni affilié, ni soutenu, ni approuvé par Henrri. Henrri est une marque déposée appartenant à son éditeur.
Sommaire
Installation
pip install henrri-connect
Dépendances : httpx et pydantic v2.
Démarrage rapide
Authentification
Le client se connecte automatiquement à la première requête et gère le renouvellement du token. Il n'est pas nécessaire d'appeler authenticate() explicitement.
from henrri_connect import HenrriClient
client = HenrriClient("votre_client_id", "votre_client_secret")
L'URL par défaut est l'environnement sandbox (https://api-sandbox.henrri.io). Pour pointer vers la production, passez base_url :
client = HenrriClient(
"votre_client_id",
"votre_client_secret",
base_url="https://api.henrri.io",
)
Mode synchrone
from henrri_connect import HenrriClient
client = HenrriClient("client_id", "client_secret")
# Vérifier la connexion
print(client.secures.hello_world())
# Lister les clients (page 1, 20 résultats)
result = client.customers.list_customers(page=1, limit=20)
for customer in result.data:
print(customer.name)
# Créer un document
from henrri_connect.models import Document
doc = client.documents.add(Document(customer_id=42, document_type_id=1))
print(doc.id)
Mode asynchrone
import asyncio
from henrri_connect import HenrriClient
async def main():
client = HenrriClient("client_id", "client_secret", async_mode=True)
# Lister les articles
result = await client.items.list_items(limit=10)
for item in result.data:
print(item.name)
asyncio.run(main())
Modules disponibles
Le client expose un sous-client par ressource API. Chaque sous-client est identique en synchrone et asynchrone (les méthodes async renvoient des coroutines).
| Attribut | Description | Documentation |
|---|---|---|
client.secures |
Endpoint de santé de l'API | docs/secures.md |
client.users |
Utilisateurs et entreprises associées | docs/users.md |
client.companies |
Entreprises | docs/companies.md |
client.customers |
Clients (CRUD + contacts) | docs/customers.md |
client.documents |
Documents (factures, devis, BL…) | docs/documents.md |
client.document_lines |
Lignes de document | docs/document_lines.md |
client.document_types |
Types de document (référentiel) | docs/document_types.md |
client.document_line_types |
Types de ligne de document (référentiel) | docs/document_line_types.md |
client.items |
Articles / produits | docs/items.md |
client.item_categories |
Catégories d'articles | docs/item_categories.md |
client.units |
Unités de mesure | docs/units.md |
client.revenues |
Statistiques de revenus | docs/revenues.md |
Référence API complète : remiv1.github.io/henrri-connect
Gestion des erreurs
Toutes les erreurs HTTP sont converties en exceptions typées héritant de HenrriError :
| Exception | Code HTTP |
|---|---|
HenrriAuthError |
401 — Non authentifié |
HenrriForbiddenError |
403 — Accès interdit |
HenrriNotFoundError |
404 — Ressource introuvable |
HenrriValidationError |
400 / 422 — Données invalides |
HenrriServerError |
5xx — Erreur serveur |
from henrri_connect import HenrriClient
from henrri_connect.exc import HenrriNotFoundError, HenrriAuthError
client = HenrriClient("client_id", "client_secret")
try:
customer = client.customers.get(9999)
except HenrriNotFoundError:
print("Client introuvable.")
except HenrriAuthError:
print("Identifiants invalides.")
Développement
# Cloner le dépôt
git clone https://github.com/remiv1/henrri-connect.git
cd henrri-connect
# Créer un environnement virtuel et installer les dépendances dev
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
# Lancer les tests
make test
# Générer la documentation
make docs
# Prévisualiser la documentation
make docs-serve
Commandes disponibles :
make test # Lancer les 96 tests
make build # Construire la distribution (wheel + sdist)
make build-verify # Vérifier les artefacts avec twine
make publish # Publier sur PyPI (demande confirmation)
make docs # Générer la doc HTML dans docs/
make docs-serve # Servir la doc localement (port 8080)
make docs-clean # Nettoyer les fichiers générés
make all # test + build + build-verify + publish + clean
Contribution
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les conventions de code, le workflow de PR et les bonnes pratiques.
Licence
Distribué sous licence MIT. Voir LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file henrri_connect-0.1.2.tar.gz.
File metadata
- Download URL: henrri_connect-0.1.2.tar.gz
- Upload date:
- Size: 34.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
526053e0c140785ef264f17de616e87e8669624546bd8aa93861389bb6ab1977
|
|
| MD5 |
a8eb4e7d8c99fcd0cf0c3a3a00068d5a
|
|
| BLAKE2b-256 |
75d83447365fc76b5df01450c07511dbb957838f53b837f51f952a03c097a778
|
File details
Details for the file henrri_connect-0.1.2-py3-none-any.whl.
File metadata
- Download URL: henrri_connect-0.1.2-py3-none-any.whl
- Upload date:
- Size: 57.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3167aab2a1b9fa6fdbe2ff3d6d62ddf5891cbf83a0c57d5de6f67c74e019ca9
|
|
| MD5 |
c0739b7d6ccb1b43a923c9eee8f472e0
|
|
| BLAKE2b-256 |
3d1feae8a665982d787552e11053e158e70256085cd4fc9ca58a41a5857cba70
|