らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python の FastAPI Web アプリで pydantic を使わずに POST メソッドを処理する

PythonFastAPI を使ったアプリケーションを Web アプリケーションを作成する際、POST メソッドで渡されるリクエストの処理は公式サイトの Request Body 説明ページ によると pydantic を使ったクラスで処理するサンプルが掲載されています。 しかし、例えば「POST されてくる JSON のフォーマットが一定では無い」といったケースだと pydantic ではやや困る場合があるかも知れません。 そういった場合は pydantic を使わず、Body を使ってリクエストを受け取り、json として処理する方法があります。 下記は FastAPI を mangumAWS へデプロイすることを前提にしたサンプルです。

続きを読む

Python で「ハイフンを含んだデータ名」の JSON を pydantic で受け取る場合の処理

Python で「JSON でデータを受け取る」ようなケースを考えた場合、データを pydantic でクラス化するケースがあると思います。 例えば FastAPI で POST された JSON を受け取る Web アプリケーションを開発する場合などです。 こういった場合、「JSON 内のデータ名」と「クラスの変数名」は同じ名前にするのが自然だと思います。 しかし、- を含む JSON を渡された場合、どういって処理するのか、メモしておきたいと思います。

続きを読む

AWS API Gateway + Lambda + mangum + FastAPI な Python アプリケーションに POST された JSON を処理する

以前に mangum + FastAPI で ASGI な Python アプリケーションを AWS Lambda + API Gateway 上で動かすというメモを書きました。 mangummangum-cli を使うと FastAPI を使った Web アプリケーションを AWSLambdaAPI Gateway を使って簡単に公開することが出来ます。

mangum-cli が無い場合は作成したアプリケーションを手動でアプリケーションをアップロードする必要があります。 CloudFormation を使うにしてもテンプレートを作成する必要があり、面倒です。 mangum-cli があればこれらの作業を自動化出来、手間なく、迅速にアプリケーションを配置することが出来ます。

FastAPI で REST API のエンドポイントを作成する場合、POST リクエストを受け付ける必要があります。 こういった場合の「POST された JSON を FastAPI な Python アプリケーションで処理する方法」をメモしておきます。

続きを読む

pyenv 自身をバージョンアップする

pyenv 自身をアップデートしたい場合、以下のように pyenv のインストールディレクトリで git pull するだけで可能です。

cd ${PYENV_ROOT}
git pull

プラグインを利用したい場合は pyenv-update${PYENV_ROOT}/plugins/ 配下にコピーします。

git clone git://github.com/yyuu/pyenv-update.git ${PYENV_ROOT}/plugins/pyenv-update

後は pyenv update すれば pyenv のアップデートが実行されます。

pyenv update

Ubuntu18 に docker / docker-compose をインストールする

Ubuntu18 に docker / docker-compose をインストールする手順は公式サイトで丁寧に説明されています。 今回はコマンドだけ、メモしておきます。

続きを読む

AWS Lambda における S3 Put イベントのサンプル

先日、AWS Lambda で CloudWatch Event からトリガーした場合の event サンプルというメモを書きました。 Lambda のテスト用イベントとして予め用意されている Amazon S3 Put の内容を自分用にメモしておきます。

続きを読む

CentOS8 に axel をインストールして大きなファイルを分割ダウンロードする

以前に axel で CLI 上から分割ダウンロードするというメモを書きました。 CentOS8 では標準リポジトリや EPEL では axel が提供されていません。 getpagespeed というリポジトリでは axel が提供されているのですが、getpagespeed リポジトリを使うには登録が必要のようです (未確認)。 その為、今回はソースコードから axel をインストールしました。

続きを読む