Skip to content

Python

VIRL 2 Client Library で CML を Python から操作する

VIRL 2 Client Library を使うと Python から CML を操作することが出来ます。 簡単な Python スクリプトを書いて CML 上にラボを作成する手順をメモしておきます。

Sphinx で作成された VIRL 2 Client Library のドキュメントは CML 上から参照出来ます。 CML にログインし、ToolsClient Library からドキュメントを参照することが出来ます。

file

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

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

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 アプリケーションを AWS の LambdaAPI Gateway を使って簡単に公開することが出来ます。

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

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

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

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

1
2
cd ${PYENV_ROOT}
git pull

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

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

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

1
pyenv update

指定された URL の英単語数を数える

「海外メーカー製品は、ドキュメントを英語で読むのが大変」という会話を耳にしたので、実際に「海外メーカー = シスコのドキュメントの英単語数」を計測してみました。 「英語の勉強をしてみよう」と思い立つのですが、単語を覚えるにしても「とりあえず人気のありそうな単語帳を買って…」となっても、興味が無く・使わない単語は忘れてしまいます。 逆に言うと「テクニカルドキュメントによく出てくる単語」を重点的に勉強すれば効率が良いのでは… と思い立った、ということもあります。 当初は「指定 URL の単語数を数える」だけのサンプルスクリプトを作ったのですが、結局 word-counter として PyPi に登録しました。 とは言え、PyPi として登録するほど大したことはしていません……

Python で営業日を取得出来るライブラリ「jpbizday」を公開

日本の祝日情報を取得する Python ライブラリは幾つかありますが、動作は以下に大別出来ると思います。

  1. オンラインで動作するもの (「Google カレンダー」や「公共機関が出しているカレンダー」からネットワーク経由で情報取得するもの)
  2. オフラインで動作するもの

どちらも一長一短ですが、「1. オンライン」の場合は当然、オンライン側の URL や提供データのフォーマット変更などの影響を受けてしまいます。 「2. オフライン」タイプのライブラリとしては jpholiday という、素晴らしいライブラリが公開されています。 こちらのライブラリを利用する形で (祝日では無く) 営業日情報を取得する jpbizday というライブラリを作成しました。

isort で Python の import 順序を PEP8 準拠に修正する

Python で import するライブラリの順序は PEP8 で決められています

import文 は次の順番でグループ化すべきです:

  1. 標準ライブラリ
  2. サードパーティに関連するもの
  3. ローカルな アプリケーション/ライブラリ に特有のもの

isort を使うと Python で import するライブラリの順序を並び替えてくれます。