python

jinja2のエラーメッセージを親切にする機能を付けてみて気づいたtemplate継承の複雑さ

過去の記事でCLI用のjinja2 wrapperを書いていたという話をした。この中でエラーメッセージを親切にするということに取り組んだことにも触れた。 この親切なエラーメッセージのテストのために、jinja2のtemplate継承を試してみた所、意外と複雑な機能だなー…

jinja2用のCLIのファイルパスの解決方法を変更した

github.com jinja2用のCLIのファイルパスの解決方法を変更した。 なぜファイルパスの解決方法を変更する必要があるのか? なぜファイルパスの解決方法を変更する必要があるのか?と言うと、デフォルトの解決方法ではコマンドの実行位置に依存してしまうため…

jinja2のCLIラッパーのエラー表示を良い感じにした

github.com jinja2のCLIラッパーのエラー表示を良い感じにした。元々最近余暇に元気がなくて機能を追加したりする気が起きなかったのだけれど。それを機会に自分の作っていたrepositoryのexamplesを整理していた。そのようなことをしている最中に幾つか気に…

pythonのformatterのblackに標準入力でコードを渡す。

hmm $ pip install black $ cat 00hello.py | black No paths given. Nothing to do なるほど。ファイルの指定を"-"にして渡す。 https://github.com/ambv/black/blob/250ba7f04b300df284ba80cd4bb4122b45b41efb/black.py#L465-L467 def reformat_one( src:…

JSONの$refを見て1つのファイルにまとめるコマンドを部分的に使えるようにした。

github.com JSONの$refを見て1つのファイルにまとめるコマンドを部分的に使えるようにした。OpenAPI documentなどを書くときに使う。 いままでは全部をまとめた形でしか使えなかった。 # いままで $ jsonknife bundle --src main.yaml $ jsonknife bundle -…

複数のresourceにループで触る時にcontextlib.ExitStackが便利という話。

複数のresourceにループで触る時にcontextlib.ExitStackが便利という話のメモ。 例えば以下の様な条件で動作する処理を書きたいことがあるとする。 対象となるresource(ファイルなど)を複数取る そのうちN行までを取り出す(それ以降は読まない) 取り出した行…

ipythonのシェルのpromptをpythonのシェルの表示に変える方法のメモ

はじめに ipythonは便利なのですが、実行例などを貼り付けるときには通常のpythonのシェルでの表現に揃えたかったりします。一方でipythonのpromptには実行回数的なものが併記されるなど通常のpythonとは異なる表示になっています。 ipythonのprompt表示 In …

設定ファイル(JSON)のdiffをjson patchでやってみようという試み

設定ファイル(JSON)のdiffを手軽に分かるようになるには?ということについての探訪の1つ。文字列的なdiffの場合に意図しない余分なdiffが発生したりしていた(sort keysしてpretty printしたJSONを使えば幾文かはマシになるけれど)。それ以外の表現は無いも…

最近の砂場でのpythonのサンプルコードの実行方法について

日記的なrepositoryを作っていて、何か調べたいことがあったときにそこにサンプルコードを書いて調べたりしている。そのサンプルコードの書き方でdebugとinfoの実行形態を分ける方法が便利だったのでメモ。 趣旨 この方法の趣旨は以下のような感じ。 通常は…

pyinspectというものを地味に作っている

github.com pyinspectというものを地味に作っている。まだrepository上には一切のドキュメントがないし正式なリリースをしたというわけでもないのでしばらくは個人用。 コードリーディングのお供に 元々の動機はコードリーディングをしようとしているときに…

jediでenvironmentを指定すると、1つの実行環境(venv)で複数の環境をサポートできる話

たしか以前jediのコードを読んだ時に特に環境(venv)毎にjediを入れ直さなくても済むはずという結論になった記憶。python-language-serverのコードを読んでいたタイミングでそういえば上手く考慮できていないのでは?と思うところがあったのでPRを出したりす…

pythonのCLIでリスト選択のUIにemacs/shell風のキーバインドを追加してみる

