python

pipenvの起動を早くしたという話のimport timeの確認を3.7以前の頃はどうしてたかという話

pipenvの起動を早くしたという話です。良い話ですね。 https://dev.to/methane/how-to-speed-up-python-application-startup-time-nkf ところでリンク先の記事はpython3.7で導入されるPYTHONPROFILEIMPORTTIMEの紹介なのですが。古の民(3.7以前の人々)はどの…

個人的なpythonのformatter(yapf)のコマンドをpypiにuploadした。

個人的なpythonのformatter(yapf)のコマンドをpypiにuploadした。githubにだけおいておいてインストールするのが結構めんどくさくなったので。とは言え個人的なものであることは間違いないのでなるべく名前がかぶらないようにユニークなprefixなどを付けて公…

新年最初のコードはalchemyjsonschemaを1年ぶり位に弄ることだった

新年最初のコードはalchemyjsonschemaを1年ぶり位に弄ることだった。 alchemyjsonschema sqlalchemyのmodelの定義から対応する感じのjsonschemaを生成するコマンド(ライブラリ)。去年くらいにjsonschemaではなくswaggerをdefaultにした。 やったこと やった…

今年作ったgithubのrepositoryを調べる

もしかしたら今年も作ったrepositoryを振り返えったりするかもしれないので。そのメモ。 今年作ったパブリックなrepositoryの一覧を手に入れる方法について。 setup 残念ながら依存関係があるので以下のインストールが必要。 pip instlal httpie jqfpy 今年…

reqtraceにrequestを良い感じに返す機能を追加した(httpbin的なもの)

github.com reqtraceにrequestを良い感じに返す機能を追加した。https://httpbin.org/ のようなもの。 直接何か色々触りたいときとかに欲しくなったりするので。 server 44444で立ち上げる。portを指定しなかった場合にはテキトウに空いているportを探す。 $…

reqtraceというものを作り始めた

github.com reqtraceというものを作り始めた。まだ作り途中なのでpypiなどには公開していない。 これは何? mock serverへrequestをすげ替えてreplayしたい reqtraceはrequest tracerの略。http requestとresponseをtraceしたいというのが目的。本来こういう…

jqfpyのgetにちょっとだけ機能を追加した `get('[]/x/ys[]/z')`。

