1+ from pydantic import BaseModel , ValidationError , Field , EmailStr
2+ from datetime import datetime , UTC
3+ from functools import partial
4+ from typing import Literal ,Annotated
5+
6+ class User (BaseModel ):
7+ uid : Annotated [int , Field (gt = 0 )]
8+ username : Annotated [str , Field (min_length = 3 , max_length = 20 )]
9+ email : str
10+ age : Annotated [int , Field (ge = 13 ,le = 130 )]
11+
12+ verified_at : datetime | None = None
13+
14+ bio : str = ""
15+ is_active : bool = True
16+
17+ full_name : str | None = None
18+
19+ class BlogPost (BaseModel ):
20+ title : Annotated [str , Field (min_length = 1 ,max_length = 200 )]
21+ content : Annotated [str , Field (min_length = 20 )]
22+ view_count : int = 0
23+ is_published : bool = False
24+
25+ tags : list [str ] = Field (default_factory = list )
26+
27+ # create_at : datetime = Field(default_factory=lambda : datetime.now(tz=UTC))
28+ # both will do same work lambda or partial function
29+ create_at : datetime = Field (default_factory = partial (datetime .now ,tz = UTC ))
30+
31+ author_id : str | int
32+ status : Literal ["draft" , "published" , "archived" ] = "draft"
33+
34+ slug : Annotated [str , Field (pattern = r"^[a-z0-9-]+$" )]
35+
36+
37+ try :
38+ user = User (
39+ uid = 0 ,
40+ username = "cs" ,
41+ email = "ashwini@gmail.com" ,
42+ age = 12
43+
44+ )
45+ except ValidationError as e :
46+ print (e )
47+ # post = BlogPost(
48+ # title="Getting started with Python",
49+ # content="python is dynamically typing language.",
50+ # author_id="123",
51+ # )
52+
53+ # print(post)
0 commit comments