Open3

DevcontainerでFastAPIを使ったWebAPI開発

ふくろうふくろう

pipでrootユーザーはだめって怒られる場合

Dockerfileに以下を追記

ENV PIP_ROOT_USER_ACTION=ignore
ふくろうふくろう

未解決

devcontainerをリビルドすると以下のメッセージが出るようになった。
しかし、動いてるし解決方法もわからないので放置

エラー: タスク タイプ 'docker-build' は登録されていません。対応するタスク プロバイダーを提供する拡張機能がインストールできていませんか?
エラー: タスク タイプ 'docker-run' は登録されていません。対応するタスク プロバイダーを提供する拡張機能がインストールできていませんか?
ふくろうふくろう

レスポンスでdatetimeを返す

class Group(Base):
    __tablename__ = 'groups'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(100), nullable=False)
    description = Column(Text, nullable=True)
    created_by = Column(Integer, ForeignKey('users.id'), nullable=False)
    created_at = Column(DateTime, default=now())
    updated_at = Column(DateTime, default=now(), onupdate=now())

このようなモデルの場合、datetimeを文字列に変換する必要がある
レスポンスモデルとfieldvaridatorを使うといい感じに実装できる

class GroupResponse(BaseModel):
    id: int
    name: str
    description: str
    created_by: int
    created_at: datetime
    updated_at: datetime

    class Config:
        orm_mode = True

    @field_validator('created_at', 'updated_at')
    @classmethod
    def parse_datetime(cls, value: datetime) -> str:
        return value.isoformat()
@app.get("/group", response_model=GroupResponse)
async def get_group(db: Session = Depends(get_db)):
    group = db.query(Group).filter(条件式)
    return group

こうするとGroupをGroupResponseに変換し、jsonに変換するときにdatetimeを文字列にしてくれる