python
以下の記事の続き。 pythonのバッチ用のイメージを作りたくなったのでサイズがどれくらいになるか調べてみた - podhmo's diary 調べてみたところ、どうやらbuildkitの機能を使うと行けるらしいという事がわかったので色々調べてみた。 python - Using a pip …
windows環境での作業でなるほどと思ったのでメモ。 自作のスクリプトをwindows環境で動かしたら動かなかった。以下のようなエラーメッセージが出る。 UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 59: illegal multibyte sequence…
pypa.github.io pipxという名前を聞いてまたpythonの新しいパッケージ管理のツールと思うかもしれないけれど、少しだけ用途が違う。これがほしい場合がある。 pipxは例えばpoetryやpipenvとはちょっと用途が違う。 pipxは日常生活のためのCLIコマンドのため…
pypi.org pip freeze で出力されるすべてをrequirements.txtに書く1のではなく、依存の一番外側のパッケージだけを出力したい事がある。そういうときにはpip-chillが便利。 実行例 例えば、fastapiを参考に以下の様なrequirements.txtを用意してみる。 requi…
時刻を文字列表現にするときにマイクロ秒を含んだ表現の場合がある。例えばgithub actionsのログは以下のようなもの。 lint Set up job 2021-05-25T20:31:24.8848799Z Current runner version: '2.278.0' 2021-05-25T20:31:24.8848799Z 部分が時刻の表現。実…
調べていたのでメモ。作業結果は以下のリポジトリにある。 github.com どういうときに欲しくなるか? どういうときに欲しくなるかと言うと、複数の関心事のそれぞれに対して複数の環境への共通の対応をしたくなったとき。その上その複数の関心事というのが曖…
以前の記事の続き。 enumとdataclassesを含んだ値をテキトーにJSONとしてseiralize/deserializeしたい - podhmo's diary 何も頑張って自作せずともjsonpickleを使えば良いかもしれない。 github.com import dataclasses import enum import jsonpickle class…
argparseをそのまま使うと以下の様な形になる。色々な書き方があるが、個人的にはflag部分はキーワード引数を使った関数定義にして、parse_args()で返ってきた値をそのまま使わずに**paramsで適用する形が好み。 def hello(*, name: str) -> None: print(f"h…
例えば以下の様な関数helloがあるとする。可変長引数を使って定義されている。とてもtrivialな例ではあるけれど説明用なので。。 from typing import Any def greet(prefix: str, *, name: str) -> None: print(f"{prefix}, {name}") def hello(**params: An…
昔に似たようなタイトルの記事を書いていましたが、これとはちょっと違った内容です。 datacalssesのインスタンスを含んだ値をJSONにするときのメモ enumやdataclassesを含んだ値をテキトーにJSONとしてserialize/desserializeしたくなった。パフォーマンス…
これはかなり個人的なメモ。 コンテナ経由でpythonで作ったバッチを実行しようと思った。そしてイメージのサイズがどれくらいかを大まかに知りたくなった。そんなわけで調べてみた。 サイズを極限まで絞りたいと言う気持ちはなかったのでdistrolessなどは省…
pythonのscriptを1つのファイルにまとめたい。そのような場合にはzipappの機能が使えるかもしれない。 zipファイルとして1つにまとめたファイルはpythonインタプリタで直接実行できる。 このモジュールは Python コードを含む zip ファイルの作成を行うツ…
個人的には、pythonでパッケージを公開するときに、モジュールにバージョン情報を含めるのが好きではなかった。setup時のimportエラーなどが起きうる可能性を考えて。 ただ、たまたま要望されたのでその方法を調べてみたところ、手軽に扱えるようになってい…
「pythonでyield先で起きた例外をyield元で取り扱いたい」というようなことを言っていた。いろいろ調べ直してまとめてみたらgenerator周りの復習になったのでそのメモ。 課題 yeild先で起きた例外をyield元で取り扱いたい?とはなにか? def _use(i): if i %…
デバッガーを使いたいがコードにbreakpoint を仕込むのが面倒な時がある。 例 例えば以下のようなコードがあるとして、 foo > bar > boo と辿っていた中でのbooでpdbを実行して欲しい。 def foo(): print("foo") bar() print("foo") def bar(): print("bar")…
時折、特定の前処理の一部として、1つのファイルを受け取る1つのスクリプトが何個も連鎖することがある。このようなときに都度都度processが立ち上がると、ほとんどの時間がimport timeで辛いということが起きる事がある。 以前書いた記事の中では、この辺…
はじめに awsのCLIとしてawscliがある。version 2を使ってくれと書かれていたりはするものの、この記事はversion 1。まぁそこまで大差はないと思う。 補完を有効にしなかった場合には、どのコマンドを使えば良いかの確認に aws help を使い、どのサブコマン…
Annotated PEP593で型ヒントにmetadataを付けられる様になった。 例えば、関数の型ヒントを見てCLIのコマンドを生成するようなフレームワークがあったとして、コマンドラインオプションのヘルプメッセージ用の文字列も保持したい。以下のコード上での --name…
最近「ちょっとslack botでも書くか」と思う機会があった。そのときに色々思うことがあったのでメモ。 slack botを書く機会があった。どのライブラリを使うのが良い? 現状ではslack自身が出しているライブラリをそのまま使うのが良いのではないかと思う。 g…
github.com slackやdiscordなどのbotを作るときに、ファイルを触れない人にも設定をいじってもらおうとしたら、スプレッドシートあたりが無難なのかなと思いました。そんなわけでスプレッドシートを設定ファイルとして使うライブラリを作ってみました。 イン…
今回は以前のprotobufの出力を試した記事のOpenAPI doc版。 pythonの型定義を使ってprotobufを出力してみる。 近年のOpenAPIの状況 近年では、openAPIとの付き合い方もだいぶ落ち着いてきて、夢を見た機能を実装し切るというような気持ちのところは減ってき…
github.com コード生成でのN+1? 以前に、コード生成でのN+1問題の発生というような記事を書いた。 コード生成におけるN+1問題とbulk actionとしてのegoist。あるいはMakefileについて この記事では、bulk action的な実行を解として説明をしていた。元々の問…
github.com 定義が多くなってくると、1つのファイルで管理するのが厳しくなってくる。そんなわけで、moduleを分割することを考えてみた。似たような機構はいろいろなWAFにも存在する。例えばflaskならblueprint、fastAPIならAPIRouter。 Flask -- Modular A…
例えば以下の画像の様な依存関係でコード生成1が行われるとする。入力となるファイルが幾つかあり、例えばjinja2のテンプレートなどで出力先の表現が記述されていて、これによりちょっとしたgoのコードやopenAPI docの一部を生成するというようなタスク。 画…
github.com サブコマンドをincludeで自由に追加できるようにした。 デフォルトで利用できるサブコマンド 例えば egoist init clikit で生成されるdefinitions.pyは以下の様なサブコマンドを持っている。 describe generate scan usage: definitions.py [-h] …
egoistを作っていて、けっこう気にしているポイントなども記事にしてみることにする。個人的には-hや--helpに時間が掛かるCLIはあまり好きではない。 具体的には0.5sくらいでちょっとストレスを感じ、1.0sを越えると、使うたびに感じるストレスがそのツール…
github.com pythonのクラス定義からUnmarshalJSON()でのvalidation付きのgoのstruct定義を生成してみる。(より細かなバリエーションは https://github.com/podhmo/egoist/tree/master/examples/e2e/generate-structkit にある) なぜUnmarshalJSON()付きで…
github.com 作っていたミニフレームワークの最初のバージョンをリリースしたと言う話という記事を書きました。 goはランタイムというミニフレームワークのプロトタイプをpypiにアップロードした とはいえ、この記事だけだと何が何だか分からなかったので、作…
github.com 以下の記事のミニフレームワークのプロトタイプが動くようになったので、0.0.1をpypiにアップロードしました。 goはランタイムという発想のミニフレームワークを作り始めた このプロトタイプに含まれる機能はCLIの定義を手軽にすると言う部分です…
この記事の作業の一環で、pythonの型定義の情報を使いprotobufを出力することを試してみた。 goはランタイムという発想のミニフレームワークを作り始めた 基本的にはアイデアスケッチのようなもので、ちょっとしたコード辺を書いてみて、上手く期待する機能…