らくがきちょう

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

Python

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

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

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

Python で FastAPI を使ったアプリケーションを Web アプリケーションを作成する際、POST メソッドで渡されるリクエストの処理は公式サイトの Request Body 説明ページ によると pydantic を使ったクラスで処理するサンプルが掲載されています。 しかし、例…

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

Python で「JSON でデータを受け取る」ようなケースを考えた場合、データを pydantic でクラス化するケースがあると思います。 例えば FastAPI で POST された JSON を受け取る Web アプリケーションを開発する場合などです。 こういった場合、「JSON 内のデ…

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

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

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

pyenv 自身をアップデートしたい場合、以下のように pyenv のインストールディレクトリで git pull するだけで可能です。 cd ${PYENV_ROOT} git pull プラグインを利用したい場合は pyenv-update を ${PYENV_ROOT}/plugins/ 配下にコピーします。 git clone …

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

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

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

「海外メーカー製品は、ドキュメントを英語で読むのが大変」という会話を耳にしたので、実際に「海外メーカー = シスコのドキュメントの英単語数」を計測してみました。 「英語の勉強をしてみよう」と思い立つのですが、単語を覚えるにしても「とりあえず人…

Python で XX 時から YY 時まで ZZ 分間隔で表示する

Python では時間の計算を行う際、timedelta を利用することが出来ます。 timedelta を使うと、例えば「XX 時から YY 時まで ZZ 分間隔で表示する」といったことも簡単に実現出来ます。

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

日本の祝日情報を取得する Python ライブラリは幾つかありますが、動作は以下に大別出来ると思います。 オンラインで動作するもの (「Google カレンダー」や「公共機関が出しているカレンダー」からネットワーク経由で情報取得するもの) オフラインで動作す…

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

Python で import するライブラリの順序は PEP8 で決められています。 import文 は次の順番でグループ化すべきです: 標準ライブラリ サードパーティに関連するもの ローカルな アプリケーション/ライブラリ に特有のもの isort を使うと Python で import す…

venv で Python 仮想環境を作成する

PEP 405 -- Python Virtual Environments に Python の仮想環境について書かれています。 Python 3.3 からは venv が標準ツールとなり (但し、推奨は pyvenv)、Python 3.5 からは venv が推奨ツールになりました。 venv の基本的な使い方をメモしておきます。

mangum + FastAPI で ASGI な Python アプリケーションを AWS Lambda + API Gateway 上で動かす

mangum を使うと FastAPI や responder といった ASGI アプリケーションを AWS Lambda + API Gateway 上へ簡単にデプロイすることが出来ます。 今回は FastAPI で書いた ASGI アプリケーションを mangum を使って AWS 上でデプロイする手順をメモしておきま…

AWS Lambda で CloudWatch Event からトリガーした場合の event サンプル

AWS Lambda を cron 式で指定時間にトリガーする場合、トリガーには Cloud Watch Event を指定します。 この場合、Lambda のイベントハンドラへ渡される event (JSON オブジェクト) のサンプルは Event Patterns in CloudWatch Events に掲載されています。 …

python-lambda-local と lambda-uploader を使ってローカル環境で Lambda 開発を行う

AWS の Lambda で開発を行う際、Web 管理コンソール上で開発 / デバッグするのは大変です。 python-lambda-local を使うとローカル環境で Lambda を実行出来、更に lambda-uploader を使うとローカル環境から簡単に Lambda へ関数をアップロードすることが出…

PySnooper を使って Python スクリプトをデバッグする

PySnooper を使うと print() や pdb を使わずにデバッグを行うことが出来ます。 PySnooper のページには PySnooper is a poor man's debugger. と書かれていました。 PySnooper の使い方をメモしておきます。 尚、ソースコードは cool-RR / PySnooper にあり…

Python が実行出来るシェル「xonsh」をインストールする

xonsh は Python の機能が使えるシェルです。 xonsh のインストール手順をメモしておきます。

Azure Storage Container へアクセスする Python スクリプトサンプル

