Consider the following model:
from datetime import datetime
from typing import Optional, Tuple
from sqlalchemy.dialects.postgresql import TSTZRANGE
from sqlalchemy import Column
from sqlmodel import Field, SQLModel
class DateRange(SQLModel):
"""Plan rate model"""
id: Optional[int] = Field(default=None, primary_key=True)
ts_range: Tuple[datetime, datetime] = Field(nullable=False, sa_column=Column(TSTZRANGE))
I am sucessfully able to add data to the database (using fastAPI
). However, as mentioned below, when trying to return the newly added object, ie, since ts_range
is of type Range
, it is unable to serialize the response while returning.
@router.post(
"/rates",
tags=["rates", "create"],
response_model=DateRange,
)
async def create_rate(
plan_id: int,
rate: DateRange,
db: DB = Depends(get_db),
) -> DateRange:
"""Create new rate"""
rate = DateRange(**rate.dict())
db.add(rate)
try:
await db.commit()
await db.refresh(rate)
print(rate) # NOTE: it works until this point
return rate # FIXME: serialization issue
except Exception as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Invalid date range [{e}]",
)