38 lines
950 B
Python
38 lines
950 B
Python
import datetime
|
|
import re
|
|
|
|
from aiogram.types import User as TelegramUser
|
|
from pydantic_core import PydanticCustomError
|
|
from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
|
|
|
|
BIRTHDATE_REGEXP = re.compile(r"^(?P<day>\d{2}).(?P<month>\d{2}).(?P<year>\d{4})$")
|
|
|
|
|
|
def parse_date(text: str) -> datetime.date | None:
|
|
if (re_match := BIRTHDATE_REGEXP.match(text)) is None:
|
|
return
|
|
|
|
return datetime.date(
|
|
year=int(re_match.group("year")),
|
|
month=int(re_match.group("month")),
|
|
day=int(re_match.group("day")),
|
|
)
|
|
|
|
|
|
def parse_phone(text: str) -> str | None:
|
|
phone = text
|
|
if not phone.startswith("+"):
|
|
phone = f"+{phone}"
|
|
try:
|
|
PhoneNumber._validate(phone, None)
|
|
except PydanticCustomError:
|
|
return
|
|
|
|
return phone
|
|
|
|
|
|
def get_telegram_user_full_name(user: TelegramUser) -> str:
|
|
name_parts = (user.first_name, user.last_name)
|
|
return " ".join(filter(None, name_parts))
|