python
pythonでlogging.Loggerとlogging.LoggerAdapterを許す型を定義する方法のメモ。 別の言い方をするとunion typeとprotocolを使ったstructured subtypingの違いのメモ。 (:warning: おそらくまだProtocolをimportするにはtyping_extensionsが必要です) 例 例…
あんまり丁寧に文章を書く気力が起きないので個人的なメモ。pythonのimport周りの話。(最後の実行例のgistはこちら) (追記: 結局それなりに長くなった) 当初のお気持ち import fooがどうなるかみたいな話、そういえば発表のお題としてはけっこう良かったかも…
github.com 前回の記事であげた気になっていた点のうち1つを直した。それはdocstringが長すぎるという問題。 長いdocstringは引用したい部分自体の意図を弱めてしまう。完全に使い方の問題だけどdocstringとかが長いコードが嫌いになるかも。 今回のような…
昨日のこれらの記事の暫定的な実装をpyinspectに追加した。 もっとコードに対して言及して記事を書きたいという話 特定のコードの特定の箇所を引用して言及したいという話 github.com $ pyinspect quote starlette.endpoints:L99 ~/venvs/my/lib/python3.7/s…
前回の記事の続き 前回の記事で、以下のようなことを言っていた。 そしてわかりやすさを考えると、「どのクラスのどのメソッドの中のどの箇所か?」という形で表現したい(今回の場合は「WebSocketEndpointのdecode()メソッドのjson.loads()部分」という形)。…
ちょっとノルマ1が迫ってきているのでたまには自分の頭の中にあることをdumpする形でノルマを消化する。 頭の中の風景 色々な人が色々なブログとの付き合い方をしていると想う。自分自身のこのブログへの付き合い方は基本的には備忘録的な意味合いが強い感じ…
github.com はじめに ioknifeというパッケージを作りはじめた。日常生活におけるちょっとしただるさを改善するようなコマンドを用意したいという思いで。 基本的にはioknifeというコマンドの中に色々欲しくなったらサブコマンドを追加していくというような方…
pythonでassertion methodを追加したい場合はテキトウにメソッドを書いてあげれば良い。Mixinのクラスを定義してあげれば大丈夫。 組み込みのassertion methodの定義 例えば、幾つかのunittest.TestCaseに組み込みのassertion methodの定義を見て真似してあ…
github.com 以前にもちょっとしたjqfpyの活用方法の記事は書いていた。 数値の合計を取るのにJSONとみなせる JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。 今回もそれらと似たような話。 --input-format=raw 0.6.0からfor…
github.com pycommentで複数行出力のコメントをサポートした。以前までは出力が複数行に渡った時におかしな出力になってしまっていた。出力されるのはrepr()の表現なので意外と問題なかったのだけれど、numpy.arrayなどと一緒に使ったときに変な出力になって…
cookiecutterのプロジェクトテンプレート上でsnakecase,kebabcase,camelcaseの変換のjinja2フィルターが使いたくなった。 cookiecutter? scaffold用のツール。たぶん今の所python界隈で一番メジャー。 github.com このcookiecutterのscaffoldの最中で良い感…
pypiにuploadした時に以下のようなエラーが出た。 $ python setup.py sdist bdist_wheel $ twine upload dist/<package> ... HTTPError: 400 Client Error: The description failed to render in the default format of reStructuredText. See https://pypi.org/help/</package>…
github.com はじめに 有効な値を頭の中に記憶して置かなければいけないインターフェイスはツライという話。 そんなわけで、kamidanaでもextensionsとadditional modulesについて組み込みのものの情報だけは表示してくれるようにしてみた。 extensions extnes…
例えば、lib2to3 packageは Grammar.txt というテキストファイルを持っている。 $ pwd /usr/lib/python3.7/lib2to3 $ tree -I "*.py*" -L 1 . ├── Grammar.txt ├── Grammar3.7.3.final.0.pickle ├── PatternGrammar.txt ├── PatternGrammar3.7.3.final.0.pic…
手元の環境がものすごく汚いことがある。例えば以下の様に複数のprojectの依存が混ざってしまった状態。 requirements.txt # app1 の依存 flask peewee wtforms # app2 の依存 pyramid mako sqlalchemy # (後で使う) pipdeptree これをきれいに2つに分けて…
はじめに あるサービスでページの状態をURLとして共有するときに以下の様な形で表現されていた。 http%253A//example.net%253Bstate%253D%257B%2522x%253A%2522%253A%252010%252C%2520%2522y%2522%253A%252020%252C%2520%2522name%2522%253A%2520%2522hello%…
はじめに pythonでsubprocessを使ってあれこれする方法をイディオム的に覚えておくと便利なのでまとめておく。 できること(やろうとしていること)は以下 stdoutを文字列として受け取る 文字列をstdinとして渡す stdoutをiteratorとして受け取る (その前に)…
はじめに pytestのpluginをどこまで使うかを考えるのがめんどくさくなったりした。 個人的にはそれぞれのタイミングで必要になったらはじめて手に取るべきで、あまり最初から導入するようなpluginは思いつかなかった。必要になったタイミングで追加して手に…
github.com loadfile(),dumpfile()がほしくなったので追加した。 jqfpy jqfpyは、 jsonをparseするためにDSLを覚えるのがめんどくさい(jq)。 各自自分の慣れた言語のワンライナーで十分なのでは? という発想のもとのpackage(自分はpython)。 重要なことは誰…
python2.xのサポートが2020-01-01T00:00:00でおわるということで、最近は drop python2 というようなissueも増えてきています(node-gypはどうするんでしょうね..)。 そのようなissueの中で、使われているversionの情報を調べて共有しくれたりする人がだいた…
最近は設定ファイルだけではなく環境変数で設定を渡すことがけっこうある(コンテナ的な文脈だったり、12 factor app的な文脈だったり色々)。自前で頑張っても良いけれど。自分でコードを書かずに済ませたい。 何か良いライブラリは無いかなと探してみたらあ…
github.com 背景 jsonschemaやopenAPI documentを触っている時に、時折、例としてあげられるファイルが巨大でインデントなどの対応を把握するのが辛くなることがある。 自分で書く場合には複数のファイルに分解された状態で書くので問題ないのだけれど。 手…
makeファイルはデフォルトではhelpが存在しない。bashの補完の設定などを入れているとタブで利用可能なタスクの一覧が出る環境もあるが、その設定もしていない場合には利用可能なタスクの一覧も表示できない。 タスクに対するcommentの流派 似たようなことを…
横着な人(自分)のためのpipのメモ。 試行錯誤のためのフレッシュな環境が欲しい 正に今がそれ。pipの実行を試すために /tmp/foo に仮想環境を作る。 $ mkdir -p /tmp/foo $ python -m venv /tmp/foo $ cd /tmp/foo activateせずに直接./bin/pipや./bin/pytho…
たまに欲しくなるのでメモ。やっていることはエスケープシークエンスでN行戻った行頭に移動して現在のカーソルから端末の終端までクリアを繰り返しているだけ。 progress bar ちょっとしたプログレスバーの表示。ふつうにやる分にはtqdmを使ったほうがお手軽…
github.com 昨日の記事でjoと比較してみたのだけれど。ネストが深いJSONを作るのは楽でも、同じ階層の複数フィールドに値をもたせたJSONを作るのが大変だった。癪だったのでblockという概念を導入してみた。 同じ階層に複数のフィールド 例えば以下の様なJSO…
github.com jo JSONをコマンドラインから作るコマンド。 github.com joの例を翻訳してみる joのページにある例を翻訳してみる。 簡単な例。 $ jo name=Jane {"name":"Jane"} $ dictknife mkdict name Jane { "name": "Jane" } コマンドを使った例 $ jo time=…
asyncioを使っていて、awaitableな関数群で構成されていないコードセットを無理やり非同期化してお茶を濁す時にrun_in_executor()が使われる。 ただしこのrun_in_executor()を使っても上手く処理を別スレッドに逃がせずという事態に陥ることもある。その理由…
標準ライブラリだけでpythonモジュールを設定ファイルとして使う方法のメモ。importlibの関数を使う方法もあるけれど。たまたまrunpyというモジュールも発見したのでそれのメモ。 pythonモジュールを設定ファイルとして使う pythonモジュールを設定ファイル…
github.com JSONのマージ dictknifeにはcatというサブコマンドがあり、これに複数のファイルを指定すると良い感じにマージしてくれる。 例えば以下のような2つのjsonをマージしてみる(mkdictはjoのようなコマンドラインでJSONをつくるための便利コマンド。フ…