2009年2月26日木曜日

zope:traverseName

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ここは組み込み型objectの上書きじゃなくてobだ。:D
name spaceってZopeのobjectの空間のname spaceをurlで表記できるということ?



def traverseName(self, ob, name):
if name and name[:1] in '@+':
# Process URI segment parameters.
ns, nm = nsParse(name)
if ns:
try:
ob2 = namespaceLookup(ns, nm, ob, self)
except TraversalError:
raise KeyError(ob, name)


__of__とAcquireは何か関係があるらしい。

if IAcquirer.providedBy(ob2):
ob2 = ob2.__of__(ob)
return ob2


ifの順番を最初のやつと入れ替えてelifで書けとか思うのは気のせい?name == '.'のケースにsliceしたobjectを生成しないので気持ちいい。速いとはいわない。

if name == '.':
return ob


これがおそらく一番普通のケース。

if IPublishTraverse.providedBy(ob):
ob2 = ob.publishTraverse(self, name)

obがdumbだとadapterを探す。

else:
adapter = queryMultiAdapter((ob, self), IPublishTraverse)
if adapter is None:
## Zope2 doesn't set up its own adapters in a lot of cases
## so we will just use a default adapter.
adapter = DefaultPublishTraverse(ob, self)

ob2 = adapter.publishTraverse(self, name)

return ob2

0 件のコメント: