62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
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
|