first demo
This commit is contained in:
24
main.py
24
main.py
@@ -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
61
models/User.py
Normal 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
0
models/__init__.py
Normal file
Reference in New Issue
Block a user