1- import re
21from functools import wraps
3- from typing import Annotated
42from typing import Union
53
6- from pydantic import AfterValidator
7- from pydantic import StrictStr
8- from pydantic import validate_call
9- from pydantic import ValidationError
10-
114from lib .core .enums import BaseTitledEnum
125from lib .core .exceptions import AppException
6+ from lib .core .pydantic_v1 import constr
137from lib .core .pydantic_v1 import errors
8+ from lib .core .pydantic_v1 import pydantic_validate_arguments
149from lib .core .pydantic_v1 import PydanticTypeError
10+ from lib .core .pydantic_v1 import StrictStr
11+ from lib .core .pydantic_v1 import StrRegexError
12+ from lib .core .pydantic_v1 import ValidationError
1513from lib .infrastructure .validators import wrap_error
1614
1715
@@ -30,31 +28,27 @@ def __str__(self) -> str:
3028errors .EnumMemberError = EnumMemberError
3129
3230
33- # Email validation pattern
34- _EMAIL_PATTERN = re .compile (
35- r"^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)"
36- r"*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}"
37- r"[a-zA-Z0-9])?)*$"
38- )
39-
40-
41- def _validate_email (value : str ) -> str :
42- """Validate email format."""
43- if not _EMAIL_PATTERN .match (value ):
44- raise ValueError ("Invalid email" )
45- return value
46-
47-
48- EmailStr = Annotated [StrictStr , AfterValidator (_validate_email )]
31+ class EmailStr (StrictStr ):
32+ @classmethod
33+ def validate (cls , value : Union [str ]) -> Union [str ]:
34+ try :
35+ constr (
36+ regex = r"^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)"
37+ r"*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}"
38+ r"[a-zA-Z0-9])?)*$"
39+ ).validate ( # noqa
40+ value
41+ )
42+ except StrRegexError :
43+ raise ValueError ("Invalid email" )
44+ return value
4945
5046
5147def validate_arguments (func ):
52- validated_func = validate_call (func )
53-
5448 @wraps (func )
5549 def wrapped (self , * args , ** kwargs ):
5650 try :
57- return validated_func (self , * args , ** kwargs )
51+ return pydantic_validate_arguments ( func ) (self , * args , ** kwargs )
5852 except ValidationError as e :
5953 raise AppException (wrap_error (e )) from e
6054
0 commit comments