現在時刻のような実行の度に値が変わるようなresponseを含んだAPIのテストについて

github.com 昨日に引き続きgo-webtestの話。 現在時刻のような実行の度に値が変わるようなresponseを含んだAPIのテストがしたいとする。こういう場合はそもそも固定値を返せるように依存するコンポーネントを注入できるような構成にしておくのが良い。 依存…

go-webtestというパッケージを作ってました

github.com go-webtestというパッケージを作ってました。 go-webtest? 大雑把に言うと以下のようなものの詰め合わせです 手軽にresponseを取り出せるようなclient web apiのテスト時に発生するフラストレーションを緩和するような機能 request/responseをtes…

gitで更新のあったファイルに対してformatter(goimports)をかける

CIでlintのついでにformatter(gofmt, goimports, gofumpt)がかかっているかチェックしている環境があるとする。そこでformatされていないと怒られたファイルに対してformatterをかけたい。その方法のメモ。 あるコミットで変更されたファイルを集める 対象の…

goでrequired/unrequiredに対応しつつpointerを使わないunmarshalJSONのエラーメッセージについて

昔以下の様な記事を書いていた。 goでJSONのunmarshal時のrequiredなfieldの扱いについて リンク先の記事ではpointerを使わないstruct定義に対してUnmarshalJSONを自前で定義することでどうにかやろうという感じのものだった。ただしこのリンク先の記事の実…

個人的なemacsのmajor-modeの作成方法についてのまとめ(リンク集)

なんか忘れてしまったので個人用のまとめ。おそらく他の人に役に立つことは無い。 emacswikiから major-modeを定義する方法については概ねemacswikiに説明がある。 from scratch define-generic-mode define-derived-mode define-generic-modeは新しいmajor-…

goでfunctional optionsを使う場合には、こういう感じで書かれていると嬉しいという話。

今日は素朴な話。functional optionsの利用者がこういう感じでコードを書いてくれると嬉しいよという話。 functional options ? goでわりと有名なデザインパターン(?)。 初出はこの辺り。ただ最近利用されているのはここに書かれている内容を簡略化した亜…

sqlxの使いかたを把握するための情報のメモ

sqlxの資料のメモ github.com 色々探すのが面倒なのでここにメモしておく。 godoc https://godoc.org/github.com/jmoiron/sqlx guide http://jmoiron.github.io/sqlx/ 後者はcontextの対応が含まれていないコードなので少し古いかもしれない。 はじめの一歩 …

goでcontextual logging + structural loggingする小さなパッケージを作った

github.com なんで作ったの? ちょっとした作業をするのに欲しくなったから。特にcontextual loggingの部分が欲しい。 ぶっちゃけた話structural loggingはzapを使えばおしまいで良さそうだった。ただできそうなことが多すぎそうだったので絞った。 contextu…

go-run meets pstree

以下の内容のメモ 現在の環境1で実行されるprocessの概観を掴む方法 go runがtmp directoryにbuildした結果のバイナリをsubprocessとして実行していること go runが実行するprocess 例えば以下の様なテキトウなfile serverのようなコードがあるとする2。 mai…

go用のテストライブラリを作りました(言いたいことは分かります)

github.com go用のテストライブラリを作りました(言いたいことは分かります)。 使いかたはこんな感じです。 noerror.Must(t, noerror.Equal(30).Actual(add(10,20))) noerror.Should(t, noerror.NotEqual(30).Actual(add(10,20))) 以下詳細。 motivation 元…

reflect経由でgoのmethodを呼んだり存在を確認したりする

encoding/jsonパッケージの範囲を越えてJSONと戯れようとする。動的な何かが必要になる。そしてけっこうすぐにreflectパッケージに触れることになる。触りたくないけれど触る必要がある汚泥のような存在。それがreflect。 重い腰をあげてreflectと少し仲良く…

pythonのimportシステム周りのことについてのメモ、あるいはimport fooとしたときに何が起きるかについて

あんまり丁寧に文章を書く気力が起きないので個人的なメモ。pythonのimport周りの話。(最後の実行例のgistはこちら) (追記: 結局それなりに長くなった) 当初のお気持ち import fooがどうなるかみたいな話、そういえば発表のお題としてはけっこう良かったかも…

コードに言及する時にdocstringではなくsummaryを表示するようにした

github.com 前回の記事であげた気になっていた点のうち1つを直した。それはdocstringが長すぎるという問題。 長いdocstringは引用したい部分自体の意図を弱めてしまう。完全に使い方の問題だけどdocstringとかが長いコードが嫌いになるかも。 今回のような…

とりあえずコードに言及するコマンドをpyinspectに追加した

昨日のこれらの記事の暫定的な実装をpyinspectに追加した。 もっとコードに対して言及して記事を書きたいという話 特定のコードの特定の箇所を引用して言及したいという話 github.com $ pyinspect quote starlette.endpoints:L99 ~/venvs/my/lib/python3.7/s…

