first demo

This commit is contained in:
marys
2025-08-21 10:20:31 +02:00
parent e6fb6cdda9
commit 9fb5ca2110
3 changed files with 85 additions and 0 deletions

24
main.py
View File

@@ -1,6 +1,30 @@
# example from root.cz
# https://www.root.cz/clanky/validace-dat-v-pythonu-s-vyuzitim-knihovny-pydantic/
from models.User import User, UserNone, UserUnion, UserPositiveInt, UserFieldValidator, UserMaxLength
def main():
print("Hello from pydantic-demo!")
print(f"{User(name="John", surname="Doe", age=42, registered=True)=}")
print(f"{User(name="Adam", surname="Bernau", age=52, registered=True)=}")
print(f"{UserNone(name="Adam", surname="Bernau", age=None)=}")
print(f"{UserUnion(name="Adam", surname="Bernau", age=None)=}")
print(f"{UserUnion(name="Adam", surname="Bernau")=}")
print(f"{UserPositiveInt(name="Adam", surname="Bernau")=}")
#print(f"{UserPositiveInt(name="Adam", surname="Bernau", age=-50)=}")
print(f"{UserFieldValidator(name="Adam", surname="Bernau", age=18)=}")
print(f"{UserMaxLength(name="Adam", surname="Bernau", age=18)=}")
#print(f"{UserMaxLength(name="Adam", surname="Bernaukjghsmtlmgchs", age=18)=}")
# JSON
data = """
{"name": "John",
"surname": "Doe",
"age": 18
}
"""
print(f"{UserMaxLength.model_validate_json(data)=}")
if __name__ == "__main__":
main()

61
models/User.py Normal file
View File

@@ -0,0 +1,61 @@
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

0
models/__init__.py Normal file
View File