[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