読者です 読者をやめる 読者になる 読者になる

pyramid-swagger-routerと一緒にtoyboxのswaggerのvalidationを使ってみる

相も変わらずtoyboxというリポジトリで作業していた。昨日試しに作ってみたswaggerのinput,outputのvalidationを行うものを昔作っていた pyramid-swagger-router と一緒に使ってみるようにしてみた。ココまで来るとそろそろswaggerに対するnormalizer + iter…

生成したmarshmallowのschemaをwrapしてpyramidから使えるようにしてみた

swaggerからmarshmallowのschemaを生成する機能は昔から作っていて、デフォルトでは definitions 部分だけしか見ないのだけれど。--full というオプションをつけると paths 以下の parameters や responses も見るようになっている。ここで生成したschemaをp…

1ファイルでapi serverを作る用の環境を整えていた

個人用のメモです。 はじめに 手元で色々弄る用に1ファイルでweb serverを作る用の環境を整えていた。1ファイルが良い理由はいろいろな試行錯誤をするための実験をしたいからです。 pythonで使うwebフレームワークとしてはpyramidが好きなのですが、ところど…

1ファイルのアプリでview_configを使う。

誰も特をしないpyramidの話。 pyramidのconfiguration pyramidにはすごく雑にいうと以下の2つのconfigurationの方法がある。 declarative configuration imperative configuration すごく雑に言えば、declarative configurationはデコレーターを使った設定(…

最近pythonでcliのコマンドを作る時にやっていること

最近cliのコマンドを作る時にやっていることをまとめてみる。ここでのコマンドは特にパッケージとして提供されるシェルなどから実行されるコマンドのことを指している。 何が問題? 特にパッケージの提供者とパッケージのユーザーの望みが全く乖離せず一致し…

swagger-marshmallow-codegen でpaths以下も見るようにした

swagger-marshmallow-codegen でpaths以下も見るようにした。あまりきれいとはいえない感じかもしれないけれど。 paths以下を見るということ 今まではdefinitions以下しか見なかったのだけれど。通常swaggerでapiの定義をするときにはpaths以下にも色々書く…

signal handleするコードのテスト

はじめに signalをhandleするコード自体は手軽に書ける。 import signal import sys def on_sigint(signum, frame): print("hmm") sys.exit(1) signal.signal(signal.SIGINT, on_sigint) しかしこれが確実にtrapされたことを確認するテストを書くのはだるい …

swagger-marshmallow-codegenでカスタマイズ出来るようにした

swagger-marshmallow-codegenで簡単なカスタマイズ出来るようにした。 例えば以下の様なことができるようになった defaultで使うschema classをMySchemaに変える 特定の条件を満たした値のときには自分で作った独自のfieldを使うように変える ただこれらはす…

こういうちょっとしたデータの受け渡しどうするんだという話

はじめに 今自分で作っている dictknife というリポジトリについにコマンドを追加してしまった。 色々あるのだけれど。今回は dictknife transform の話。 transform 何かしらの形状の変換をしたいことがある。 例えば、こういう入力を受け取って、 properti…

pyramid-swagger-routerというパッケージを作りました

pyramid-swagger-router というパッケージを作りました。swaggerの定義ファイル(swagger.yaml)からpyramidのviewの定義のコードを生成するパッケージです。 特徴 特徴は、pyramid-swagger-routerという名前でありながら router に値するものが何もないという…

swagger-marshmallow-codegen というライブラリを作りました

swagger-marshmallow-codegen というライブラリを作りました。swaggerの定義ファイルからmarshmallow のschemaを生成するライブラリです。 ライブラリ? 正確にはライブラリでは無くコマンドです。marshmallowのschema定義のコードを生成するコマンドです。 …

最近のコマンドラインからのJSONのAPIのPOSTなどの仕方

手元の環境でweb apiを叩く処理をしたい時にどうしているかというメモ。 利用しているもの python httpie Makefile jq 本当はpipで新たにインストールしなければ行けないコマンドに頼らない形が良いけれど。curlが辛くなったというのと。curlに飽きたという…

dict遊び -- 絵を描く人の余暇のらくがきとコードを書く人の余暇の何か

[poem][python] dict遊び ポエムです。長いです。 はじめに 絵を描くことが好きだった人が絵を描く仕事につく。絵を描くことを仕事にしている人がたまたま余暇にらくがきの絵を描く。仕事でも絵を描いているのだからもう描かなくても良いじゃないかという声…

magicalimportというライブラリを作ってました

magicalimportというライブラリを作ってました。 はじめに これは何をするライブラリかというと物理的なファイル名を指定して、指定したファイルをpython moduleとしてimportするためのライブラリです。 用途 例えばconfigファイルの読み込みに便利かもしれ…

flaskでconfigファイルの指定に物理的なパスを指定できるようにしたくなったという話

はじめに flaskを使い始めたのだけれど。flaskのconfigファイルの指定が対象のflaskアプリの存在するモジュールの位置からの相対パスを指定するらしく使いづらい。 例えば、fooパッケージの中で、以下の様なコードがあった場合には、fooパッケージからの相対…

pythonのinteractive shellを終了した後 `stty sane` が必要だった問題が解決したという話

はじめに 手元の環境でpythonのinteractive shellを利用した後、コンソールで入力した文字列のエコー表示がされなくなる問題に悩まされていた。 $ python3.5 Python 3.5.2 (default, Sep 19 2016, 02:49:52) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-…

python3.5でpyobjcのコードを動かそうとしたら Symbol not found: _PyObject_REPR

はじめに python3.5でpyobjcのコードを動かそうとした際に、以下のようなエラーが出てしまっていた。 Symbol not found: _PyObject_REPR 結論からいうとパッケージが古かったので更新した。(3.0.4 -> 3.1.1) stack overflowで該当する質問 python - Symbol n…

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

django-returnfields というパッケージを作っていました。 これは何? はじめはapi responseのfilteringをするライブラリとして作っていましたが、いろいろな変更の結果あるAPIのresponseに対してそのsubsetを返すためのoptimizerのようなものになりました。 …

generic foreignkeyのsub relationをprefetchする方法

はじめに generic foreignkey 自体のprefetchはできる。しかし、その更に先のrelationをprefetchすることができない。これをどうにかしようと言う苦肉の策を考えてみたという話。 言い訳 djangoのgeneric foreignkey関連のコードを読んでみたところ綺麗にで…

もう少しだけdjangoのprefetch_relatedについて考えてみる(条件付加したrelationのeager loading)

はじめに あるモデルに対してあるコンテキスト(文脈)に従った条件を加味した関係の元に値を取り出したい場合がある。そのような条件を付加した値を仮想的なフィールドとして扱うことができないかという話。 例えば以下の事がしたい X,Yというテーブルが存在…

djangoでprefetch_relatedで使えるようになる 独自のディスクリプタを作ってみる

prefetch_relatedで使えるようになる、独自のディスクリプタの作り方 はじめに 前回の記事 で prefetch_relatedの実装にprefetcher オブジェクトとでも呼ぶようなオブジェクトが必要になるということを説明した。 今度は、prefetcherのインターフェイスを実…

djangoでヘテロなリストのprefetch (generic foreign keyのprefetch_related)

djangoでヘテロなリストのprefetch djangoでヘテロなリストのprefetch。できないと思ったら普通に出来たのでわりとびっくりしたので記事にしてみた。 ヘテロなリスト? ここでのヘテロなリストと言うのは以下のようなリストを指している。 xs = [A(), B(), A(…

外部のリソースを利用する機能の記述の仕方の話

外部のリソースを利用する機能の記述の仕方の話 (当初はテストの時の話をするつもりで書いていたが、特にテストに絞ったわけでもなくとりとめもなく書いてしまった) はじめに 外部のリソースを利用する機能を作成する際のコードの書き方について考えたりして…

asyncioのloopをどうするかということについて考えてみた

はじめに pythonには非同期用の標準ライブラリとして asyncio というモジュールが用意されている。このasyncioを使う際にevent loopの取り扱いに悩むことがあるかもしれない。どうすれば良いのかを少しだけまじめに考えてみた。 ライブラリ or アプリケーシ…

djangoでの集計は辛いという話 -- ORMは用法・用量を守って正しく使いましょう

djangoでの集計は辛いという話 -- ORMは用法・用量を守って正しく使いましょう djangoのORMの機能の不足にぶち当たり辛いという話。別の言い方をすると、ORMは用法・容量守って正しく使いましょうという感じになるかもしれない。 はじめに 以下のような情報…

久しぶりにdjangoのORMのことについて書いてみる 主に `prefetch_related()` の話

[django][python] 久しぶりにdjangoのORMのことについて書いてみる はじめに djangoのORMは正直好きじゃない。そもそも挙動が正確には把握しづらくてなんだか覚えにくいと感じる所がある。また、ドキュメントに書かれたとおりの書き方では不足することもあっ…

1ファイルでdjango restframeworkを試す

1ファイルでdjango restframeworkを試す 準備 pip install django djangorestframework 以下の様なコードを書く。test_onefile_restframework.py) 実行結果 $ python test_onefile_restframework.py Creating test database for alias 'default'... ..... --…

pythonのwsgiref でちょっとしたHTTPを話したい時に

pythonのwsgiref でちょっとしたHTTPを話したい時に pythonでちょっとした調査をしたい時に、何かパッケージを入れるのも面倒な場合に wsgiref だけですませたくなる場合がある。その時のためのmemo。 hello world from wsgiref.simple_server import make_s…

cssdiffというpackageを作りました

https://github.com/podhmo/cssdiff あとで書く

El Captainでmacportsでinstallしたpython3.4上でpycryptoのinstallに失敗する場合

pip install pycrypto 最終的に以下のようなエラー File "/private/var/folders/b7/2rk7xp2d0hb2r21zbzjwxb_m0000gn/T/pip-build-ou9ql5i7/pycrypto/setup.py", line 278, in run raise RuntimeError("autoconf error") RuntimeError: autoconf error もう少…

json モジュールについて

はじめに この記事はadventerの方のPython Advent Calendar の3日目の記事です。 (qiitaの方にもadvent calendarがあるみたいです) この記事ではpythonの標準ライブラリの jsonモジュール について書くことにしました。advent caledarで何を書くか少し迷った…

pythonでcsvファイルの読み込みをちょっと便利に扱う方法を考えてみたりしてた

pandas使えば良いというのはあるけれど。csvファイルの読み込みにはcsv moduleを使う。 はじめに 対象のcsvは以下(csvと言いつつtsv) target.tsv hello こんにちは "hello world" "こんにちは 世界" 以下の様なコードで読める import csv with open("./targe…

ひどく自分勝手なデコレーターの作り方

はじめに デコレーターを作成する時引数を取るのか引数を取らないのか混同しやすい。 どちらであっても許容できるデコレーターがあっても良いのかもしれないというような実験 引数なしのデコレーター デコレーターを作る時まず以下のような関数に適用する引…

任意の関数にmiddleware的な何かを追加する方法

memo: 任意の関数にmiddleware的な何かを追加する方法。 例えばこういうような使い方。元となる関数fがある。 def f(x): return x * x これを以下のような呼び出し関係になるfoo,barで包んだnew_fを作りたい。 begin foo begin bar f() end bar end foo ポイ…

コマンドに全てのオプションを設定で渡すのがだるいので、設定ファイルでデフォルトの設定を指定したかった

はじめに # オプション引数がないとなんだかわからない myapp foo bar boo baz bee # オプション引数を指定できると楽 myapp --foo=foo --bar=bar --boo=boo --baz bee # でも、本当は以下の様にして使いたい myapp bee --config=~/.config/myapp argparseな…

jsonを直接引数としてコマンドラインから渡す方法を考えてた

はじめに awscliはbotocoreにコマンドラインインターフェイスを持たせるためのラッパーでしかないと考えると色々捗る気がした。 つまり基本的にはJSONを入力として取るAPIが存在してそれにより何でも操作する。 ただし、直接APIを呼ぶコードを書くのは面倒く…

jsonの順序を保ったままOrderedDictを作る

jsonの順序を保ったままOrderedDictを作る方法はobject_pairs_hookにOrderedDictを指定してあげれば良い import json from collections import OrderedDict from functools import partial loads = partial(json.loads, object_pairs_hook) data = ''' { "x"…

miniconfigというものを作っていました

はじめに 以前に、 miniconfig というライブラリを作っていたことを思い出したのですが。 あらためて見なおしてみると結構便利かもしれません。 miniconfig これはすごく雑に言うと Pyramid というウェブフレームワークの設定などをを読み取りアプリケーショ…

自然言語処理的な何かを始めようとした時に試行錯誤が辛かったのでそれなりに楽にできる環境を考えた

はじめに 久しぶりに幾つかのステップに分かれる変換が行われた結果を見ながら試行錯誤するというような作業をした。手軽に再実行などができる環境がないと辛くなってきたので、それなりに楽にできる環境を整えようとしてみた。 データの変換は幾つかのステ…

Don't writing python scripts, writing python libraries.

Don't writing python scripts, writing python libraries. はじめに pythonでscriptを書いていくだけだと辛い事が多い。 たとえ、作成するアプリでは使われないコードであってもライブラリとして作っておいた方が良い。 具体的には以下の様にする。 misc的…

htmlppという式指向のhtml用のプリプロセッサーのようなものを作っている。

最近、なんとなく htmlpp というものを作っている。 似非custom elementは式ベースのマクロである程度まではいけるのでは?ということの実験のために作っている感じ。 直接htmlファイルに対して使うというよりは、テンプレートエンジン(e.g. jinja2, mako)の…

-vvvや-qで作ったコマンドのloggingレベルを変更する斬新なコード

はじめに argparse にcountというactionがあり、これを使うと渡した同一オプションの数をカウントすることができます。 これを使って、例えば、curlやsshなどで見られる -v や -vv の記述に似せたものをやろうという話です。 基本的な考え方は以下です。 def…

shlex非常に便利

雑にシェルスクリプトlikeな構文利用したい時に使える。 >>> import shlex >>> shlex.split("""foo bar "foo bar" 'foo bar' test""") ['foo', 'bar', 'foo bar', 'foo bar', 'test'] >>> shlex.split("""foo bar "foo bar" 'foo bar' test""", posix=False)…

argparseだるいし。関数の定義からコマンド生成すれば良いのでは?

要旨は以下 関数の引数の定義から大まかなデフォルト値とコマンドライン引数を取得 sphinxのautodoc形式のdocstringからヘルプメッセージを作成 以下の様にすると greeting() が関数からコマンドになる。 # -*- coding:utf-8 -*- from cmdfromfn import as_c…

djangoのformが辛いという話

djangoのformが辛いという話 はじめに 例えば何らかの処理があるとする。それはある条件にマッチした場合にしか利用できない処理だとする。 T = TypeVar('T') class ActionDispatch(object): def test(self, x : T) -> str: return "A" or "B" or None def g…

pythonでのparepared statementのplaceholderの話

とりあえずdbapi2.0を見る。 https://www.python.org/dev/peps/pep-0249/#paramstyle 以下の様な種類の表記が使われるらしい qmark Question mark style, e.g. ...WHERE name=? numeric Numeric, positional style, e.g. ...WHERE name=:1 named Named style…

昔作ったminiadtというパッケージを更新してみた

miniadt miniadt と言う名前の通り、完全に必要な機能が揃っているというわけではないですが。昔作ったパッケージを更新してみました。 機能は限定的ですが、ある1つのsum typeに対して網羅性チェックのようなものを定義時に行いたいときに使えるかもしれま…

yapsyを使ってpythonのアプリケーションにpluginシステムを組み込む方法について

yapsyを使ってpythonのアプリケーションにpluginシステムを組み込む方法について yapsy yapsyはpluginシステムを組み込むためのライブラリ A simple plugin system for Python applications install pip install yapsy hello world 試しに以下の様なことをや…

urakataというscaffold command serverのようなものを作ろうとした話

urakataというものを作ろうとした話 OCamlをいじっていて何回同じようなMakefileを作っているんだろうというような思いが浮かんで。 scaffoldのようなコマンドを作ろうかと思ったのですが。scaffoldコマンドの管理がめんどくさい。 元となるtemplateのような…

template側で定義したmoduleをnamespaceから取り出セルようにする

template側で定義したmoduleをnamespaceから取り出セルようにする(wip) namespaceの取り出し 通常namespaceは2通りの方法でimportできる - file経由のimport - module経由のimport file経由のimportは以下の様なもの <%namespace name="mf" file="<abtstract>.mako"/> </abtstract>…