Skip to main content

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

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}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dilicom_parser-0.2.9.tar.gz (44.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dilicom_parser-0.2.9-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

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

Hashes for dilicom_parser-0.2.9.tar.gz
Algorithm Hash digest
SHA256 ea9800eed3a77bc5007efa1005589cd14479692b8144cf44f1379d91f21c80b4
MD5 c509b025bb55e13ba19abfd1f613916a
BLAKE2b-256 25d66c338b0c1cbbcf638ddab594a33aa18a1a9ae876a898558d21a09ed37401

See more details on using hashes here.

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

Hashes for dilicom_parser-0.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 532d5b71723ff4226ada9766c863042fbf8a6bfb468149d4999fdf64b4cd31c0
MD5 75e0fe2c9bdd47a025f6f0a34602cc82
BLAKE2b-256 795beaf6eac0e8a1fa6a23c44a2197c048db86480c897de8d9405044b3739871

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page