[Checkins] SVN: zope.introspector/trunk/src/zope/introspector/descriptionprovider.py Remove Grokker definition from descriptionprovider module and improve description finder.

Uli Fouquet uli at gnufix.de
Thu Jul 3 09:10:21 EDT 2008


Log message for revision 87960:
  Remove Grokker definition from descriptionprovider module and improve description finder.

Changed:
  U   zope.introspector/trunk/src/zope/introspector/descriptionprovider.py

-=-
Modified: zope.introspector/trunk/src/zope/introspector/descriptionprovider.py
===================================================================
--- zope.introspector/trunk/src/zope/introspector/descriptionprovider.py	2008-07-03 13:09:04 UTC (rev 87959)
+++ zope.introspector/trunk/src/zope/introspector/descriptionprovider.py	2008-07-03 13:10:20 UTC (rev 87960)
@@ -14,39 +14,39 @@
 """Provide description objects for arbitrary objects.
 """
 import grokcore.component as grok
-import martian
 from zope.introspector.interfaces import (IObjectDescriptionProvider,
                                           IObjectInfo)
+from zope.introspector.objectinfo import ObjectInfo
+from zope.introspector.util import resolve
 
+# The descriptor provider registry
 descriptor_registry = []
 
 class DescriptionFinder(grok.GlobalUtility):
+    """Find a description provider.
+
+    Find a component that takes an object and returns some kind of
+    info object to describe it.
+    """
     grok.implements(IObjectDescriptionProvider)
 
     def getDescription(self, obj_or_dotted_path, *args, **kw):
-        for descriptor in descriptor_registry:
-            handler = descriptor['handler']
-            if handler.canHandle(obj_or_dotted_path):
-                return handler.getDescription(obj_or_dotted_path)
+        obj = resolve(obj_or_dotted_path)
+        sorted_reg = sorted(descriptor_registry,
+                            cmp = lambda x,y: x['priority'] - y['priority'])
+        for descriptor in sorted_reg:
+            handler = descriptor['handler']()
+            if handler.canHandle(obj):
+                return handler.getDescription(obj)
         # If no descriptor could be found, we return the plainest one.
-        return ObjectInfo(obj_or_dotted_path)
+        return ObjectInfo(obj)
 
 class DescriptionProvider(object):
-    pass
-
-class DescriptionProviderGrokker(martian.ClassGrokker):
-    """Grok descriptor providers.
-
-    Groks classes derived from ``DescriptorProvider`` on startup and
-    adds them to the local descriptor registry.
+    """Description Providers must inherit from this to be registered.
     """
-    martian.component(DescriptionProvider)
+    def canHandle(self, obj, *args, **kw):
+        return False
 
-    def execute(self, obj=None, *args, **kw):
-        name = getattr(obj, 'name', '')
-        descriptor_registry.insert(0, dict(name=name, handler=obj()))
-        return True
+    def getDescription(self, obj, *args, **kw):
+        return ObjectInfo(obj)
 
-module_grokker = martian.ModuleGrokker()
-module_grokker.register(DescriptionProviderGrokker())
-



More information about the Checkins mailing list