python

pyramid_peeweeというのを作り始めてる。

まだ、version0.0だけれど。こんな感じでDBが触れる。 まだ、uiは暫定的(と言っても、モデル定義のほとんどはpeeweeなんだけれど)

pyramidでテンプレートを使う(light weight)

1ファイルのアプリケーションでテンプレートを使う方法を説明します。1. (デフォルトでインストールされる)makoを使う方法 2. jinja2を使う方法の2つの方法を説明します。はじめはテンプレートを使わないhello anyoneと表示されるだけのアプリからスタートし…

pyramidでhello world(not light weight)

pyramidは、flaskのように、1ファイルで完結する1ファイルアプリケーションを書くことができます。 また、規模の大きな開発のために、複数のモジュールに切り分けて記述することも可能です。今回は、pyramidアプリケーションでhello worldを表示するところま…

pyramidでhello world (light weight)

pyramidは、flaskのように、1ファイルで完結する1ファイルアプリケーションを書くことができます。 また、規模の大きな開発のために、複数のモジュールに切り分けて記述することも可能です。今回は1ファイルでの、pyramidアプリケーションでhello worldを表…

sphinxcontrib-blockdiagで”ImportError: The _imagingft C module is not installed"

no-site-packagesのvirturalenv環境でsphinxのドキュメントを書こうとしていた. sphinxcontrib-blockdiagをpipでインストールしてmake htmlをしたところエラーになった。原因は以下。 File "/home/podhmo/.virtualenvs/altair/local/lib/python2.7/site-pack…

alembic使ってみた

alembic使ってみた。sqlite以外のDBで使っていない。内容はまとまっていない。 alembic sqlalchemyのmigrationツール。sqlalchemy-migrateの代替として利用可能。 doc: http://readthedocs.org/docs/alembic/en/latest/index.html install $ pip install ale…

pipのメモ

メモしたいこと version指定の方法 アップグレードのこと ダウロードしたソースのキャッシュ version指定の方法 "=="を使うとversionが指定できる。 e.g. pyramid 何も指定しないでインストールしようとすると1.3.a2がインストールされる $ pip search pyram…

all()とany()は意外と使える子かもしれない。

組み込み関数の中の使えない子 pythonの組み込み関数の中に以下の3つがあります。 reduce() all() any() これらの3つを組み込み関数のわりに使いどころが少ない。使えない子たちだと認識してました。例えばall()、any()は、各シーケンス*1内の真偽値について…

class -> class_decorator(ya-mixin)

class ValidationError(object): pass class Foo(object): def clean(self): print "hey" if self.cleaned_data["x"] < self.cleaned_data["y"]: raise ValidationError class Bar(object): def clean(self): print "hoo" if self.cleaned_data["x"] < self.…

資源を共有するインスタンスを作るデコレータの作成

キャッシュを共有したい。資源の共有とかバグになりやすいところだけれど。 キャッシュを共有できた方が効率が良いので作ってみる。 sharedというデコレータを書いた。 これは引数に渡された名前の属性を共有するインスタンスを生成する。duplicateというメ…

あそび(cprofiler, graphviz)

準備 環境 ubuntu install sudo aptitude install python-cprofiler graphviz sudo pip install gprof2dot 利用 file #!/bin/sh out="stat" python -m cProfile -o $out.prof $@ gprof2dot -f pstats $out.prof > $out.dot dot -o$out.png -Tpng $out.dot ru…

比較関数を追加可能なcomparator

夕方にちょっと話にでてきたので想像で実装してみた。 class ExtensibleComparator(object): def __init__(self): self.ops = [] def __call__(self, x, y): for op in self.ops: n = op(x, y) if n == -1: return -1 elif n == 1: return 1 return 0 def ad…

formをレンダリングしたときにinput要素を使わないようにする(django)

