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** Аннотированный тип для русскоязычных строк: .. code-block:: python 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 формате.