azure-storage-blob ライブラリを使うと Python スクリプトから Azure Storage Container へアクセスすることが出来ます。 簡単なサンプルを書いたのでメモしておきます。 今回は Python 3.8.1 を使いました。 但し、このページよりも GitHub の Azure / azu…

Lambda 用の .zip ファイルを作成する場合は「zip -r .」を使う方がベター

AWS Lambda で (標準パッケージ以外の) 外部パッケージを利用したい場合は、Python のソースコードと依存するパッケージを .zip アーカイブにして、Lambda へアップロードする必要があります。 詳しくは AWS Lambda Deployment Package in Python に記載され…

Python の boto3 で S3 とダウンロード/アップロードする

以前に Python の boto3 で S3 の操作を行うサンプルというメモを書きました。 今回はアップロード / ダウンロードサンプルをメモしておきます。

Python + responder + gunicorn + systemd + Nginx で Web アプリを起動する

以前に Python + falcon + gunicorn + systemd でシンプルな Web アプリを起動する というメモを書きました。 最近は responder が流行りらしいので、Python + responder + gunicorn + systemd + nginx 構成で「responder アプリケーションをデーモン化する…

CentOS 8.1911 のシステム全体へ pyenv をインストールする

pyenv は「特定ユーザにインストールする」方法と「システム全体にインストールする」方法があり、各々以下のような特徴があると思います。 特定ユーザにインストールする ユーザ権限だけでランタイムやパッケージの 追加・削除が可能 別ユーザから参照出来…

Python の responder を使った AJAX サンプル

responder は Python の Web フレームワークです。 responder でシンプルな AJAX を書いたのでメモしておきます。 サンプルは以下の 2 つです。 テキストを入力してボタンを押すとタイトルを書き換えるサンプル テキストを入力するとタイトルが書き換わるサ…

AWS S3 にアップロードされたファイルをコピー/移動する Lambda 関数

AWS S3 でファイルがアップロードされた際に、自動的にコピー (または移動) する Lambda 関数をメモしておきます。 尚、権限は適切に設定されているものとします。

Python responder の Quick Start を写経してみる

responder は Python の Web フレームワークです。 類似のものには Flask や Falcon があります。 公式ページには以下の機能がある、と書かれています。 A pleasant API, with a single import statement. Class-based views without inheritance. ASGI fram…

Python 実行時の引数で関数を呼び出せる fire を試す

Google が作った fire というライブラリを使うと、Python スクリプトを実行する時の引数にメソッドを呼び出せるようになります。 場合によっては便利に使えるので、簡単な使い方をメモしておきます。

Python の boto3 から Amazon SES を使ってメール送信する

Python の boto3 を使って Amazon SES からメール送信するサンプルプログラムをメモしておきます。 SES のサンドボックスの解除など、SES を使う上で必要な設定は済んでいる前提です。

Python の boto3 でファイルを作らず、S3 上へオブジェクトを作成する

Python の boto3 から S3 へ「存在するファイルをアップロードする」サンプルはよく見かけるのですが、ファイルは生成せずに直接、オブジェクトをアップロードするサンプルは少ないように思えたので書いてみました。

Python の boto3 で S3 の操作を行うサンプル

Python から boto3 を使って S3 上のファイルを操作するサンプルを書いたのでメモしておきます。

Python から subprocess モジュールで外部プログラムを起動する

Python から外部プロセスを起動する場合は subprocess モジュールを使う方法があります。 非同期処理等を考えない、簡単なサンプルをメモしておきます。 subprocess.run() の実行結果はバイト配列なので sys.stdout.buffer.write() を使って標準出力していま…

Python の boto3 で EIP の操作を行うサンプル

Python から AWS を操作出来るライブラリには有名な boto3 があります。 boto3 から EIP を扱うサンプルは Using Elastic IP Addresses in Amazon EC2 にまとまっています。 ほぼこの内容そのままですが、簡単なサンプルを書いてみたのでメモしておきます。