[Zope-Checkins] CVS: Zope3/lib/python/Zope/Configuration - meta.py:1.1.2.9.14.1
Steve Alexander
steve@cat-box.net
Sat, 1 Jun 2002 04:35:55 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/Configuration
In directory cvs.zope.org:/tmp/cvs-serv4086/lib/python/Zope/Configuration
Modified Files:
Tag: Zope3InWonderland-branch
meta.py
Log Message:
added handler_method attribute to subdirectives to explicitly say
what method of a directive handler class will process them.
=== Zope3/lib/python/Zope/Configuration/meta.py 1.1.2.9 => 1.1.2.9.14.1 ===
return subdirs
-def registersub(directives, name):
+def registersub(directives, name, handler_method=None):
+ if not handler_method:
+ handler_method = name[1]
subdirs = {}
- directives[name] = subdirs
+ directives[name] = subdirs, handler_method
return subdirs
def _exe(callable, subs, context, kw):
@@ -59,15 +61,23 @@
return _exe(callable, subs, _context, kw)
def sub(subs, _name, _context, **kw):
-
base, subdirs = subs
-
try:
subs = subdirs[_name]
except KeyError:
raise InvalidDirective(_name)
-
- callable = getattr(base, _name[1])
+
+ # this is crufty.
+ # if this is a tuple, it means we created it as such in
+ # registersub, and so we grab item 1 as the handler_method
+ # and rebind subs as item 0
+
+ if isinstance(subs, tuple):
+ handler_method = subs[1]
+ subs = subs[0]
+ else:
+ handler_method = _name[1]
+ callable = getattr(base, handler_method)
return _exe(callable, subs, _context, kw)
@@ -92,14 +102,14 @@
namespace=None):
namespace = namespace or self._namespace
subs = register((namespace, name), _context.resolve(handler))
- return Subdirective(subs, namespace)
+ return Subdirective(subs, namespace=namespace)
def __call__(self):
return ()
def Directive(_context, namespace, name, handler, attributes=''):
subs = register((namespace, name), _context.resolve(handler))
- return Subdirective(subs, namespace)
+ return Subdirective(subs, namespace=namespace)
Directive.__implements__ = INonEmptyDirective
@@ -120,12 +130,14 @@
self._subs = subs
self._namespace = namespace
- def subdirective(self, _context, name, attributes='', namespace=None):
+ def subdirective(self, _context, name, attributes='',
+ namespace=None, handler_method=None):
namespace = namespace or self._namespace
if not namespace:
raise InvaliDirectiveDefinition(name)
-
- subs = registersub(self._subs, (namespace, name))
+ #if not handler_method:
+ # handler_method = name
+ subs = registersub(self._subs, (namespace, name), handler_method)
return Subdirective(subs)
def __call__(self):