Skip to main content

Package de gestion des fichiers Dilicom sur serveur SFTP

PyPi version Licence Python version Pandas version Paramiko version python-dotenv version onixlib version

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=False pour un traitement non-streaming, sauf si un fichier dépasse 512 MiB (forçage automatique du streaming).

Note sur le mode streaming:

  • Si streaming_option=False mais qu'au moins un fichier dépasse 512 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 .zip et .zip.rdy sont 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}

Metadata

Release files for dilicom-parser 0.2.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dilicom-parser 0.2.9
File Size Uploaded
dilicom_parser-0.2.9.tar.gz 44.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dilicom-parser 0.2.9
File Interpreter ABI Platform
dilicom_parser-0.2.9-py3-none-any.whl Python 3 none any Details

Total release size: 92.2 kB

Release files / dilicom_parser-0.2.9.tar.gz

Download URL dilicom_parser-0.2.9.tar.gz
Size 44.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ea9800eed3a77bc5007efa1005589cd14479692b8144cf44f1379d91f21c80b4
BLAKE2b-256 checksum
How to use checksums
25d66c338b0c1cbbcf638ddab594a33aa18a1a9ae876a898558d21a09ed37401
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / dilicom_parser-0.2.9-py3-none-any.whl

Download URL dilicom_parser-0.2.9-py3-none-any.whl
Size 47.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
532d5b71723ff4226ada9766c863042fbf8a6bfb468149d4999fdf64b4cd31c0
BLAKE2b-256 checksum
How to use checksums
795beaf6eac0e8a1fa6a23c44a2197c048db86480c897de8d9405044b3739871
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.2.9 This release

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page