python

template lookup errorを見つけるスクリプト

pyramidは、template lookup errorが起き得る状態の設定でもアプリケーションが動作する。 もちろん、動的言語的な性質を考えるとruntime errorというのが正しいという気もしないではないけれど。デプロイ前後にtemplate lookup errorが発生することが分かる…

1ファイルと1プロジェクトの中間

想定読者 pyramidの機能を色々試してみたい人 特に、設定ファイル(development.ini)を要求するコマンドの作成などをしてみたい人 発端 pyramidの機能を試す際に、1ファイルでアプリケーションが作れるのは便利なのだけれど。 pyramidで提供されているpから始…

templerのコマンドのbash completion作ってみる

はじめに templer使おうとしたけれどコマンド入力するのが面倒になったのでbashの補完を作成してみる。 step0 about complete completeという関数を利用して補完候補を設定するらしい。 bash: complete: -h: invalid option complete: usage: complete [-abc…

zca adapterとutilityのexample

ctypes入門してみた。

ctypesって? pythonのFFI用のモジュールらしい。 pythonの枠からはみ出た関数をpythonから呼び出すための接触面といった感じのもの.ドキュメントを見て、動くコードを書いてみた。 http://docs.python.org/library/ctypes.html やってみたのは以下のこと fl…

inverse fizzbuzz

まるであれな感じの汚いこーど。 どう考えても途中でしくじった感がある。

githubにパッケージ挙げる時のディレクトリ構成

悩まなくても良いようにメモ。作りたいパッケージ(パッケージ名: foo) ファイル構成(置き場所) . ├── README.txt ├── docs ├── foo │ ├── __init__.py │ ├── locale │ └── tests ├── setup.cfg ├── setup.py └── tox.ini シンプルなもの . ├── README.txt ├…

setup.py,setup.cfg, extra_require (not using pip)

e.g. colander setup.py ##... snip testing_extras = ['nose', 'coverage'] docs_extras = ['Sphinx'] setup(name='colander', version='0.9.8', ## ... snip install_requires = requires, test_suite="colander", extras_require = { 'testing':testing_e…

昨日見ておもしろかったので(auto-vivification)

直接元のgistを見ないで再現してみた。再現できていたので理解は合ってた。良かった。 code ## https://en.wikipedia.org/wiki/Autovivification from collections import defaultdict def tree(): return defaultdict(tree) def tree_as_dict(t): if hasatt…

dictをparseするコード書いた。

install $ easy_install tinyschema demo from tinyschema.schema import Schema from tinyschema import fields class Person(object): def __init__(self, name=None, age=None): self.name = name self.age = age class PersonSchema(Schema): name = fie…

ubuntuでsolr動かしてみる。

solr 全文検索エンジンのサービスを提供するサーバ(動作させるにはjetty,tomcatなどhttpserverが必要)jettyで動かしてみることにした。 agenda install jettyの設定変更 schema.xmlを変更 pythonからsolrの機能を利用 install # $ sudo apt-get install ope…

distributeのextra_commandの作り方

pythonのsetup.pyを使って以下のように実行可能なコマンドを作ってみる $ python setup.py <command name> <args> ...(作業した内容のgist) setup.py pythonのパッケージはsetup.pyを持っている。このsetup.pyは提供されるパッケージに関するコマンドを持っている。例えば、以下</args></command>…

MixinについてAdapterについて

pyramidでmixinを使ってコードを書いていた。これは適切なコードの書き方では無かったそう。 もう少し具体的に言うと、component architectureの上では、mixinを使わない方が望ましいらしい。 代わりにadapter*1という機能を使うそう。 adapterのことをちょ…

テーブルをjoinした結果をモデルにmappingできる。

__table__にsqlalchemy.orm.joinした結果を代入すると、複数のテーブルをjoinした結果をmappingしたモデルが作れる。 (idのconflictを避けるためにorm.column_propertyを使うことが多い) import sqlahelper import sqlalchemy as sa import sqlalchemy.orm a…

onupdateやeventなど

更新時刻を設定したい場合などデフォルトで提供されている、onupdateオプションを使う。 import sqlahelper import sqlalchemy as sa import sqlalchemy.orm as orm from datetime import datetime Base = sqlahelper.get_base() DBSession = sqlahelper.get…

radix sort

ひまつぶし def maxof(xs, fn): ma = fn(xs[0]) for x in xs: tmp = fn(x) if ma < tmp: ma = tmp return tmp def radix_sort(xs, M): bs = [[] for i in range(M)] N = maxof(xs, len) checks = [0 for _ in range(M)] for x in xs: bs[int(x[-1])].append(…

sqlalchemyでうれしいところ。(concrete table inheritanceで継承元のクラスで検索した場合に適切な子クラスにマッピングしたオブジェクトを返してくれるところ)

sqlalchemy は、concrete table inheritanceで定義したモデルがあるとする。 それらのモデルを継承元のクラスで検索した場合に、検索結果のqueryは適切な子クラスにマッピングしたオブジェクトのリストとなって返ってくるところ。これがうれしい。 e.g. 例は…

declarative_baseのBaseクラスを拡張してみる。

よくmixinで拡張したりなんかする。 e.g. django likeなmodel定義にするmixin import sqlalchemy as sa import sqlalchemy.orm as orm from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declarative_base Base…

decoratorの挙動をちょっと変更しつつ適用する

メモ。 motivatation 最近、fanstaticを使っている時にデコレータを利用したいと思った。 (fanstaticはWSGIアプリのResponseの中を覗いてhead要素の合間に定義しておいたresource(js,cssなど)を読み込むタグを追加してくれるライブラリ((他にも機能はある)))…

後で集めてひとつにする。

やっていることは、個々の要素から情報を集めて一つにまとめて出力すること。初めからこのような方針を思いつきたかった。 返す値の計算は、各要素に全部移譲する 複数の値を返したくなるので、辞書的なオブジェクトを設定として引き回して、各要素に更新し…

makoのinheritsはoverrideなので上書き

akoのinheritsはoverrideなので上書き。継承元のブロックと同名の名前付きブロックを呼んだとき、継承元のブロックの中身はレンダリングされない。例。 from mako.template import Template from mako.lookup import TemplateLookup with open("base.mako", …

makoを使ったテンプレートで、クライアントサイドのテンプレートを使う方法

textを使う。 e.g. ## ここはmakoのテンプレート <%text> <script type="text/html" id="foo_template"> <div class="foo"><%= name %> </div> </script> </%text>

setup.pyのdistで作られたパッケージに含まれないファイルを含めるようにする。(MANIFEST.in)

気づかないでハマったのでメモ。 pythonでパッケージを作成するとき setup.pyを書き、以下のコマンドを実行するとpypiに転送可能なように整えてパッケージングしてくれる。 (デフォルトでカレントディレクトリのdist以下にwindowsでzip,unixでtar.gz形式のフ…

fanstaticで依存関係のあるresourceの定義の仕方

http://www.fanstatic.org/en/0.11.2/library.html b.jsとc.jsはa.jsに依存している時 from fanstatic import Library, Resource foo = Library('foo', 'foo') bar = Library('bar', 'bar') a = Resource(foo, 'a.js') b = Resource(bar, 'b.js', depends=[a…

emacsでJSON Reformat

例えばこういうJSONがあったとして {"profile_use_background_image":true,"protected":false,"profile_banner_url":"https:\/\/si0.twimg.com\/brand_banners\/twitter\/1323368512\/live","default_profile":false,"lang":"en","profile_text_color":"3333…

query_propertyとhybrid_property(hybrid_method)が便利。

機能について query_property query_propertyは、モデル*1クラスが検索クエリをあたかもpropertyであるかのように持たせることができる機能。以下が利用例。query_propertyを利用しない場合の検索は以下のようになる。 # e.g. User.first_nameで絞り込み検索…

pyramidでtweenを使って機能を追加してみる

tweenという機能を使って拡張することができる。自分で新しいtweenを定義して追加するには以下の通りの作業をすれば良い。1. tweenのfactoryを定義する。 2. configure.add_tweenに定義したfactoryを渡す。(この時文字列である必要があるe.g. "foo.bar.baz")…

sqlalchemyの練習

メモ。 declarativeの使い方 tableの作成 sessionの使い方 検索の仕方 insertの方法

pyramid_peeweeでmysqlが動くことを確かめてみる。

準備の方が長いかもしれない。 環境はubuntu(10.10) 前提。 python,peewee,pyramid_peeweeが入っている。 mysqlのinstallなど mysqlもインストールされていないので、mysqlのインストールから作業する。 $ sudo aptitude install mysql-server libmysqlclien…

パッケージインストールメモ

setup.py setup.py 仮install/uninstall python setup.py develop #install python setup.py develop --uninstall #uninstall install/uninstall python setup.py #install python setup.py install --record files.txt | xargs rm -r #uninstall