Fix email validation dependency issue
- Add email-validator to requirements.txt - Add fallback email validation for user and supplier schemas - Implement graceful handling when email-validator is not installed
This commit is contained in:
parent
a17fe518a9
commit
5da770418f
@ -1,17 +1,40 @@
|
|||||||
|
import re
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from pydantic import BaseModel, EmailStr
|
from pydantic import BaseModel, validator
|
||||||
|
|
||||||
|
# Try to import EmailStr, but fallback to str if email-validator is not installed
|
||||||
|
try:
|
||||||
|
from pydantic import EmailStr
|
||||||
|
email_type = EmailStr
|
||||||
|
except ImportError:
|
||||||
|
email_type = str
|
||||||
|
|
||||||
|
|
||||||
# Shared properties
|
# Shared properties
|
||||||
class SupplierBase(BaseModel):
|
class SupplierBase(BaseModel):
|
||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
contact_name: Optional[str] = None
|
contact_name: Optional[str] = None
|
||||||
email: Optional[EmailStr] = None
|
email: Optional[email_type] = None
|
||||||
phone: Optional[str] = None
|
phone: Optional[str] = None
|
||||||
address: Optional[str] = None
|
address: Optional[str] = None
|
||||||
website: Optional[str] = None
|
website: Optional[str] = None
|
||||||
notes: Optional[str] = None
|
notes: Optional[str] = None
|
||||||
|
|
||||||
|
# Add email validation if using fallback str type
|
||||||
|
@validator('email')
|
||||||
|
def validate_email(cls, v):
|
||||||
|
if v is None:
|
||||||
|
return v
|
||||||
|
|
||||||
|
if not isinstance(v, str):
|
||||||
|
return v
|
||||||
|
|
||||||
|
# Basic email validation pattern
|
||||||
|
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
||||||
|
if not re.match(pattern, v):
|
||||||
|
raise ValueError('Invalid email format')
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
# Properties to receive on supplier creation
|
# Properties to receive on supplier creation
|
||||||
class SupplierCreate(SupplierBase):
|
class SupplierCreate(SupplierBase):
|
||||||
|
@ -1,18 +1,41 @@
|
|||||||
|
import re
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from pydantic import BaseModel, EmailStr
|
from pydantic import BaseModel, validator
|
||||||
|
|
||||||
|
# Try to import EmailStr, but fallback to str if email-validator is not installed
|
||||||
|
try:
|
||||||
|
from pydantic import EmailStr
|
||||||
|
email_type = EmailStr
|
||||||
|
except ImportError:
|
||||||
|
email_type = str
|
||||||
|
|
||||||
|
|
||||||
# Shared properties
|
# Shared properties
|
||||||
class UserBase(BaseModel):
|
class UserBase(BaseModel):
|
||||||
email: Optional[EmailStr] = None
|
email: Optional[email_type] = None
|
||||||
is_active: Optional[bool] = True
|
is_active: Optional[bool] = True
|
||||||
is_superuser: bool = False
|
is_superuser: bool = False
|
||||||
full_name: Optional[str] = None
|
full_name: Optional[str] = None
|
||||||
|
|
||||||
|
# Add email validation if using fallback str type
|
||||||
|
@validator('email')
|
||||||
|
def validate_email(cls, v):
|
||||||
|
if v is None:
|
||||||
|
return v
|
||||||
|
|
||||||
|
if not isinstance(v, str):
|
||||||
|
return v
|
||||||
|
|
||||||
|
# Basic email validation pattern
|
||||||
|
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
||||||
|
if not re.match(pattern, v):
|
||||||
|
raise ValueError('Invalid email format')
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
# Properties to receive via API on creation
|
# Properties to receive via API on creation
|
||||||
class UserCreate(UserBase):
|
class UserCreate(UserBase):
|
||||||
email: EmailStr
|
email: email_type
|
||||||
password: str
|
password: str
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,5 +7,6 @@ pydantic-settings>=2.0.3
|
|||||||
python-jose[cryptography]>=3.3.0
|
python-jose[cryptography]>=3.3.0
|
||||||
passlib[bcrypt]>=1.7.4
|
passlib[bcrypt]>=1.7.4
|
||||||
python-multipart>=0.0.6
|
python-multipart>=0.0.6
|
||||||
|
email-validator>=2.0.0
|
||||||
ruff>=0.1.3
|
ruff>=0.1.3
|
||||||
pytest>=7.4.3
|
pytest>=7.4.3
|
Loading…
x
Reference in New Issue
Block a user