確認画面を作るときなどに使えるかも class XForm(forms.Form): item = forms.ChoiceField(choices=[(i, i) for i in xrange(3)]) data = forms.DateTimeField(required=False) class ReadOnlyWidget(forms.Widget): def render(self, name, value, attrs=No…

ModelFormのような内部のMetaを見るFormを自分で作る

ModelFormのように、内部のMetaを見るクラスを自分で作って見たいと思った。 概要 djangoでは、以下のようにMetaを使ってmetaclassに情報を渡して、Formクラスを作れる。 class ArticleForm(ModelForm): class Meta: model = Article また、以下のようにfiel…

途中,依存関係をあまり意識せずコードを書けるところまでしかできていない

用途 fixtureの生成など、実行順序に依存関係のあるコード。 (あと、走らせるとなかなか終わらない。) ・解決したこと * 依存関係をあまり意識せずコードを書きたい。 ・未解決 * 作業順序を変更したい + model1,model2,... + (model1.x model2.x,...),(mode…

オブジェクトもどきが成長してきた。

良いか悪いか微妙。 目的 foo.bar.baz = 10 を返すようなオブジェクトを手軽に作ること。 新しく追加 ほとんど同様(でも一部異なる)なオブジェクトを作りたくなった。テストのダミーとかで。 それをするために、almost_cloneという関数を書いた。 O = Obje…

djangoのモデルのfieldクラスの階層構造

from django.conf import settings if not settings.configured: settings.configure() import django.db.models as m class Parser(object): def __init__(self): self.D = {} def eat(self, klass): D = self.D for k in reversed(klass.mro()): if k not …

高階関数(クロージャ)とメソッド(クラス)

(書いていたら当たり前な感じのことになった。) クロージャとオブジェクト こんな話がある。 クロージャ(閉包)があればオブジェクトは作れる。 クロージャとオブジェクトの機能としての豊かさは等価だ。 オブジェクトは状態を持つ。 あまり厳密な話をする気…

dummyObjectとかを作るとき

テストの時、モデルに対応したオブジェクト作るの面倒。dummy objectとか使う。 class ObjectLike(dict): def __getattr__(self, k, default=None): # default is not used return self[k] def __setattr__(self, k, v): self[k] = v book = ObjectLike(auth…

pythonにパターンマッチがあったら。

match xs.type: "int": return xs.sum() "str": return [int(x) for x in xs].sum() _: return None match (x, y): xs@((type_x, val_x), (type_y, val_y)) if type_x == type_y: print xs return fn(type_x, (val_x, val_y)) xs@(x$int, y$int): return fn(…

formsetのテスト面倒。

formsetの取る引数の形式が独特なのでそれに合わせてデータを作るのが面倒。 こんな感じの関数を作っておくとテストのとき楽かもしれない。 def formset_to_params(formset): r = {} mform = formset.management_form for k, bf in zip(mform.fields.keys(),…

formsetで外部から状態を注入したい場合。

こんな感じに書くと、何も考えずに使えて便利かもしれない。 from django.conf import settings settings.configure() import django.forms as forms from django.forms.formsets import BaseFormSet, formset_factory class ExtraArgsForm(forms.Form): def…

propertyの継承(getterのみ -> getter,setter両方提供)

propertyは以下のような感じで使える。 例えば、渡された数値を整数値として扱いたいようなオブジェクトの例。 class Obj(object): def __init__(self): self._n = None @property def n(self): return self._n @n.setter def n(self, v): self._n = abs(v) …

pythonのスコープ

エラーになる。 def f(): x = 0 def g(): x += 1 print x g() f() # UnboundLocalError: local variable 'x' referenced before assignment primitiveな値ではなく、オブジェクトなどの参照を保持する値を使えば大丈夫. class Ref(object): def __init__(sel…

memo pythonでの部分適用

functools.partialの存在意義が分からなかった。 lambdaで包んで返せばそれで良いと思っていた。 勘違いしていた。 確かに、functools.partialは便利だ。 def f(x): def _f(): return x + 1 return _f xs = [f(x) for x in xrange(10)] print [x() for x in …

状態を持ったmixinを作りたいときの検証用のmixin

状態を持ったmixinを作りたいときがある。(self.fooに依存しているけれど、self.fooが定義されているかわからない) 困ったので__init__後に、self.fooが定義されているか調べるデコレータを書いてみた。毎回検証処理が走っても無駄なだけなので、成功したら…

クラス名っぽい名前を変数名っぽい名前に変換する。

re.scannerを使った。 こんな変換 FooBar -> foo_bar XYBox -> xy_box import re class ClassNameToVarName(object): scanner = re.Scanner([ (r'^[A-Z]+?(?=[A-Z][^A-Z])', lambda sc, s: s.lower()), (r'^[A-Z]', lambda sc, s: s.lower()), (r'[A-Z]+', l…

qobjectの作成用のモジュール書いてみた。

暑くてまじめに書く気が起きない。ごめんなさい。memo,memo https://bitbucket.org/podhmo/po-django-qutil/src 普通のqobject Q(foo="bar") & (boo=True) という感じに作成して、比較したい値が決めた状態で作ってしまう。ついでに,djangoのキーをつなげる…

nullable chain

存在しないかするか分からないオブジェクトや属性を参照しようするとき、存在しないものを取得しようとしてエラーになるのが面倒。 例えば、以下のようにissueから始めてlogin_nameを取り出したい時とか。 print issue.author.login_name ただし、この時 iss…

__unicode__書くの面倒。

問題 djangoのモデルのデフォルトの表示がしょぼい オブジェクトの持つフィールドの値が分かんない。 __unicode__メソッドを自分で書く必要がある。 モデル毎に__unicode__を定義したくない。 面倒くさい デコレータとかでどうにかならない? でも、__unicod…