Picarones / picarones /domain /errors.py
Claude
docs(sprint-H.8): cleanup obsolete legacy/shim language in production docstrings
e407ec0 unverified
Raw
History Blame
2.65 kB
"""Exceptions du domaine — Sprint A14-S4.
Hiérarchie centrée sur ``PicaronesError`` pour qu'un caller puisse
attraper "toute erreur métier Picarones" avec un seul ``except``.
Règle d'or : ne JAMAIS attraper ``PicaronesError`` dans le code
métier sans le re-lever — c'est le rôle de la couche transport
(``app/services/`` puis ``interfaces/``) de mapper ces erreurs
vers HTTP 4xx / sortie CLI explicite.
Volontairement plat (pas de hiérarchie profonde) : on ajoute des
sous-classes au cas par cas quand un caller a besoin de discriminer.
"""
from __future__ import annotations
class PicaronesError(Exception):
"""Racine de la hiérarchie d'erreurs métier de Picarones.
Tout sous-package du nouveau code (``domain/``, ``evaluation/``,
``pipeline/``, ``formats/``, ``adapters/``, ``app/``) doit lever
une sous-classe de ``PicaronesError`` plutôt qu'un ``Exception``
générique ou un ``ValueError`` quand l'erreur a un sens métier.
L'ancien code (``picarones.core``, ``picarones.evaluation.metrics``,
etc.) garde son comportement actuel jusqu'à sa migration.
"""
class ArtifactValidationError(PicaronesError):
"""Un artefact ne respecte pas les invariants de son type.
Exemples : un ``Artifact`` typé ``ALTO_XML`` dont le ``content_hash``
est absent ; un ``Artifact`` dont le ``produced_by_step`` référence
une étape qui n'existe pas dans la pipeline.
"""
class ProjectionError(PicaronesError):
"""Un projecteur ne peut pas convertir l'artefact source.
Levée typiquement par les projecteurs ALTO→texte / PAGE→texte
quand le XML d'entrée n'est pas parsable, n'a pas de TextLine,
ou que l'ordre de lecture est ambigu.
Le caller (``EvaluationViewExecutor``) doit propager cette erreur
dans le ``ProjectionReport`` plutôt que de l'absorber silencieusement.
"""
class CorpusSpecError(PicaronesError):
"""Le ``CorpusSpec`` est mal formé.
Exemples : ``DocumentRef.id`` dupliqués, chemins relatifs
ambigus sans racine, GT déclarée pour un niveau non supporté.
"""
class AdapterStepError(PicaronesError):
"""Racine commune des erreurs d'adapter (OCR / LLM / VLM).
Permet à un caller (typiquement le ``PipelineExecutor``) de
catcher *« toute erreur d'adapter »* sans avoir à connaître la
sous-classe spécifique. Les sous-classes ``OCRAdapterError``,
``LLMAdapterError``, ``VLMAdapterError`` héritent toutes de
``AdapterStepError``.
"""
__all__ = [
"PicaronesError",
"ArtifactValidationError",
"ProjectionError",
"CorpusSpecError",
"AdapterStepError",
]