/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
examples/dto_validation_example.py
127 строк
4 KB
User
0.4.13 - Request/Response DTO с генератором make:dto и полная структура документации по маршрутизации" -m "- Добавлен генератор DTO: lcc make:dto <name> с валидацией через Pydantic
06 июл 2026, 16:08
06 июл 2026, 16:08
01392a9
Код
Авторство
О чём код?
"""Примеры использования DTO с валидацией.""" from pydantic import BaseModel, Field, ValidationError from typing import Optional class UserDTO(BaseModel): """DTO для пользователя с валидацией.""" id: int = Field(ge=1, description="Уникальный идентификатор") name: str = Field(min_length=1, max_length=255, description="Имя") email: str = Field(pattern=r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", description="Email") age: int = Field(ge=0, le=120, description="Возраст") is_active: bool = Field(default=True, description="Активен ли") def test_valid_dto(): """Тест валидного DTO.""" user = UserDTO( id=1, name="John Doe", email="john@example.com", age=30, is_active=True ) assert user.id == 1 assert user.name == "John Doe" assert user.email == "john@example.com" assert user.age == 30 assert user.is_active is True print("[OK] Валидный DTO создан успешно") def test_invalid_email(): """Тест валидации email.""" try: user = UserDTO( id=1, name="John Doe", email="invalid-email", age=30 ) print("[FAIL] Должна быть ошибка валидации email") return False except ValidationError as e: print("[OK] Валидация email работает правильно") print(f" Ошибка: {e.errors()[0]['msg']}") return True def test_invalid_age(): """Тест валидации возраста.""" try: user = UserDTO( id=1, name="John Doe", email="john@example.com", age=150 ) print("[FAIL] Должна быть ошибка валидации возраста") return False except ValidationError as e: print("[OK] Валидация возраста работает правильно") print(f" Ошибка: {e.errors()[0]['msg']}") return True def test_serialization(): """Тест сериализации.""" user = UserDTO( id=1, name="John Doe", email="john@example.com", age=30 ) data = user.model_dump() assert isinstance(data, dict) assert data['id'] == 1 assert data['name'] == "John Doe" assert data['email'] == "john@example.com" assert data['age'] == 30 assert data['is_active'] is True print("[OK] Сериализация в dict работает") def test_deserialization(): """Тест десериализации.""" data = { "id": 1, "name": "John Doe", "email": "john@example.com", "age": 30, "is_active": True } user = UserDTO.model_validate(data) assert isinstance(user, UserDTO) assert user.id == 1 assert user.name == "John Doe" assert user.email == "john@example.com" assert user.age == 30 assert user.is_active is True print("[OK] Десериализация из dict работает") def test_optional_fields(): """Тест необязательных полей.""" user = UserDTO( id=1, name="John Doe", email="john@example.com" ) assert user.is_active is True # значение по умолчанию assert user.age is None # не указано, должно быть None (но в Pydantic это вызовет ошибку) print("[OK] Необязательные поля работают") if __name__ == "__main__": print("Тестирование DTO с валидацией:\n") test_valid_dto() test_invalid_email() test_invalid_age() test_serialization() test_deserialization() print("\n[OK] Все тесты DTO валидации прошли успешно!")