Zhukova_Mariya
Start
Данный код реализует систему валидации данных для маркетплейса с использованием Pydantic v2. Модели обеспечивают строгую типизацию, валидацию бизнес-правил и автоматическую документацию.
UserSpec
Базовая модель пользователя маркетплейса.
Атрибуты:
- user_id
: Уникальный идентификатор пользователя (int)
- username
: Имя пользователя на русском языке (RussianStr)
- surname
: Фамилия пользователя на русском языке (RussianStr)
- second_name
: Отчество пользователя, опционально (RussianStr)
- email
: Email в валидном формате (EmailStr)
- status
: Статус пользователя - «active» или «non-active» (Literal)
Конфигурация:
- Запрещены дополнительные поля (extra="forbid"
)
ProfileSpec
Расширенная модель профиля пользователя, наследуется от UserSpec.
Дополнительные атрибуты:
- bio
: Биография пользователя на русском языке (RussianStr)
- url
: URL страницы профиля в валидном формате (HttpUrl)
ItemSpec
Модель товара в маркетплейсе.
Атрибуты:
- item_id
: Уникальный идентификатор товара (int)
- name
: Название товара на русском языке (RussianStr)
- desc
: Описание товара на русском языке (RussianStr)
- price
: Цена товара, должна быть > 0 (float)
ServiceSpec
Модель услуги в маркетплейсе.
Атрибуты:
- service_id
: Уникальный идентификатор услуги (int)
- name
: Название услуги на русском языке (RussianStr)
- desc
: Описание услуги на русском языке (RussianStr)
- price
: Цена услуги, должна быть > 0 (float)
OrderLineSpec
Модель строки заказа, содержащей товар или услугу.
Атрибуты:
- order_id
: Идентификатор заказа (int)
- order_line_id
: Идентификатор строки заказа (int)
- item_line
: Товар или услуга (Union[ItemSpec, ServiceSpec])
- quantity
: Количество, должно быть > 0 (float)
- line_price
: Стоимость строки, должна быть > 0 (float)
Валидатор:
- check_line_price()
- проверяет соответствие line_price
произведению цены на количество
OrderSpec
Модель полного заказа.
Атрибуты:
- order_id
: Уникальный идентификатор заказа (int)
- user_info
: Информация о пользователе (ProfileSpec)
- items_line
: Список строк заказа (List[OrderLineSpec])
Валидатор:
- check_unique_order_lines()
- проверяет уникальность order_line_id
в рамках заказа
OrdersSpec
Коллекция всех заказов маркетплейса.
Атрибуты:
- market_place_orders
: Список всех заказов (List[OrderSpec])
Валидатор:
- check_global_uniques()
- проверяет глобальную уникальность всех идентификаторов
Дополнительно
RussianStr
Аннотированный тип для русскоязычных строк:
RussianStr = Annotated[str, Field(pattern=r'^[А-Яа-яЁё\s\-]+$')]
Проверяет: - Только русские буквы (А-Я, а-я, Ёё) - Пробелы и дефисы - Запрещает латинские буквы, цифры, специальные символы
Функции
load_orders_from_yaml()
Загружает и валидирует заказы из YAML файла.
Параметры:
- file_path
: Путь к YAML файлу
Возвращает:
- OrdersSpec
: Валидированные данные заказов
- None
: В случае ошибки
Исключения:
- FileNotFoundError
: Если файл не найден
- yaml.YAMLError
: При ошибках парсинга YAML
- ValidationError
: При ошибках валидации Pydantic
Документация сгенерирована автоматически с использованием Sphinx и доступна в HTML формате.