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…

dired上でvimっぽい感じでカーソル移動がしたくなった

J,Kでサブディレクトリにカーソル移動するのが便利。lがdiredのredrawと被っているのだけれどとりあえずディレクトリ上以外のときにはredrawすることにした(良い方針ではないかも)。 (defun my:dired-setup () (define-many-keys dired-mode-map `( ("[" .…

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…

テスト時のinterfaceに対するfake objectの作成にinterfaceの埋め込みを使う

過去の以下の記事の続き。 goでmockを自動生成する以外に大きなinterfaceを扱う方法を考えたりしてた この方法はたまに使われていたりする。ただリンク先の記事ではinterfaceを実装したstruct(アプリで実際に利用しているstruct)を埋め込んでいる。 これは…

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…

pkg/errorsのerrorを独自定義のerrorに使ってしまうと微妙という話

何も考えずにgoimportsで補完された結果のコードを残しておいたら、pkg/errorsのerrorが独自定義のerrorに使われてしまって微妙だった。具体的に言うと意図しないスタックトレースを表示してしまうことになる。 例えば以下の様なコードのとき。 package main…

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…

Emacsで指定したregionを標準入力として渡した結果をinsertする機能

時折、Emacsで現在のバッファにある文字列を入力として何らかのコマンドに投げて、その結果を取得したいと言うことがある。 単に結果を見たい場合には、shell-command-on-region が M-| などにbindされているので便利なんだけれど。結果を直接現在のバッファ…

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とい…

JSONをコマンドラインから作るのが面倒だったのでそれ用のコマンドを作った

github.com mkdictという名前(あとで名前は変えるかもしれない)。 使いかた すごくシンプルな文法。内部的にはshlexパッケージを使っている。標準ライブラリだけである程度手軽にシェルっぽい文法に対応できるのは便利(punctuation_charsオプションに対応…

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

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

手元のファイルのansi color codeを取り除きたい場合の関数

手元でテキトウに正規表現作っただけなのでミスっているかも。 (defun my:strip-ansi-color-region (beg end) (interactive "r") (unless (region-active-p) (setq beg (point-min)) (setq end (point-max))) (save-excursion (save-restriction (narrow-to-…

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…

mypyとTypedDictとtotalオプションについて

pythonでもdictに型を付けたいですね。一応TypedDictという型を定義したいという動きになっています。ちなみにまだこの機能はexperimentalになっているので。mypy_extensionsの方に入っています。 import mypy_extensions as mx class Pair(mx.TypedDict): l…

mypyのキーワード引数・デフォルト引数を持ったメソッドのプロトコルのメモ

デフォルト引数周りの型のことでちょっと把握できなかった部分があったのでメモ。 余分なデフォルト引数を持つ実装について 例えば、以下の様なプロトコルがあるとする。 import typing as t import typing_extensions as tx class Adder(tx.Protocol): def …

dictknifeのdiffに変更部分見比べられるような機能を追加した

github.com dictknifeのdiffに変更部分見比べられるような機能を追加した。ある意味昨日の以下の記事の続き。 dictknifeでmarkdownのテーブルの入出力に対応した - podhmo's diary 例えば以下の様な2つのJSONがあるとする 00.json { "name": "foo", "age": …

dictknifeでmarkdownのテーブルの入出力に対応した

github.com dictknifeでmarkdownのテーブルの入出力に対応した。欲しくなったので。概ねcsvと同様な形。 例 以下のようなJSONがあるとする。 data.json [ {"name": "foo", "age": 20}, {"name": "bar", "age": 21, "nickname": "B"}, {"name": "boo"} ] これ…

過去に作ったpythonの関数をコマンドとして扱えるようにするライブラリを更新しました

github.com 過去に作ったpythonの関数をコマンドとして扱えるようにするライブラリを更新しました。 なんでhandfcats? 猫の手も借りたいときに使いたかったからです。痒いところに手が届くという意味では、猫の手よりまごの手の方が近いのかもしれないですが…

pythonのargparseでのファイル入出力のちょっとだけ気になる点

pythonのargparseでのファイル入出力には、ちょっとだけ気になる点があります。これはそれらについてのメモです。 ファイル入力と標準入力を一緒に使う場合 以下のような形で入力を使いたい場合があると思います。 引数としてファイルを取る ファイルが渡さ…