import datetime from typing import Any from dirty_equals import DirtyEquals, IsDate from preference_center.profile.utils import mask_email, mask_phone_number def IsDateOrNone(value: datetime.date | None) -> Any: # noqa """Compare a date or None.""" if value is None: return None return IsDate(approx=value, delta=0, iso_string=True) class IsMaskedEmail(DirtyEquals[str]): """Compare a masked email.""" def __init__(self, exactly: str) -> None: super().__init__() self.exactly = exactly def equals(self, other: str) -> bool: return mask_email(self.exactly) == other class IsMaskedPhoneNumber(DirtyEquals[str]): """Compare a masked phone number.""" def __init__(self, exactly: str) -> None: super().__init__() self.exactly = exactly def equals(self, other: str) -> bool: return mask_phone_number(self.exactly) == other def IsMaskedPhoneNumberOrNone(value: str | None) -> Any: # noqa """Compare a masked phone number or None.""" if value is None: return None return IsMaskedPhoneNumber(value)