[Checkins] SVN: z3c.componentdebug/trunk/src/z3c/componentdebug/
Add ComponentLookupError patches
Ross Patterson
me at rpatterson.net
Wed May 30 23:30:04 EDT 2007
Log message for revision 76032:
Add ComponentLookupError patches
Changed:
U z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt
A z3c.componentdebug/trunk/src/z3c/componentdebug/lookup.py
-=-
Modified: z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt 2007-05-31 02:40:43 UTC (rev 76031)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/README.txt 2007-05-31 03:30:03 UTC (rev 76032)
@@ -103,3 +103,42 @@
[AdapterRegistration(<BaseGlobalComponents base>, [IFoo,
IBar], IBaz, '', getBaz, u'')])]),
(<Bar object at ...>, [])]
+
+--------------------
+ComponentLookupError
+--------------------
+
+z3c.componentdebug.lookup includes patches to the zope.component
+lookup API that provide more verbose reporting from
+ComponentLookupError exceptions::
+
+ >>> from zope.component import _api
+ >>> _api.getMultiAdapter((foo, bar), IBaz)
+ Traceback (most recent call last):
+ ...
+ ComponentLookupError: ((<Foo object at ...>, <Bar object at ...>),
+ <InterfaceClass __builtin__.IBaz>, u'')
+
+ >>> from z3c.componentdebug.lookup import patch
+ >>> patch()
+
+ >>> _api.getMultiAdapter((foo, bar), IBaz)
+ Traceback (most recent call last):
+ ...
+ VerboseComponentLookupError:
+ [AdapterRegistration(<BaseGlobalComponents base>, [IFoo, IBar],
+ IBaz, '', getBaz, u'')]
+ [(<Foo object at ...>,
+ [(<InterfaceClass __builtin__.IFoo>,
+ [AdapterRegistration(<BaseGlobalComponents base>, [IFoo,
+ IBar], IBaz, '', getBaz, u'')])]),
+ (<Bar object at ...>, [])]
+
+ >>> from z3c.componentdebug.lookup import cleanup
+ >>> cleanup()
+
+ >>> _api.getMultiAdapter((foo, bar), IBaz)
+ Traceback (most recent call last):
+ ...
+ ComponentLookupError: ((<Foo object at ...>, <Bar object at ...>),
+ <InterfaceClass __builtin__.IBaz>, u'')
Added: z3c.componentdebug/trunk/src/z3c/componentdebug/lookup.py
===================================================================
--- z3c.componentdebug/trunk/src/z3c/componentdebug/lookup.py (rev 0)
+++ z3c.componentdebug/trunk/src/z3c/componentdebug/lookup.py 2007-05-31 03:30:03 UTC (rev 76032)
@@ -0,0 +1,62 @@
+"""More verbose ComponentLookupError reporting."""
+
+from zope.interface import Interface
+from zope.component.interfaces import ComponentLookupError
+from zope.component import _api
+
+from z3c.componentdebug.component import Registrations, all_methods
+
+class VerboseComponentLookupError(ComponentLookupError):
+
+ def __init__(self, objects=False, provided=False, name=False,
+ context=None, methods=all_methods):
+ self.registrations = Registrations(objects, provided, name,
+ context, methods)
+ ComponentLookupError.__init__(
+ self, '\n'.join(
+ (str(self.registrations),
+ str([i for i in self.registrations.byObjects()]))))
+
+origGetAdapterInContext = _api.getAdapterInContext
+def getAdapterInContext(object, interface, context):
+ try:
+ origGetAdapterInContext(object, interface, context)
+ except ComponentLookupError:
+ raise VerboseComponentLookupError(
+ (object,), interface, u'', context)
+
+origGetAdapter = _api.getAdapter
+def getAdapter(object, interface=Interface, name=u'', context=None):
+ try:
+ origGetAdapter(object, interface, name, context)
+ except ComponentLookupError:
+ raise VerboseComponentLookupError(
+ (object,), interface, name, context)
+
+origGetMultiAdapter = _api.getMultiAdapter
+def getMultiAdapter(objects, interface=Interface, name=u'', context=None):
+ try:
+ origGetMultiAdapter(objects, interface, name, context)
+ except ComponentLookupError:
+ raise VerboseComponentLookupError(
+ objects, interface, name, context)
+
+origGetUtility = _api.getUtility
+def getUtility(interface, name='', context=None):
+ try:
+ origGetUtility(interface, name, context)
+ except ComponentLookupError:
+ raise VerboseComponentLookupError(
+ False, interface, name, context)
+
+def patch():
+ _api.getAdapterInContext = getAdapterInContext
+ _api.getAdapter = getAdapter
+ _api.getMultiAdapter = getMultiAdapter
+ _api.getUtility = getUtility
+
+def cleanup():
+ _api.getAdapterInContext = origGetAdapterInContext
+ _api.getAdapter = origGetAdapter
+ _api.getMultiAdapter = origGetMultiAdapter
+ _api.getUtility = origGetUtility
More information about the Checkins
mailing list