きり丸の技術日記

技術検証したり、資格等をここに残していきます。

FastAPI

FastAPIでDIのメソッドにパラメータを渡す(同期も非同期も)

始めに FastAPIにてメソッドやクラスをDIできますが、DI時に部分的に処理を差し替えたい時があります。その時にパラメータを渡せば処理を差し替えられますが、少々ハマったのでそれをブログにします。 環境 Python 3.12.4 FastAPI 0.112.0 実装 同期処理の場…

FastAPIで任意のHttpStatusと任意の型を返却する(JSONResponse)

始めに FastAPIではHTTPExceptionを使用すればHttpStatusを200以外でも返却可能です。しかし、エラー詳細は1つしか返却できません。ファイルのエラーハンドリングでは多数のエラーが発生した場合には、複数のエラーを返却したいユースケースがあります。 Exc…

SQLAlchemyで同一項目でアプリとDBの値を変更する(hybrid_property)

例えばDBで論理削除しているユーザを画面上で表示する際に「削除済ユーザ」と表示したい。PythonのSQLAlchemyであれば、画面上の表示は「削除済ユーザ」としつつ、DBの値は元の「きり丸」としておくことが可能です。 今回の記事では、SQLAlchemyを使用してア…

FastAPIのHTTPExcrptionはログに出しても空文字列の可能性がある

FastAPIでHTTPExceptionをログに出力しようとした時のメモ。 環境 Python 3.12.3 FastAPI 0.103.1 0.110.0 対応 少し古いFastAPIのライブラリなら、reprを使用してシリアライズしてください。もし、strで検証しても空文字列でなければ、そのままでも問題あり…

FastAPIのpydanticの422UnprocessableEntityはExceptionのExceptionHandlerではキャッチできない

FastAPIで意図しないエラーが発生したときにExceptionでハンドリングしていましたが、それだけではpydanticで発生するエラーがキャッチできなかったのでメモします。 なお、pydanticはAPIのRequestとResponseのモデルで使用していますので、フロントのバリデ…

途中に余計なBOMが付与されたファイルが作成された(FastAPI, StreamingResponse, Generator)

PythonのFastAPIのStreamingResponseでGeneratorを使用しながら、UTF-8 BOMのファイルをダウンロードさせるAPIを作成しました。ただ、作成したファイルを確認したところ、ファイルの途中で余計なBOM(\ufeff)が付与されてしまっていました。 今回の記事では…