Use default_factory in model for UUID4 generation

This commit is contained in:
François Voron
2021-08-29 15:35:56 +02:00
parent 848315badc
commit 45354ee9f0

View File

@ -1,7 +1,7 @@
import uuid import uuid
from typing import List, Optional, TypeVar from typing import List, Optional, TypeVar
from pydantic import UUID4, BaseModel, EmailStr, validator from pydantic import Field, UUID4, BaseModel, EmailStr
class CreateUpdateDictModel(BaseModel): class CreateUpdateDictModel(BaseModel):
@ -24,16 +24,12 @@ class CreateUpdateDictModel(BaseModel):
class BaseUser(CreateUpdateDictModel): class BaseUser(CreateUpdateDictModel):
"""Base User model.""" """Base User model."""
id: Optional[UUID4] = None id: UUID4 = Field(default_factory=uuid.uuid4)
email: Optional[EmailStr] = None email: Optional[EmailStr] = None
is_active: Optional[bool] = True is_active: Optional[bool] = True
is_superuser: Optional[bool] = False is_superuser: Optional[bool] = False
is_verified: Optional[bool] = False is_verified: Optional[bool] = False
@validator("id", pre=True, always=True)
def default_id(cls, v):
return v or uuid.uuid4()
class BaseUserCreate(CreateUpdateDictModel): class BaseUserCreate(CreateUpdateDictModel):
email: EmailStr email: EmailStr
@ -48,7 +44,6 @@ class BaseUserUpdate(BaseUser):
class BaseUserDB(BaseUser): class BaseUserDB(BaseUser):
id: UUID4
email: EmailStr email: EmailStr
is_active: bool is_active: bool
is_superuser: bool is_superuser: bool
@ -65,7 +60,7 @@ UD = TypeVar("UD", bound=BaseUserDB)
class BaseOAuthAccount(BaseModel): class BaseOAuthAccount(BaseModel):
"""Base OAuth account model.""" """Base OAuth account model."""
id: Optional[UUID4] = None id: UUID4 = Field(default_factory=uuid.uuid4)
oauth_name: str oauth_name: str
access_token: str access_token: str
expires_at: Optional[int] = None expires_at: Optional[int] = None
@ -73,10 +68,6 @@ class BaseOAuthAccount(BaseModel):
account_id: str account_id: str
account_email: str account_email: str
@validator("id", pre=True, always=True)
def default_id(cls, v):
return v or uuid.uuid4()
class Config: class Config:
orm_mode = True orm_mode = True