2011-03-01から1ヶ月間の記事一覧

デコレータを使った関数の置き換え(dynamic_scope的な)

djangoで開発をしていて、実機でのテストがめんどい部分があった。 views関数の中で、想定した状態の時に、意図した通りの分岐が行われるかテストしたい。そのためには、関数を置き換えられると良さそう。そんなわけで、`with_dummy`というデコレータを作成…

クラスデコレータを使ってクラスのすべてのメソッドにデコレータを付加してみる。

クラスデコレータでクラス中のメソッド全部に入力出力の値を伝える機能を持たせてみる class Inspector(object): depth = 0 @classmethod def bind(kls, fn): def _bind(*args, **kw): indent = " " * kls.depth print "%s %sargs=%s, kw=%s" % (indent, fn,…

昨日の試みはうまくいかなそう。

instance生成できてないじゃん。instance_method定義するとき。

admin画面のURLをいじってQuerySetの絞り込み

memoなので雑。(後で手直し) admin.pyで list_filter = ["count"] のものは http://example.com:8000/admin/anything?count__lt=10 http://example.com:8000/admin/anything?count__lte=10 http://example.com:8000/admin/anything?count=10 http://exampl…

デコレータは何も関数である必要はないわけで

オブジェクトのメソッドも形を整えれば、デコレータとしてつかえる。副次的な機能を追加するのに使えそう。 例(平均を計算するカウンタのメソッドをデコレータとして利用) 平均を返すカウンタを使った例。 f()を呼ぶと共に値はカウントされ、g()を呼ぶともに…

__metaclass__2 メソッドの置き換え

問題 実行に時間のかかる処理longlongtime_processを持つクラスAがある感じで。 このAを継承しているクラス、Aa,Abがある。でも、longlongtime_processは時間がかかるので、テストの際には、それとは違うshorttime_processに変えたい。 以下のような階層関係…

pythonの__metaclass__について

いつもクラスデコレータの方を使ってmetaclassをあまり使っていなかったので情報を整理。 metaクラスで定義する__new__について class FooMeta(type): def __new__(cls, name, bases, attrs): print "cls:%s" % cls print "name:%s" % name print "bases:%s"…

glogを有効にする

~/.hgrcに以下を追加。 [extensions] graphlog =以降は、hg glogが使えるようになる。

unittestで使えるメソッド

例外発生を確認するメソッドが用意されていた。`assertRaises`。 テストで利用できるメソッドを把握しておいた方が良さそう。もう少し丁寧にドキュメントを見ることにした。少しドキュメントを読んでみるとpython 2.7でdeprecatedになったaliasがある。メモ…

mercurial リモートリポジトリ

知らなかったのでメモ A B(remote)の通信 A B ip 192.168.1.100 192.168.1.101 user you foo の時 B(remote)側で # ssh foo@192.168.1.101 pwd #/home/foo/bar hg init A側で hg push ssh://foo@192.168.1.101//home/foo/bar

標準ライブラリのunittestで例外の発生を確認するテスト

unittestで例外の発生を確認したい。thunkを作れば良さそう。 raiseが文じゃなければlambdaで包むだけで大丈夫なのだけど。 対象 unittestを使いたい(他のライブラリ入れるの面倒) 例外の発生を確認するテストケースを書きたい MyExceptionを検知 自分で定義…

callable objectでデコレータを作成

以前にcallble objectを使うことでもデコレータが作れるということを試してみた。 今度はcallable objectを使ってできることを考えてみる。再帰呼び出しの内容を把握しやすいように表示するtraceを作ってみた 対象 デコレータの使い方を知っている callable …

python用のemacsの設定

飽きた。https://gist.github.com/878193 git clone git://gist.github.com/878193.git gist-878193 cd gist-878193 make install 試してみたいときは emacs --load emacs.el -q #で起動してみれば良い

python-modeの使い方メモ

独自の設定を積み重ねても仕方がないので、python-modeの機能の使い方をメモする。 (この記事はpython-modeを起動してC-c ?で見ることができるヘルプを元にして作られてます) python-modeの提供する機能 syntax-highlight python-shellとの通信 コードのイン…

デコレータを生成するクラス。

コードは動作するデモ。便利じゃないけど。 class Advice(object): def __init__(self, beg=None, end=None): self.beg = beg self.end = end def __call__(self, fn): def _fn(*args, **kw): if self.beg: self.beg() r = fn(*args, **kw) if self.end: sel…

現在のバッファのスクリプトを実行(をvirtualenvにも対応させてみた)

環境変数のWORKON_HOMEに依存しているので、virtualenvwrapper向けかも。 発端 compile関数を通じてコマンドを実行すると、エラー発生時に発生源に飛べるのでうれしい。発生したエラー箇所から利用しているライブラリの中に飛ぶ際、既存のpythonを使う(/usr/…

作ってはどこかへいってしまう関数。

(defun hatena (beg end) (interactive "r") (save-excursion (goto-char end) (insert "|python|<\n") (goto-char beg) (insert ">||\n")))

Pythonのdictについて

辞書に関する理解が不足していたように感じたので情報を整理。 基本的にはもっとinを使いましょうといことで。 値の存在確認 D = {1: 2} def is_exist(dic, k): try: return dic[k] and True except KeyError: return False print is_exist(D, 1) # => True …

emacsでロード時にも現在のディレクトリを元にパスを設定する。

通常、emacsが立ち上がっているとき、現在開いているバッファのディレクトリの値が欲しければ、`default-directory`を使えば良い。 (insert default-directory);; -> /home/podmo/up/ バッファ上で直接`eval-buffer`をした場合には問題ないが、`load`を利用…

virtualenvwrapperを使ってsandboxの作成

以前にvirtualenvの使い方をメモしたけれど、virtualenvwrapperについてはメモっていなかった。 ちなみに環境はubuntu10.10。 準備 virtualenv virtualenvwrapper をinstallする。 sudo easy_install virtualenv sudo easy_install virtualenvwrapper 設定も…

nginx 一部のアドレスにbasic認証を掛けない。

satisfy [all|any]というディレクティブがある。 allow deny satisfy any 認証なし Basic認証あり satisfy all Basic認証あり アクセス拒否 設定例 100.100.100.100からのアクセスだけ認証を掛けない設定。 server { #.... location / { satisfy any; allow …

import文からファイルに飛びたい。

探せばもっと良いものがあるのだろうけれど、とりあえず欲しくなったので書いた。 emacs-lispの正規表現に先読みは無かったかな?(正規表現に一部気になる嫌なところがある) (まだ、手元の環境にとても依存しているかも。動かないかも) ;; (defmacro pyt…

memo:matchした文字列の内容を返すre-search-forward

(defun match-data-to-string-list (data) (let (begs ends) (while data (push (pop data) begs) (push (pop data) ends)) (loop for beg in begs for end in ends for i from 0 to (length begs) if (and beg end) collect (list i (buffer-substring-no-p…

htmlをtext形式で表示させる

androidの一部のブラウザなどは、表示しているhtmlのソースを見ることができないものがある。 そのような時にhtmlのソースを見るには、Context-Typeを指定してあげると良い。 code views.pyの一部 def response_as_text(request): response = direct_to_temp…

もっと手軽にdjangoのテンプレートを使いたい。

djangoのtemplateをもっと手軽に、具体的にはviewsとtemplate分けたりせずに使いたい。*1 要求 webAPIの動作確認をするために、いちいち、ファイル分けたくない。 もっと手軽に利用したい。 問題 ところがドキュメントの通りに書くとimport Errorを返してし…

datetime.timedeltaに注意。

datetime.deltatime.secondsは時刻と時刻の差を秒数で表したものじゃなかった。 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])実際の所は、(日、秒、マイクロ秒、ミリ秒、分、時間、週)に分解した時の値。 …

毎回__unicode__とか定義するの面倒。2

本来のdjangoの機能を使って実装した方が見通しが良いと教えてもらった。 こんな感じに作れば良いらしい。 from django.db import models class InspectableModel(models.Model): def __unicode__(self): field_names = [field.get_attname() for field in s…

毎回モデルに__unicode__定義するのめんどい

クラスデコレータとかで何とかならないかな? def inspectable(klass): field_names = [field.get_attname() for field in klass._meta.fields] def _inspect(self): results = [] results.append('%s object' % self.__class__.__name__) for name in field…