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 формате.