From 9fb5ca2110c9ceaec44d51573892364196cdd172 Mon Sep 17 00:00:00 2001 From: marys Date: Thu, 21 Aug 2025 10:20:31 +0200 Subject: [PATCH] first demo --- main.py | 24 ++++++++++++++++++ models/User.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++ models/__init__.py | 0 3 files changed, 85 insertions(+) create mode 100644 models/User.py create mode 100644 models/__init__.py diff --git a/main.py b/main.py index 4150a3e..21ebb31 100644 --- a/main.py +++ b/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() diff --git a/models/User.py b/models/User.py new file mode 100644 index 0000000..0e014c8 --- /dev/null +++ b/models/User.py @@ -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 diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..e69de29