from __future__ import annotations from typing import Union, Optional from pydantic import BaseModel, PositiveInt, field_validator, Field class User(BaseModel): name: str surname: str age: int registered: bool class UserNone(BaseModel): # preferred variant name: str surname: str age: int | None registered: bool = False class UserUnion(BaseModel): name: str surname: str age: Union[int, None] = None registered: bool = False class UserOptional(BaseModel): name: str surname: str age: Optional[int] # default value is None registered: bool = False class UserPositiveInt(BaseModel): name: str surname: str age: Union[PositiveInt, None] = None registered: bool = False class UserFieldValidator(BaseModel): name: str surname: str age: PositiveInt | None registered: bool = False @field_validator("age") def validate_age(cls, value): if value < 18: raise ValueError("age must be at least 18") return value class UserMaxLength(BaseModel): name: str = Field(..., max_length=10) surname: str = Field(..., max_length=10) age: PositiveInt | None registered: bool = False @field_validator("age") def check_age(cls, value): if value < 18: raise ValueError("You are too young to register") return value