先週末、また参加してきました。
今回は、前回の成果を受けての開発だったので、基本的にはただ作ればいいだけでした。
前回から
Testing.ZopeTestCase.ZopeTestCase
をベースにしてunit testで実験してましたが、
これをもっとテストっぽくしながらの開発でした。
いくつか悩んだことがありました。構造的に、
Localizer
のインスタンスはどっかに適当に置く。テストでは天辺の App
オブジェクトの直下へ。Localizer
には複数の MessageCatalog
を置くことができる。これらは一個一個が異なるメッセージ・ドメインを担当します。MessageCatalog
は PersistentMapping
を使って、メッセージと言語をキーにして、翻訳メッセージを保持します。という具合です。
zope.i18n
で定義されるインターフェースのうち、
今回重要なのは ITranslationDomain
だけです。
これは zope.i18n
のコードを読めばわかりました。
実際に定義されているのは、スキーマでは domain
が担当するメッセージ・ドメインを示す必要があり、translate
メソッドで翻訳メッセージを返せないといけません。
ということは、domain
を持つ必要上、
Localizer
が直接 ITranslationDomain
をprovideするより、
MessageCatalog
がprovideするのが自然、ということなります。
ここで困ったことに、MessageCatalog
には既に translate
というメソッドが、昔のZPTのAPIに従って実装されていて、名前が衝突してしまいます。
この問題については
清水川さん
に相談していただいたりしたんですが、
結局、古い仕組みの GlobalTranslationService
がサポートされているZopeだったら今まで通り、
なかったら ITranslationDomain
に合わせるという、あんまり美しくない方法で逃げることにしました。
それ以外で微妙にハマったのは、
five.localsitemanager.make_objectmanager_site
でSite Managerを作るだけでは不十分で、local utilityを機能させるには、zope.site.hooks.setSite
を呼ばないといけない。local utilityは queryUtility
で返ってくる時、なんとかWrapperに包まれてきて(正確な名前は忘れた)、path expansionが必要になって、relative pathしかわからないので、siteの位置を教えてあげないと辿れないとか、そういう問題だった。自分で書いていて、何を書いているかよくわからないけれど、とにかく setSite
しないといけない。xmlns:i18n=...
とか書くけど、Page Templateは pt_render
すると、namespaceの宣言をすっぱり引っこ抜いてしまう。だからテストの時は注意が必要。それ以外はふつうにやれば、できました。 ちゃんと時間内に動くようになったので、前回よりは気持ちよかったです。 後は少しだけコードをきれいにして、パッチを送るだけです。
ところで、最近Python、Zopeネタで書籍がまた増えてます。
「10日でおぼえる Python 入門教室」は 寺田さん に献本していただきました。 ありがとうございました。 Pythonで長年現場で利用されている CMSコミュニケーションズ の人たちが書かれているだけあって、 内容がしっかりしてます。 この本のいいところは、例が学習用に無理やり捏造したようなものではなく、本当に実世界で意味のあるものが多いことです。 チュートリアル風の入門書なので、 「まともな例がないとイメージしにくい」「言語は何となくわかったけど練習するネタが思いつかない」という人に向いていると思います。
あえて悪い点をあげるなら、「言語マニア向きな内容ではない」「サイズが小さいようで大きい」といったあたりでしょうか。 このシリーズの特徴ではあるのでしょうが、 いっそのこともっと小さく(薄くって意味ではなく)すれば、持ち運びがきいて嬉しいんじゃないかなあと思いました。
「Zope3入門篇—Zope3を使ったWebコンポーネント開発」は、 Zope3の入門書の定番である いわゆるPhilikon本 の日本語訳(の上巻)です。 訳者は現在の所属を見るとわかりにくいかもしれませんが、 わかる人にはわかる、元Zope Japanの面子です。 Zopeのコミッタである、うちのyuseiもレビューに参加させてもらったので、 訳語が変とか、原文と意味が違うとか、そんな心配は一切必要ありません。
入門書として見ると、かなりハードな内容ですが、 コンポーネント技術を徹底的に解説しているので、 個人的には是非大学の講義なんかで取り上げていただきたいと思ってます。