Code source de xphs1903.outils.exceptions

# (c) Copyright 2026 Émile Jetzer. All Rights Reserved.
"""Exceptions et erreurs du module xphs1903."""

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from queue import Queue

    from .definitions import ObjetImmuable


[docs] class BasePHS1903Error(Exception): """Erreur de base du module xphs1903.""" def __init__(self, msg: str) -> None: """Erreur de base du module xphs1903.""" super().__init__(f'[{type(self).__name__}] {msg}')
[docs] class RuntimePHS1903Error(BasePHS1903Error): ... # noqa: D101
[docs] class AttributePHS1903Error(BasePHS1903Error): ... # noqa: D101
[docs] class KeyPHS1903Error(BasePHS1903Error): ... # noqa: D101
[docs] class ValuePHS1903Error(BasePHS1903Error): ... # noqa: D101
[docs] class TypePHS1903Error(BasePHS1903Error): ... # noqa: D101
[docs] class ObjetImmuableError(RuntimePHS1903Error): """Erreur indiquant un accès non-autorisé à un objet immuable. Attributes: obj: l'objet immuable lié à l'erreur """ def __init__(self, obj: ObjetImmuable) -> None: """Décrit l'erreur impliquant obj.""" self.obj: ObjetImmuable = obj msg: str = f'{obj:r} est immuable.' super().__init__(msg)
[docs] class AttributNonModifiableError(AttributePHS1903Error, ObjetImmuableError): """Erreur indiquant un accès non-autorisé à un objet immuable. Attributes: obj: l'objet immuable attr: l'attribut """ def __init__(self, obj: ObjetImmuable, attr: str) -> None: """Erreur indiquant un accès non-autorisé à un objet immuable.""" self.obj: ObjetImmuable = obj self.attr: str = attr super().__init__(f"L'attribut {attr:r} de {obj:r} est immuable.")
[docs] class ItemNonModifiableError(KeyPHS1903Error, ObjetImmuableError): """Erreur indiquant un accès non-autorisé à un objet immuable. Attributes: obj: l'objet immuable key: clé """ def __init__(self, obj: ObjetImmuable, key: str) -> None: """Erreur indiquant un accès non-autorisé à un objet immuable.""" self.obj: ObjetImmuable = obj self.key: str = key super().__init__(f"L'élément {key:r} de {obj:r} est immuable.")
[docs] class ChoixInvalideError(ValuePHS1903Error): """Erreur indiquant un choix invalide. Attributes: sel: sélection invalide choix: liste des options valides """ def __init__(self, selection: int, choix_possibles: list[int]) -> None: """Erreur indiquant un choix invalide.""" self.sel: int = selection self.choix: list[int] = choix_possibles super().__init__( f"La sélection {selection:r} n'est pasdans {{choix_possibles:s}}." )
[docs] class PasUnNombreEntierError(ValuePHS1903Error): """Erreur indiquant qu' une valeur n'est pas un nombre entier. Attributes: sel: sélection invalide """ def __init__(self, selection: str) -> None: """Erreur indiquant qu' une valeur n'est pas un nombre entier.""" self.sel: str = selection super().__init__( f'La sélection {selection:r} ne représentepas un nombre entier.' )
[docs] class AppareilInexistantOuInvalideError(TypePHS1903Error): def __init__(self, appareil: str, _type: type): self.appareil: str = appareil self._type: type = _type super().__init__( f"L'objet {appareil:s} de type {_type:s} ne décrit pas un appareil valide." )
[docs] class StopLigneDeCommande(BasePHS1903Error, StopIteration): def __init__(self, commandes: Queue, resultats: Queue): self.commandes: Queue = commandes self.resultats: Queue = resultats super().__init__( f'Fin de la file de commandes {commandes:r}, avec les résultats {resultats:r}' )
[docs] class AucunDatumError(ValuePHS1903Error): def __init__(self, args: tuple[Any], kargs: dict[str, Any]): self.args: tuple[Any] = args self.kargs: dict[str, Any] = kargs super.__init__( f'Arguments invalides {args} et {kargs} reçus, attendait 1 Datum.' )