dict.pop()対策
Python 2.3から、組み込みオブジェクトdictにpop()というメソッドが追加されました。web.pyではこれを使っています。しかし当然Python 2.2にはdict.pop()はありません。そこで、代替となるような関数を用意してやります。
/site-packages/web.py input()関数内、1733行目付近に追加
def dictpop(d, k, x=None): try: return d[k] except KeyError: if x: return x else: raise KeyError() #_method = defaults.pop('_method', 'both') _method = dictpop(defaults, '_method', 'both')
本当は、
- 組み込み型のdictを拡張してpopメソッドを追加
- その拡張したPoppableDictみたいなクラスをdictという名前にマッピング
- 以降すべてのdictオブジェクトはPoppableDictとして扱われる
といった感じの理想的なシナリオを考えていたのですが、この変更を関数の引数としてのdictにまで反映させるのは無理なようです。今のところdict.pop()を使っているのはここだけなので、このような方法をとりました。
さて、これでようやくPython2.2でもweb.pyが使えるようになりました。
こういう技術メモはどんどん公開したほうがいいですね。前回の「CGI環境でweb.pyを動かす」も、このダイアリでは、はてブのブクマ数が一番多かったりするし。
あと、自分でライブラリを公開するときは、最近追加された関数を使いすぎると、利用環境を限定してしまうなぁ、と思いました。