特定のコードの特定の箇所を引用して言及したいという話

前回の記事の続き 前回の記事で、以下のようなことを言っていた。 そしてわかりやすさを考えると、「どのクラスのどのメソッドの中のどの箇所か?」という形で表現したい(今回の場合は「WebSocketEndpointのdecode()メソッドのjson.loads()部分」という形)。…

もっとコードに対して言及して記事を書きたいという話

ちょっとノルマ1が迫ってきているのでたまには自分の頭の中にあることをdumpする形でノルマを消化する。 頭の中の風景 色々な人が色々なブログとの付き合い方をしていると想う。自分自身のこのブログへの付き合い方は基本的には備忘録的な意味合いが強い感じ…

.gitattributesをいじって特定のファイルをgithubのPRのdiffの対象から外す方法のメモ

.gitattributesをいじって特定のファイルをgithubのPRのdiffの対象から外す方法のメモ。 TL;DR .gitattributes <隠したいファイルのディレクトリ>/* linguist-generated はじめに 例えばコード生成をしたり、利用の過程で複数のファイルを1つにまとめたファ…

ioknifeというパッケージを作りはじめた

github.com はじめに ioknifeというパッケージを作りはじめた。日常生活におけるちょっとしただるさを改善するようなコマンドを用意したいという思いで。 基本的にはioknifeというコマンドの中に色々欲しくなったらサブコマンドを追加していくというような方…

pythonのunittestで自作のassertion methodを追加したときに、不要な行がスタックトレースに紛れ込まなくて良くなる方法について

pythonでassertion methodを追加したい場合はテキトウにメソッドを書いてあげれば良い。Mixinのクラスを定義してあげれば大丈夫。 組み込みのassertion methodの定義 例えば、幾つかのunittest.TestCaseに組み込みのassertion methodの定義を見て真似してあ…

jqfpyが--input-format=rawをサポートすればsed,awk的な処理にも対応できるのでは?と思ったので実装してみた。けっこう便利だった。

github.com 以前にもちょっとしたjqfpyの活用方法の記事は書いていた。 数値の合計を取るのにJSONとみなせる JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。 今回もそれらと似たような話。 --input-format=raw 0.6.0からfor…

pycommentで複数行出力のコメントをサポートした

github.com pycommentで複数行出力のコメントをサポートした。以前までは出力が複数行に渡った時におかしな出力になってしまっていた。出力されるのはrepr()の表現なので意外と問題なかったのだけれど、numpy.arrayなどと一緒に使ったときに変な出力になって…

cookiecutterのプロジェクトテンプレート上でsnakecase,kebabcase,camelcaseの変換のjinja2フィルターが使いたくなった話

cookiecutterのプロジェクトテンプレート上でsnakecase,kebabcase,camelcaseの変換のjinja2フィルターが使いたくなった。 cookiecutter? scaffold用のツール。たぶん今の所python界隈で一番メジャー。 github.com このcookiecutterのscaffoldの最中で良い感…

pypiにpackageをuploadするときに、HTTPError: 400 Client Error: The description failed to render in the default format of reStructuredText.が出た話。

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…

pythonで特定のpackageに含まれるresource(物理ファイル)にアクセスする方法

例えば、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…

汚いvenv環境からきれいなrequirements.lockを作りたい

手元の環境がものすごく汚いことがある。例えば以下の様に複数のprojectの依存が混ざってしまった状態。 requirements.txt # app1 の依存 flask peewee wtforms # app2 の依存 pyramid mako sqlalchemy # (後で使う) pipdeptree これをきれいに2つに分けて…

URLエンコードされた(?)JSONとpythonのワンライナー

はじめに あるサービスでページの状態を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を使ったあれこれ あるいはsubprocess.runのすすめ

はじめに pythonでsubprocessを使ってあれこれする方法をイディオム的に覚えておくと便利なのでまとめておく。 できること(やろうとしていること)は以下 stdoutを文字列として受け取る 文字列をstdinとして渡す stdoutをiteratorとして受け取る (その前に)…

pytestのpluginどこまで使うか

はじめに pytestのpluginをどこまで使うかを考えるのがめんどくさくなったりした。 個人的にはそれぞれのタイミングで必要になったらはじめて手に取るべきで、あまり最初から導入するようなpluginは思いつかなかった。必要になったタイミングで追加して手に…

jqfpyにloadfile(),dumpfile()を追加していた

github.com loadfile(),dumpfile()がほしくなったので追加した。 jqfpy jqfpyは、 jsonをparseするためにDSLを覚えるのがめんどくさい(jq)。 各自自分の慣れた言語のワンライナーで十分なのでは? という発想のもとのpackage(自分はpython)。 重要なことは誰…