Source code for src.share_kernel.domain.value_objects.phone

import re
from dataclasses import dataclass

from src.share_kernel.domain.base_value_object import ValueObject
from src.share_kernel.domain.exceptions import InvalidValueObjectException

# Format E.164 : +[code pays][numéro], ex: +33612345678
_E164_REGEX = re.compile(r"^\+[1-9]\d{6,14}$")


[docs] @dataclass(frozen=True) class PhoneNumber(ValueObject): """ Numéro de téléphone au format E.164. Exemple : PhoneNumber(value="+33612345678") """ value: str def __post_init__(self): # Supprime les espaces avant validation object.__setattr__(self, "value", self.value.replace(" ", "")) super().__post_init__() def _validate(self): if not _E164_REGEX.match(self.value): raise InvalidValueObjectException( f"Numéro de téléphone invalide : '{self.value}'. " "Format attendu : E.164 (ex: +33612345678)" ) def __str__(self) -> str: return self.value