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.'
)