Bibliothèque souveraine pour parser les fichiers Dilicom déposés sur le serveur SFTP de Dilicom avec connecteur SFTP intégré.
Project description
Package de gestion des fichiers Dilicom sur serveur SFTP
dilicom-parser est une bibliothèque Python souveraine dédiée à la lecture, au parsing, à la validation et à la transformation des fichiers Dilicom (distributeurs, commandes, etc.). Elle fournit des modèles de données stricts, des parseurs robustes et des outils d’audit pour garantir une intégration fiable et reproductible.
🚀 Objectifs
- Offrir une implémentation Python propre et moderne des structures Dilicom.
- Fournir des dataclasses typées pour chaque bloc Dilicom.
- Faciliter l’intégration dans des pipelines d’audit, d’ETL ou de synchronisation.
- Proposer une base souveraine et open-source pour les acteurs du livre.
✨ Fonctionnalités
- 📦 Modèles de données Dilicom (Bloc 1, Bloc 2, Bloc 3…)
- 🧩 Parseur robuste basé sur l’ordre contractuel des champs
- 🔍 Validation des types et des valeurs
- 📊 Conversion DataFrame → objets Python
- 📚 Gestion des fichiers livres archivés (
.zip,.zip.rdy,.zip.rdy.csv, etc.) - 🚰 Basculement automatique en streaming au-delà de
512 MiB - 🧪 Tests unitaires inclus
- 🧠 Stubs de typage complets (
.pyi) pour l'auto-complétion IDE et les outils de type-checking
📄 Exemple d’utilisation
Créer le fichier .env avec les variables d’environnement nécessaires :
#.env
# Variables pour les dossier d’entrée et de sortie des fichiers
DILICOM_IN_DIR=/path/to/dilicom/files
DILICOM_OUT_DIR=/path/to/output
# Optionnel, variables pour la connexion FTP si nécessaire
DILICOM_HOST=ftp.example.com
DILICOM_PORT=11234
DILICOM_USER=username
DILICOM_SECRET=password
🧪 Cas d'usage
1. Parser des fichiers locaux (distributor / eancom / gencod)
from pathlib import Path
from dilicom_parser.classifier import FilesClassifier
files_directory = Path("/path/to/dilicom/files")
file_list = list(files_directory.glob("*"))
classifier = FilesClassifier(file_list=file_list, streaming_option=True)
classifier.classify()
counts = classifier.count_by_type()
print(counts) # ex: {'distributor': 9, 'eancom': 5, 'gencod': 4}
parsed = classifier.parse()
distributor_results = parsed.get("distributor", [])
if distributor_results:
first_file = distributor_results[0]
first_line = first_file.lines[0]
print(first_line.bloc1.rs1)
print(first_line.bloc1.ville)
2. Récupérer les fichiers via SFTP puis parser
from pathlib import Path
from dilicom_parser.transport import Connector
from dilicom_parser.classifier import FilesClassifier
local_dir = Path("/tmp/dilicom")
local_dir.mkdir(parents=True, exist_ok=True)
with Connector(env_path="/path/to/.env") as connector:
downloaded_files = connector.download_all(local_dir=local_dir, archive=False)
classifier = FilesClassifier(file_list=downloaded_files, streaming_option=True)
results = classifier.classify().parse()
print(results.keys())
3. Dans un notebook Jupyter
from dilicom_parser.classifier import FilesClassifier
from pathlib import Path
import ipynbname
path = ipynbname.path()
files_directory = Path(path).parent / "dilicom"
file_list = list(files_directory.glob(pattern="*"))
classifier = FilesClassifier(file_list=file_list, streaming_option=True)
classifier.classify()
print("Classification terminée. Résultats :")
from pprint import pprint
pprint(classifier.count_by_type())
parsed = classifier.parse()
pprint(parsed.keys())
Paramètre utile:
streaming_option=True(défaut) pour un traitement orienté streaming.streaming_option=Falsepour un traitement non-streaming, sauf si un fichier dépasse512 MiB(forçage automatique du streaming).
Note sur le mode streaming:
- Si
streaming_option=Falsemais qu'au moins un fichier dépasse512 MiB, le mode streaming est activé automatiquement. - Ce basculement est journalisé (
WARNING) et déclenche aussi un avertissement Python (UserWarning).
Note sur les archives:
- À l'initialisation, les fichiers
.zipet.zip.rdysont extraits automatiquement dans un dossier dédié. - Les fichiers extraits sont ajoutés à la liste des fichiers à traiter.
- L'archive source est supprimée après extraction réussie.
🧾 Stubs de typage
La bibliothèque embarque des stubs .pyi complets sous src/dilicom_parser/ pour tous les modules.
Objectif:
- Améliorer l'aide contextuelle des IDEs (signatures, retours, types).
- Faciliter l'analyse statique (mypy, pyright, pylance).
Régénération des stubs:
PYTHONPATH=src ./venv/bin/stubgen -p dilicom_parser -o /tmp/dilicom_stubs
cp -R /tmp/dilicom_stubs/dilicom_parser/* src/dilicom_parser/
touch src/dilicom_parser/py.typed
Classification terminée. Résultats :
{'distributor': 9, 'eancom': 5, 'gencod': 4}
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 dilicom_parser-0.2.9.tar.gz.
File metadata
- Download URL: dilicom_parser-0.2.9.tar.gz
- Upload date:
- Size: 44.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea9800eed3a77bc5007efa1005589cd14479692b8144cf44f1379d91f21c80b4
|
|
| MD5 |
c509b025bb55e13ba19abfd1f613916a
|
|
| BLAKE2b-256 |
25d66c338b0c1cbbcf638ddab594a33aa18a1a9ae876a898558d21a09ed37401
|
File details
Details for the file dilicom_parser-0.2.9-py3-none-any.whl.
File metadata
- Download URL: dilicom_parser-0.2.9-py3-none-any.whl
- Upload date:
- Size: 47.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
532d5b71723ff4226ada9766c863042fbf8a6bfb468149d4999fdf64b4cd31c0
|
|
| MD5 |
75e0fe2c9bdd47a025f6f0a34602cc82
|
|
| BLAKE2b-256 |
795beaf6eac0e8a1fa6a23c44a2197c048db86480c897de8d9405044b3739871
|