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

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

FormとSchemaの違いvalidation編

FormとSchemaの違いvalidation編 FormとSchemaの違いをプレゼンテーション側からみた話を前に書来ましたが validation側から見た場合にも両者は違うようです。 エラー時にSchemaは元の入力値を捨てても良いが、Formは元の入力値にアクセスできることが重要 S…

marshmallowのdumpをupdate_fieldsを指定せずに使うと型の調査が入るので遅い。

http://marshmallow.readthedocs.org/en/latest/api_reference.html#marshmallow.Schema.dump update_fieldsという引数がdefaultでTrueになっていて。これは値のtypeを見て、変換する関数を変えている。具体的なmappingはmarshmallow.schemaにかかれていて以…

marshmallow-formにform-factoryが誕生しました。Nestedなフィールドのmany=Trueが有効になりました

marshmallow-formにform-factoryが誕生しました。Nestedなフィールドのmany=Trueが有効になりました。 今回の主な変更点は以下の3つです 必要なら 各フィールドに描画関数を設定することができるようになりました form_factoryが使えるようになりました(exp…

marshmallow-formにfrom_objectを追加しました。

marshmallow-formにfrom_objectを追加しました。 今まで受け取る値が辞書だけでしたが。ORMのmodelなどオブジェクトを受け取りたい場合があります。 そのような場合に対応するためにfrom_objectを追加しました。 以下の様にして使います。 import marshmallo…

marshmallow-formのvalidation部分の機能を修正しました。

marshmallow-formのvalidation部分の機能を修正しました。 昨日時点のままでも以下の様なコードは動いていました*1。 from marshmallo.validate import Length class AuthenticationForm(mf.Form): name = mf.String() password = mf.String(Length(5)) pass…

marshmallow-formに継承の対応とlayoutシステム付けました

marshmallow-formに継承の対応とlayoutシステム付けました。 marshmallow-form に以下のような機能を付けました。 継承の対応 ネストしたフォームを順序付きで利用 Layoutシステム 今回一番の変更はLayoutシステムな気がします。 継承の対応 むしろ無かった…

marshmallow-formというもの作っています

marshmallow-formというもの作っています(wip) marshmallow-form というもの作っています。これは、marshmallow をフォームライブラリっぽく使えるようにラッピングしたライブラリです。 フォームライブラリとは フォームライブラリとはhtmlのフォーム要素を…

pythonで動的に生成したモジュールをキャッシュする方法

pythonで動的に生成したモジュールをキャッシュする方法 pythonで動的に作ったコードから生成したモジュールをキャッシュする方法について調べたのでまとめました。 bytecode経由でキャッシュする方法 tempfile経由でキャッシュする方法 ちなみにこれはテン…

kamoというテンプレートエンジンを作ろうとしてみました

kamoというテンプレートエンジンを作ってみました kamo というテンプレートエンジンを作ってみました。まだ開発は途中なのですが、だいたい1日位でそれなりに動くテンプレートエンジンが作れるものなんだな〜と思ったりしました。文法的にはおおよそmako に…

astモジュールを使ってあるモジュールの変数名を抜き出す。

NodeTransformerというvisitorが用意されているのでこれを使うのが一番楽 import ast import inspect class CollectVarname(ast.NodeTransformer): def __init__(self): self.r = set() def visit_Name(self, node): self.r.add(node.id) def collect_varnam…

filegenを使ったscaffold scriptの作成のしかた

filegenを使ったscaffold scriptの作成のしかた filegenでscaffold用のスクリプトを生成する方法は以下のようなコードを書く。 filegen_script.py # -*- coding:utf-8 -*- from filegen import Filegen from filegen.asking import AskString def gen(): fg …

filegenでscaffold scriptを作れる様になった

以下の様なことが出来るようになった filegen.packageが簡単なpython packageの雛型を持つようになった filegenに非依存なscaffold commandが生成出来るようになった。 python packageの生成 filegen.packageを呼び出すとpython packageのscaffoldとして機能…

djangoとsqlalchemyでunion allで繋げるようなものを参照・更新含めて考えてみた

djangoとsqlalchemyでunion allで繋げるようなものを参照・更新含めて考えてみた。 はじめはdjangoのormでviewを使った方法を考えて、ちょっとしたことからdjangoが思いもしない挙動をしたのでsqlalchemyではどうだったのか確認しようとした。 状況説明 以下…

python3の環境でpygraphvizをインストールしようとしてみた時のメモ

macのpython3環境でpygraphvizをインストールしようとした時のメモ 事前にmacportsでgraphviz-develをインストールしておきます。*1 sudo port install graphviz-devel 前提の環境 $ python -V Python 3.4.2 試しにpip でinstallしようとする 試しにpipでイ…

djangoでのテストデータの生成方法について考えてみた

djangoでのテストデータの生成方法について考えてみた。 集計や検索などのテストが辛い 今までdjangoでテストデータを作ってきてfactory boyを使ったテストを前提にするというのがあったのだけれど。 これは、必要となるモデルの数が少ないものでは上手くい…

srcgenを止めてprestringというライブラリを作り始めました。

srcgenを止めてprestringというライブラリを作り始めました。 ここ最近srcgenを使って遊んでたんですが、色々と思う所があったので自分でライブラリを作りました。 srcgenの素晴らしいところ インデントを含んだ構造をすごい手軽に記述できるのが良いです。 …

pythonのnamedtupleについて見過ごしてきたこと

pythnonのcollectionsにnamedtupleがありますが。コレについて見過ごしてきたことがありました。以下のようなコードがTrueを返してしまいます。 from collections import namedtuple Foo = namedtuple("Foo", "name value") Bar = namedtuple("Bar", "name v…

filegenという小さなライブラリを作りました

filegenというものを作りました。 filegenというものを作りました。特定のファイル構造を生成する処理の記述を簡略化するための小さなライブラリです。 (python3でしか確認していないのでpython2だと動かないかもしれないです) 動機 元々、コレ単体で使うつ…

この何日か特定のメソッドのセットを必ず呼び出すことについて悩んでいた。

この何日か特定のメソッドのセットを必ず呼び出すことについて悩んでいた。 この何日か特定のメソッドのセットを必ず呼び出すことについて悩んでいた。 ある処理が複雑になった時に、ちいさな処理に分けることがある。そしてユニットテストでは分けた範囲で…

srcgenが何かに使えそうだと思っているのだけれど。どうしたら便利なのかという答えは出ていない

srcgenが何かに使えそうだと思っているのだけれど。どうしたら便利なのかという答えは出ていない srcgenというパッケージがあって。これが個人的には結構面白い機能を持った ライブラリだと思っているのだけれど。良い使い方というのが見えていない。 srcgen…

pythonで評価器的な物を書いて昔を懐かしんだ。

昔こういうの書いてましたね。 以下のような感じで実行する感じです。 # 10 Application.run([Value(10)]) # 10 + 20 Application.run([BOp("+", Value(10), Value(20))]) # x = 10; x + 1 Application.run([Assign("x", 10), BOp("+", Var("x"), Value(1))]…

ppic 機能追加しました。

昨日作っていたppicに機能を追加しました。現在の最新は0.2.5です。追加された機能は以下です。 --stable-onlyオプションを追加しました。 --allオプションはdeprecatedになり--installedオプションになりました 一定時間(deaultは10分)各packageの情報のjso…

djangoのviewとurl patternの定義をもう少しstrictな感じにできないかと考えていた

まとまってない感じの文章だけれど備忘録として残す。 djangoでurls.pyにview関数を登録する時に、以下のような状況がだるいと思った。 urls.pyに定義したview関数を登録し忘れる view関数の引数を変えた後に、urls.pyのpatternを変更し忘れている そしてそ…

ネットワーク越しに送られてくるzipfileを一時ファイルを作成せずに展開した結果が欲しかった。

話す内容 http requestのresponseがzipファイルで返ってきていた。 pythonのzipfileモジュールはseek()が無いfile like objectに対応していない 一時ファイル作るのだるい。 どうしよう。 そういう感じで、ネットワーク越しに返ってきたzipファイルを直接展…

log出力に現在時刻を含める

log出力に現在時刻を追加したかった。 formatterに"%(asctime)s"を渡せば良い。 https://docs.python.org/2.7/library/logging.html#logging.Logger.debug 出力結果 2014-11-10 09:17:46,154 This message should go to the log file 2014-11-10 09:17:46,15…

asyncioで実行されるタスクの実行順序の制御について

asyncioで実行されるタスクの実行順序の制御について asyncioのドキュメント を見ると、asyncio.asyncを使う際には、yield fromを忘れると終了を待たずにつぎの処理が実行される。このため以下の様な不具合があるというようなことが書かれている。 実行順序…

jsonschemaのこと

jsonschema sum typeっぽいもの欲しくなる事がある— SyntaxError x = 'y', (@podhmo) 2014, 7月 2 jsonschema 順序保持できるような何か欲しい。(arrayにしたら全部string typeとかになる)— SyntaxError x = 'y', (@podhmo) 2014, 7月 2 jsonschema、別々の…

部分適用とその親類とschemaのfieldの作成

部分適用とその親類ととschemaのfieldの作成 高階関数はストラテジーパターンの単純系というようなニュアンスで捉えてたりしたのだけれど。 あるいは、1つの用途のものが関数。用途が複数になり始めたものが状態を共有したくなったらオブジェクト 。など。…

pythonでも|>的なパイプラインの記述をやってみたくなった。

昔pipeというパッケージを見たことがあり。それはrorを定義したオブジェクトでwrapすることで実行順序を左から右的なものに変えていた。 そのライブラリでは、直接的には値の変換しか行っていなかった。 なんとなくmaybe的なchainにしたいと思って書いたのが…

pytestでparametrized testを書こうとした時にハマったのでメモ

ドキュメントしっかり読んでその通りに扱えばハマったりしないのだけれど。 pytest.mark.parametrizeに渡す文字列の部分が変更されて渡されるので形式を同じにする必要があった。 Parametrizing fixtures and test functions http://pytest.org/latest/param…

what is Query.with_entities()?

what is Query.with_entities()? sqlalchemy でwith_entitiesのこと聞かれたので日記に書いてみる。 short answer queryの主体を変えるもの。(Select部分の書き換え) 例 A.query.filter(A.b_id==B.id).all() # => [A,A,A,A,A] A.query.filter(A.b_id==B.id).…

pyramid_bubblingというものを作った

pyramid_bubblingというものを作った。 まだpypiにはあげていない。 https://github.com/podhmo/pyramid_bubbling 何これ? いわゆるイベントのバブリングを実装したかった。ルーティング イベントとも言われるかもしれない。 オブジェクト間の関連を木構造…

inkscapeに付属していたpython.exeが実行できない -- "指定されたプログラムは実行できません"

inkscapeに付属していたpython.exeが実行できない "指定されたプログラムは実行できません" と表示。 システムログを見る。 スタートメニュー>コントロールパネル>管理ツール>イベントビューア>システム 従属するアセンブリ Microsoft.VC90.CRT を検出できま…

memo python3のvenv環境作成

python3の環境 pyvenv my3 cd my3 curl -L https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -0 > ez_setup.py ./bin/python3.3 ez_setup.py ./bin/easy_install pip お試し ./bin/pip install pyflakes ./bin/pip freeze ./bin/python -c …

sqlalchemyでdb engineを使い分ける。

時折永続先を切り替えた形でテストしたい場合があり。 その時にどうすれば良いか分かっていなかったので調べた。 scopedsessionを使う場合と使わない場合で異なる。 swap_db_sample.py https://gist.github.com/podhmo/6990194

twitter test. int(True) and int(False)

int(True) => 1 なのかー。 http://t.co/DlW8pWYDp2— podhmo (@podhmo) 2013, 10月 1 @esehara なるほど。 bool演算的なものを加算にしたいときなどですかね。ちょっと思いつきませんが >>> sum(map(lambda x : int(bool(x)), [object(), None, object(), No…

formのvalidationでNoneが混ざった比較が面倒だなーと思いました

formのvalidationでNoneが混ざった比較が面倒だなーと思いました。 昔こんなことを考えていたのだなー。色々とまだ難ある。