github.com jqfpyのgetにちょっとだけ機能を追加した。具体的には、入力がリストの場合の処理を追加した。 例えば、こういうデータのnameだけとか。skillsのnameだけを取りたい場合にリスト内包表記になってしまうのがちょっとだけだるかった。 [ { "name": …

context managerの`__enter__()`の呼び忘れを防ぎたい

はじめに context managerの__enter__()の呼び忘れを防ぎたい # こちらは正しい __enter__()が呼ばれている。 def ok(): with f(): do_something() # こちらはだめ def ng(): f() # 警告を出したい 方針 これはおそらくあんまり方法がなくって。gcに回収され…

メソッドを置き換えたmockをもう少しstrictにしてみたい

メソッドを置き換えたmockをもう少しstrictにしてみたい。mockのpatchなどでobjectを置き換える時に属性の存在まではspecやspec_setで対応できるのだけれど。メソッドのsignatureまで含めて置き換え前のものと同じかどうか確認したい。 例えば、存在しない属…

dictknifeにdictmapを追加してみた

github.com はじめに dictknifeにdictmap()を追加してみた。 round dict 例えばstack overflowのこの質問に対する回答がシンプルになる。 https://stackoverflow.com/questions/32434112/round-off-floating-point-values-in-dict これを d = [ { 'A': 0.700…

標準ライブラリの範囲でpythonでweb APIのmock serverが欲しくなった場合

mock serverが欲しい web apiのmock serverが欲しくなることがある。結構その場その場で欲しくなる機能というのが微妙に違ったりするので毎回そらで手書きする事が多い(本当は上手に抽象化できるのかもしれないけれどできていない)。今回の機能は以下の様な…

csvのheaderを気にしてOrderedDictで読む方法

問題 例えば以下のようなcsvがあるときに、読み込んだ後にcsvのheaderの順序を保持してほしいという場合がある。 "age" "name" "20" "foo" カジュアルに以下の様なコードで読んだ場合に順序は不定。 import csv import sys r = csv.DictReader(sys.stdin, de…

logging入門

長すぎにならない程度に使い方をまとめてみる。 loggingの使い方 ライブラリの利用者 既に存在するアプリを実行するファイルの場合 if __name__ == "__main__": import logging logging.basicConfig(level=logging.DEBUG) # or INFO or WARNING or ERROR run…

marshmallow-polyfieldを使ってoneOf的な構造のdataを扱う

はじめに 例えば、以下のよう1つのfieldに複数の形状の値が入ることがある。そして、その形状を決めるためにtypeなどfieldを含まれているJSONがあるとする。 以下の様な感じ(下の例では、personとgroupという2つの形状がobに入る可能性がある)。 { "ob": { …

marshmallowで相互排他的なfieldを定義する方法

はじめに こういうJSONを許したい。 { "left": { "name": "foo", "value": 100, } } あるいはこう。 { "right": { "name": "foo", "value": 100.0, } } left,rightというfieldの内どちらか1つだけ値が入るデータをvalidとしたい。例えば以下はダメ。 {} これ…

pythonのunittest用のmarkerライブラリを作りました

github.com pythonのunittest用のmarkerライブラリを作りました markerライブラリ? 特定のテストケースにマーカーを付けるためのライブラリです。 例えば、実行に時間がかかることが多いdbを利用したテストにマーカーをつけておいて、そのテストを避けてテ…

marshmallowでschemaに制限を加えてみる

marshmallowでschemaに制限を加えてみる。この制限をprotocolと呼ぶとしてこのprotocolの実装をどうするかと言うとこんな感じ。 marshmallowの流儀に従うならSchemaOptsを拡張するのが自然そう。 marshmallow_protocol.py class CustomOpts(SchemaOpts): pro…

kamidanaにバッチモードをつけてみた

github.com kamidanaにバッチモードをつけた。これは実験的な機能でまだmasterにはマージされていない。 やっぱり一回のコマンドで終わらせたほうが早いので欲しくなってしまった。 ただまだ見通しが良い感じにできていない(そういう意味でもまだ実験的)。 …

singledispatchとjson.dumpが相性良いかも?

jsonのencodeエラーについては昔に書いたこの辺を見てもらうとして。 pythonでjson出力する際で対応していない型(e.g. datetime)の値を変換しながら出力したい - Qiita 今回の主題は、json.dumpsに渡すdefaultの関数としてfunctools.singledispatchが有用か…

jqfpyにchunkを追加した。直接batch requestを叩けるように(続く)。

github.com jqfpyにchunkを追加した。直接batch requestを叩けるように。ただまだ機能は不足しているような気がする。試しにelastic searchのbatch apiを叩いてみようと思ったけれど。まだ足りなそうな感じ(続く)。 欲しくなった理由 例えばテキトウなJSON…

JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。

github.com 集合演算を手軽にやりたかった。 以下のようなxs.jsonとys.jsonに対する集合演算をやってみたい。 $ echo '[1,2,3,4,5]' > xs.json $ echo '[2,4,6,8,10]' > ys.json 意外とコマンドライン引数に渡して、それに --slurp をつけてリストとして扱う…

jqfpyのgetを強化してみた([],*,*[])

github.com jqfpyのgetを強化してみた。具体的には、<attirubte>[],*,*[]という表記が増えた。 ショートカット用の機能が増えたので、学習コストは上がっていき(?)、当初の想定とは異なりどんどんjqに近づいていっているということがないわけではないのだけれど。 (当初</attirubte>…

jsからpythonに翻訳する過程で気づいた__new__の使いみち(追記:ダメだった)

github.com http://pod.hatenablog.com/entry/2017/09/14/020740気づいたのだけれど。 jsのちょっとした記述をpythonに直す時に、今まであまり使わなかった__new__()が使える箇所があるかもしれないと思った。 具体的な話 例えば、以下の様なコードがあると…

python-semver久しぶりに更新した

github.com 昔に作っていたnpmのsemverのforkを更新した(昔とは3年前のこと) そもそもひとつだけテストずっとコケていたとか、ciもなかったという感じだったので、travisの設定をするところからスタートだった。 結局何が違うのかといえば、どこかのタイミ…

jqfpyでyamlを実験的にサポートしてみた

github.com jqfpyでyamlを実験的にサポートしてみた。実験的という言葉がついている理由は完全にサポートしているというわけじゃないということ。 具体的には、連続したjsonに対応した入力をサポートしていない(後で詳しく)。 yaml対応版のインストール yaml…

数値の合計を取るのにJSONとみなせる

以下のような数値が行毎に出力されたファイルがあり。この合計を出す時に 00data.txt 1 2 3 4 5 6 7 8 9 10 (複数の列がある中でcutなどで合計を求めたい列だけを取り出してからのsumの場合もある) 以前までは真面目にpythonのワンライナーを書いていた。他…

jqfpyを使ってswagger spec中の$refを取り出す

github.com かんたんなjqの処理はjqfpyでどうにかなるということがわかったのでもう少し複雑な処理をしてみることにした。今度はswagger中の$refを抽出してみる。 このswagger中の$refを取り出すことは意外と大変な気がしている。 そもそもjqだけでやるのは…

jqfpyというコマンドを作りました。

github.com はじまり jqfpyというコマンドを作りました。作った理由は概ねこの記事に書いてあるとおりです。 むずかしさの段階 JSONを整形したいときには概ね以下の3段階くらいの状況があるきがします。 かんたんなのでワンライナーで十分 ちょっと複雑な記…

pythonでJSONが繋がっているようなファイルを読み込む方法。

json.loadsは使えない 例えば以下の様なデータが在る場合がある。 {"name": "foo"} {"name": "bar"} {"name": "boo"} 通常の方法ではinvalidなJSONなので読み込めない。 import json s = """ {"name": "foo"} {"name": "bar"} {"name": "boo"} """ print(jso…

pythonでサブクラスを定義するときにオプションを渡せるようにしてみる

そういえば、継承時にbase classの他にオプションを取る定義が書けるのわりと最初ビックリするけれどvalidなpythonのコード。 3.6なら__init_subclass__のフックを使うのが楽かもしれない。 たとえば、以下の様なコードを書いてみる。 自身を継承したクラス…