Saltar a contenido

Schemas

BaseResponse

fastapi_basekit.schema.base.BaseResponse

Bases: BaseModel, Generic[T]

Source code in fastapi_basekit/schema/base.py
class BaseResponse(BaseModel, Generic[T]):
    data: Optional[T] = None
    message: str = "Operación exitosa"
    status: str = "success"

    model_config = ConfigDict(from_attributes=True)
class BaseResponse(BaseModel, Generic[T]):
    data: Optional[T] = None
    message: str = "Operación exitosa"
    status: str = "success"

Wrapper estándar para respuestas single-object.

BasePaginationResponse

fastapi_basekit.schema.base.BasePaginationResponse

Bases: BaseModel, Generic[T]

Source code in fastapi_basekit/schema/base.py
class BasePaginationResponse(BaseModel, Generic[T]):
    data: List[T]
    message: str = "Operación exitosa"
    status: str = "success"
    pagination: Optional[Dict[str, Any]]

    model_config = ConfigDict(from_attributes=True)
class BasePaginationResponse(BaseModel, Generic[T]):
    data: List[T]                     # ← ya es lista
    message: str = "Operación exitosa"
    status: str = "success"
    pagination: Optional[Dict[str, Any]]

BasePaginationResponse[Schema], NO BasePaginationResponse[List[Schema]]

Como data ya está declarado List[T], parametrizar con List[Schema] lo doblanida a List[List[Schema]] y Pydantic itera cada fila como sub-lista.

@router.get("/", response_model=BasePaginationResponse[ThingSchema])   # ✓
@router.get("/", response_model=BasePaginationResponse[List[ThingSchema]])  # ✗

TokenSchema

fastapi_basekit.schema.jwt.TokenSchema

Bases: BaseModel

Source code in fastapi_basekit/schema/jwt.py
4
5
6
class TokenSchema(BaseModel):
    sub: str
    exp: int
class TokenSchema(BaseModel):
    sub: str
    exp: int

Lo retorna JWTService().decode_token(token). Cast payload.sub a UUID si tu modelo usa UUID PKs.

Tu BaseSchema

Convención: cada proyecto define app/schemas/base.py con:

from datetime import datetime
from pydantic import BaseModel, ConfigDict


class BaseSchema(BaseModel):
    model_config = ConfigDict(
        from_attributes=True,
        populate_by_name=True,
        json_encoders={datetime: lambda v: v.strftime("%Y-%m-%dT%H:%M:%S")},
    )

from_attributes=True permite Schema.model_validate(orm_instance).

Schemas de respuesta extienden BaseSchema. Schemas de request extienden pydantic.BaseModel directo (sin from_attributes).