ToscaWidgetも試してみる(結局Paste)
サンプルが動きませんorz
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ToscaWidgets-0.1a2dev_r2777-py2.5.egg/toscawidgets/middleware.py", line 47, in __call__ environ['paste.registry'].register(toscawidgets.framework, framework) KeyError: 'paste.registry'
paste.registryか.とりあえずググる
RegistryManageなんぞというWSGIミドルウェアを発見。
これがpaste.registryをenvironに登録してると。
...Paste必須ですか?
直接キーを使ったインターフェイスだと、分かりづらいなあ。
グローバル変数と変わらないじゃないか。
とりあえずWSGIアプリケーションでToscaWidgetを使う場合は、以下のようにミドルウェアをスタックすればいい。
app = RegistryManager(TGWidgetsMiddleware(app, WSGIHostFramework, show_apache_config=True))
PasteDeployでfilter-chainにしたほうがスマートか?
アプリケーション必須なミドルウェアは、コードに書いてiniファイルに追い出すのは交換可能なものだけにした方が問題が少なそうな気がするが。
複数のアプリケーションをまとめたサイトにするときに、このスタックを毎回書くのは負けてる気がする。
とりあえずToscaWidgetsのentry_pointsを調べておく。
[toscawidgets.host_frameworks] wsgi = toscawidgets.mods.wsgi:WSGIHostFramework pylons = toscawidgets.mods.pylonshf:PylonsHostFramework turbogears = toscawidgets.mods.tg:Turbogears [toscawidgets.widgets] widgets = toscawidgets.core resources = toscawidgets.resources [paste.paster_create_template] toscawidgets=toscawidgets.util:ToscaWidgetsTemplate [turbogears.extensions] toscawidgets=toscawidgets.mods.tg [paste.filter_app_factory] middleware = toscawidgets.middleware:make_middleware
toscawidgets.middleware:make_middlewareの定義は以下のようになっている。
def make_middleware(app, global_config, host_framework="wsgi", **kw):
ということで、pastedeployで以下のようにfilterを構成する。
[filter:tw] paster.filter_app_factory = egg:ToscaWidgets#middleware host_framework = wsgi
このフィルターを適用するにはappの方にwith-filter = tw とすればいい。
[app:main] paste.app_factory = addressbook:factory with-filter = tw
全てを合わせるとこうなる。
[DEFAULT] dburi = postgres://aodag:aodag@localhost/addressbook [app:main] paste.app_factory = addressbook:factory with-filter = tw [filter:tw] paster.filter_app_factory = egg:ToscaWidgets#middleware host_framework = wsgi [server:main] use = egg:PasteScript#wsgiutils port = 8080
server:mainはとりあえずスタンドアローンなhttpサーバー設定。
scgiで動かすなら、flupのscgiミドルに設定する。
use = egg:PasteScript#flup_scgi_thread
http://www.toscawidgets.org/
http://svn.turbogears.org/projects/ToscaWidgets/trunk/examples/wsgi_app.py