Here's a slightly different version of Neil's code which makes a bit
more sense to me:
def _q_getname(self, component):
print 'global getname', component
return Folder(component)
class Folder:
_q_exports = []
def __init__(self, path=''):
print 'init', path
self._path = path
def _q_getname(self, request, component):
print 'getname', component
return Folder('.'.join((self._path, component)))
def __call__(self, request):
print 'call', self._path
return 'call ' + self._path
def _q_index(self, request):
print 'index', self._path
return 'index ' + self._path
looking up /a/b/c prints:
global getname a
init a
getname b
init a.b
getname c
init a.b.c
call a.b.c
and looking up a/b/c/ prints:
global getname a
init a
getname b
init a.b
getname c
init a.b.c
index a.b.c
in the debug log, all of which make me happy and contented.
Now, the only difference with Neil's code is that I'm not using
_q_getname to return "self", and instead use _q_getname to return a
child folder. This seems more 'right' to me. Am I missing a greater
truth about web object modeling?
--david