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

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が混ざった比較が面倒だなーと思いました。 昔こんなことを考えていたのだなー。色々とまだ難ある。

hidoi_code シミュレータ

ひどいコードってこうやって出来ていくんですね。 (randomでやっているので、時々そんなにひどくないコードになることもあるのが秀逸?な気がしています)

context managerで遊ぼう。indentをする構文

制限された文字列が欲しかった SymbolPool

foo.bar.booとかokにしようとすると途端に大変になる。

makoの <% と<%! を意識して使いましょう

<%! はコンパイル時に評価 <% は実行時に評価 ブロックの中での扱いも違う。

prototype baseは継承ではなく移譲が主?

prototype baseの方が移譲書きやすいよねという話。 転じて。pythonでちょっとおかしな挙動をするコードを書きはじめた。

lxmlでnamespace付きのtagを指定する必要が有ることがある

ハマったのでメモ。lxmlでxml系のファイルを扱うとき、タグ名に加えて名前空間も指定する必要があったことがあった。どうやって指定すれば良いか分からなかったのでハマった。

doctestってどうやって使うの?

pickup.el書いた

emacsでvirtualenvとbuildoutでツクッタpythonを呼ぼうとするときに必要になった。 考え方は単純で「現在の位置から親を再帰的にたどり望みのパスのコードが無いか調べる」というもの。 例えば cwd = ~/venv/foo/bar/boo/bee/boo.py を編集している時、おそ…

任意の式をRPNで表す

DBSession.query(A).join(B, A.b_id==B.id).filter(A.create_at > month_ago) みたいなものをGETパラメータで指定したいと思った。 RPNっぽい感じのスタック言語のようなもので表せば出来そうという実験。 rootとなるobjectから辿れる全てのメソッドが実行で…

python2.xでclassの構文中の順序を保持したオブジェクトを作成する。

python3.x以降でなければできないと思っていました。sqlalchemyやcolanderのコードを見ると2.x系でのやり方が分かります。 基本的な考え方は以下です。 以下の2種類のクラスを用意します。 container class field class 肝はfield classです。これをが使われ…

pycon apac 2013で発表してきました

unittest.mockの発表してきました。 発表資料 http://podhmo.github.io/pycon/slide/index.html?transition=none#/ 個人的には、スライドに載せたコードのみで完全に動作するmockのサブセットが作れたので満足です。

インデントについて雑感

関数型言語と呼ばれるものを触っておくと良い理由について 変わったパラダイムや考え方を学ぶと良いと言われるけれど。 再帰 高階関数 (型システム) etc.. 本当にこういうことを学べるから素晴らしいのだろうか。 一昔前に「lispを学ぶと悟りを開ける」と言…

venusianなくてもよいんじゃないの?

pyramidはviewの登録にvenusianを使っている。 venusian? venusianとは何かというと、 decoratorとして呼ばれた時には何の影響も与えない。クロージャを登録する scan()が呼ばれたタイミングで、登録されたクロージャを実行する というもの。 これを使って、…