なんとなくCLIのツールを作ろうかと思って色々試してみていた。python-inquirerというものを発見したので使ってみていた。まだこれを常用するかは決めていない(元々inquirerはnode.js用のライブラリだった模様。それのpython版がこれ。yeomanなどに使われて…

pycommentというライブラリを作りました

github.com pycommentというライブラリを作くりました。 rubytoolsのxmpfilterに似たものをpythonでもやってみたいというやつです。 install installはいつもどおりpipで。 $ pip install pycomment how to use 使いかたはpycommentコマンドを使います。する…

datacalssesのインスタンスを含んだ値をJSONにするときのメモ

いつものやつです。対応していない値をjson.dumps()に与えるとTypeErrorが発生するやつです。 TypeError 例えばこういうdataclassを定義して。 from dataclasses import dataclass, asdict @dataclass class Point: x: int y: int json.dumpsするとTypeError…

pythonのprint()をlogger.infoに変える黒魔術(loggedpy)

github.com pythonのprint()をlogger.infoに変える黒魔術(loggedpy)を実装してみた(土日)。 発端はこのtweet。 printをそのままログに出せる方法あった気がするけどなんだっけ…気のせいかな…— altnight (@altnight) September 13, 2018 意外とやってみると…

pythonで複数のhttp requestを同時に投げる方法(requests)について

時折、ちょっとしたスピードアップにhttp(https) requestを並列で投げたい場合がある。aiohttpなどを使っても良いが既存のコードを書き換えるのもめんどくさい。そのようなときの方法のメモ。 concurrent.futuresを使う方法も考えられるけれど。今回はasynci…

CSVに色を付けてみるととても見やすいという話

twitterでCSVに色を付けてみるととても見やすいという話があった。実際どうなんだろうと思ったのでテキトウに色を付けて出力してみることにした。 たしかに見やすいかもしれない。 (CSVのサンプルはこの記事から拝借) code import typing as t import sys im…

color mapの一覧をheatmapで(160個くらい画像があるので注意)

from nbreversible import code import pandas as pd import numpy as np import seaborn as sns # %matplotlib inline xs = np.arange(1, 10) ys = np.arange(1, 10).reshape(9, 1) m = xs * ys df = pd.DataFrame(m) df .dataframe tbody tr th:only-of-ty…

dataframeの表示(htmlの表示)を試す

import numpy as np import pandas as pd %matplotlib inline m = np.arange(1, 10).reshape(3, 3) df = pd.DataFrame(m, columns=["a", "b", "c"]) df .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical…

markdownで書かれたドキュメント(画像付き)を良い感じに扱うツールを作った

github.com markdownで書かれたドキュメント(画像付き)を良い感じに扱うツールを作った。名前は「書斎」から来ている。 ほしかった理由 ほしかった理由をまじめに書くと、ドキュメントにはフロー型のものとストック型のものがあり、現在の手元のツールでは…

pythonで改行をnormalizeする方法のメモ

APIはwindows向け、現状の環境はmac(ないしはlinux)みたいなことがあったりする。 こういうときには、str.split()ではダメ、os.linesepを使ってsplitしてもダメ。 素直にstr.splitlines()してos.linesepでjoinというのが良さそう。 def normalize_linesep_te…

dictknifeのmkdictでJSONを生成する時に不格好だけれど任意の配列も許すようにした

github.com 昨日のこの記事の続き。 JSONをコマンドラインから作るのが面倒だったのでそれ用のコマンドを作った - podhmo's diary 不格好だけれど、配列(pythonではlist)をサポートした。 name description xs/0/ xs[0] の意味 xs/-1/ xs[-1] の意味 xs// xs…

dictknifeのmkdictに変数を追加した

github.com 昨日のこの記事の続き。 JSONをコマンドラインから作るのが面倒だったのでそれ用のコマンドを作った - podhmo's diary 簡単な変数を使える機能を追加した。概ね以下のような感じ。 name description @ 変数に値を代入 & 変数の値を参照 例 obとい…

jqとls --colorの不思議とisatty

コマンド出力に色が着く ls --colorなどを実行すると文字に色が着く。こういうふうに。 これはjqも同じで普通にコマンドを実行すると色が着く。 pythonで これらはansi-color-code付きで出力されているので色が着く。pythonでやってみるとこういう感じ。 pri…

gcloudやgoogle-api-python-clientの使うcredentialsを見る

メモ。 gcloud sqliteにはいっているみたい $ file ~/.config/gcloud/credentials.db 2>&1| sed "s@$HOME@HOME@" HOME/.config/gcloud/credentials.db: SQLite 3.x database, last written using SQLite version 3024000 おもむろに取り出すと、access_token…

prestringの表現をASTから生成する機能を追加した

github.com 個人的にコード生成をするときにはprestringというパッケージをベースにして行うことが多い。テンプレートエンジンによるコード生成やASTを直接触る方法との差分は別の機会に書くとして今回追加しようとした機能についてまとめておく。 コード生…

pythonでescapeされた(?)文字列をunescape(?)する方法のメモ

時折変換の仕方などを忘れてしまい調べることなどがあるので。個人的なメモ。 JSONの文字列表現の文字列 JSONの文字列表現の文字列。なんて言えば良いんだろ?こういうやつ。 "{\"name\": \"foo\", \"age\": 20}" とりあえず、unicode-escapeを使ってどうに…

handofcatsでchoicesをサポートした

github.com handofcatsでchoicesをサポートした。NewTypeで作った型にchoicesというattributeを追加してあげる感じで使う(experimental)。 詳細 以下の様なコードが dump.py import sys import typing as t from handofcats import as_command def csv_dump(…

mypyのdmypyの実装のされ方を覗いてみた

mypyのdmypyの実装の仕方を把握する。知りたいことは裏側でのprocessの管理の仕方とクライアントとサーバー間のデータのやり取りの仕方。 準備 $ git clone --depth 1 git@github.com:python/mypy エントリーポイントの把握 インストールされるコマンドの確…

あとで調べる:mypyで分割代入でのエラーはtyping.Tupleなどの型のときしかみない?

以下のコードが通ってしまう。 import typing as t def f() -> t.Mapping: return {} def use() -> None: z = f() y, z = f() x, y, z = f() if __name__ == "__main__": import subprocess subprocess.check_call(["mypy", "--strict", __file__]) print("o…