[Checkins] SVN: z3c.componentdebug/trunk/src/z3c/componentdebug/
Better interface for listing registrations
Ross Patterson
me at rpatterson.net
Wed May 30 20:14:19 EDT 2007
Log message for revision 76025:
Better interface for listing registrations
Changed:
U z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt
U z3c.componentdebug/trunk/src/z3c/componentdebug/__init__.py
U z3c.componentdebug/trunk/src/z3c/componentdebug/component.py
A z3c.componentdebug/trunk/src/z3c/componentdebug/interfaces.py
-=-
Modified: z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt 2007-05-31 00:12:29 UTC (rev 76024)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt 2007-05-31 00:14:18 UTC (rev 76025)
@@ -57,8 +57,9 @@
>>> queryMultiAdapter((foo, bar), IBaz)
>>> from pprint import pprint
- >>> from z3c.componentdebug import inspectRequiredAdapters
- >>> pprint([i for i in inspectRequiredAdapters((foo, bar), IBaz)])
+ >>> from z3c.componentdebug import inspect
+ >>> registrations = inspect((foo, bar), IBaz)
+ >>> pprint([i for i in registrations.byObjects()])
[(<Foo object at ...>, {}), (<Bar object at ...>, {})]
Register a factory for this lookup::
@@ -72,7 +73,8 @@
>>> queryMultiAdapter((foo, bar), IBaz)
'baz'
- >>> pprint([i for i in inspectRequiredAdapters((foo, bar), IBaz)])
+ >>> registrations = inspect((foo, bar), IBaz)
+ >>> pprint([i for i in registrations.byObjects()])
[(<Foo object at ...>,
{<InterfaceClass __builtin__.IFoo>:
AdapterRegistration(<BaseGlobalComponents base>, [IFoo, IBar],
@@ -91,7 +93,8 @@
>>> queryMultiAdapter((foo, bar), IBaz)
- >>> pprint([i for i in inspectRequiredAdapters((foo, bar), IBaz)])
+ >>> registrations = inspect((foo, bar), IBaz)
+ >>> pprint([i for i in registrations.byObjects()])
[(<Foo object at ...>,
{<InterfaceClass __builtin__.IFoo>:
AdapterRegistration(<BaseGlobalComponents base>, [IFoo, IBar],
Modified: z3c.componentdebug/trunk/src/z3c/componentdebug/__init__.py
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/__init__.py 2007-05-31 00:12:29 UTC (rev 76024)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/__init__.py 2007-05-31 00:14:18 UTC (rev 76025)
@@ -1,3 +1,3 @@
"""Tools for debgging the Zope component registry."""
-from component import inspectRequiredAdapters
+from component import Registrations as inspect
Modified: z3c.componentdebug/trunk/src/z3c/componentdebug/component.py
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/component.py 2007-05-31 00:12:29 UTC (rev 76024)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/component.py 2007-05-31 00:14:18 UTC (rev 76025)
@@ -4,50 +4,59 @@
from zope.component import getSiteManager
from zope.app.component import queryNextSiteManager
+all_methods=('registeredAdapters',
+ 'registeredSubscriptionAdapters',
+ 'registeredHandlers',
+ 'registeredUtilities')
+
_marker = object()
-def getSiteManagers(context=None, sm=None):
+def getSiteManagers(context=None):
"""Return an iterator over the chain of site managers."""
- assert None in (context, sm)
- if sm is None:
- sm = getSiteManager(context)
+ sm = getSiteManager(context)
while sm is not _marker:
yield sm
sm = queryNextSiteManager(sm, _marker)
-def getRegistrations(methods, context=None, sm=None):
- for sm_ in getSiteManagers(context, sm):
+def getRegistrations(methods, context=None):
+ for sm in getSiteManagers(context):
for method in methods:
- for reg in getattr(sm_, method)():
+ for reg in getattr(sm, method)():
yield reg
-def inspectRequired(regs, objects, iface, name=u''):
- order = len(objects)
- idxs = xrange(order)
+class Registrations(list):
- # Only bother with registrations that provide the interface and
- # require the same number of objects, and has the right name
- regs = [reg for reg in regs
- if reg.provided is iface
- and len(reg.required) == order
- and reg.name == name]
+ def __init__(self, objects=False, provided=False, name=False,
+ context=None, methods=all_methods):
+ self.methods = methods
- for idx in idxs:
- object = objects[idx]
- provided = providedBy(object)
- result = {}
- for reg in regs:
- req = reg.required[idx]
- for prov in provided:
- if prov.isOrExtends(req):
- result[req] = reg
- break
- yield object, result
+ if objects is not False:
+ self.objects = objects
+ self.order = len(objects)
+ if provided is not False:
+ self.provided = provided
+ if name is not False:
+ self.name = name
+ if context is not None:
+ self.context = context
+
+ super(Registrations, self).__init__(
+ reg for reg in getRegistrations(self.methods, context)
+ if (provided is False or reg.provided is provided)
+ and (objects is False or len(reg.required) == self.order)
+ and (name is False or reg.name == name))
-adapter_methods=('registeredAdapters',
- 'registeredSubscriptionAdapters',
- 'registeredHandlers')
-def inspectRequiredAdapters(objects, iface, name=u'',
- context=None, sm=None):
- return inspectRequired(
- getRegistrations(adapter_methods, context, sm),
- objects, iface, name)
+ def byObjects(self):
+ assert hasattr(self, 'objects')
+
+ idxs = xrange(self.order)
+ for idx in idxs:
+ object = self.objects[idx]
+ provided = providedBy(object)
+ result = {}
+ for reg in self:
+ required = reg.required[idx]
+ for prov in provided:
+ if prov.isOrExtends(required):
+ result[required] = reg
+ break
+ yield object, result
Added: z3c.componentdebug/trunk/src/z3c/componentdebug/interfaces.py
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/interfaces.py (rev 0)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/interfaces.py 2007-05-31 00:14:18 UTC (rev 76025)
@@ -0,0 +1,7 @@
+from zope.interface import Interface
+
+class IRegistrations(Interface):
+ """Registrations that qualify for the given lookup."""
+
+ def byObjects():
+ """Return the registrations grouped by the objects."""
More information about the Checkins
mailing list