[Checkins] SVN: zope.introspector/branches/ulif-grokkedintrospector/src/zope/introspector/descriptionprovider.py Add description provider machinery.

Uli Fouquet uli at gnufix.de
Sun Jun 22 17:04:29 EDT 2008


Log message for revision 87657:
  Add description provider machinery.

Changed:
  U   zope.introspector/branches/ulif-grokkedintrospector/src/zope/introspector/descriptionprovider.py

-=-
Modified: zope.introspector/branches/ulif-grokkedintrospector/src/zope/introspector/descriptionprovider.py
===================================================================
--- zope.introspector/branches/ulif-grokkedintrospector/src/zope/introspector/descriptionprovider.py	2008-06-22 21:03:15 UTC (rev 87656)
+++ zope.introspector/branches/ulif-grokkedintrospector/src/zope/introspector/descriptionprovider.py	2008-06-22 21:04:28 UTC (rev 87657)
@@ -14,12 +14,39 @@
 """Provide description objects for arbitrary objects.
 """
 import grokcore.component as grok
-from zope.introspector.interfaces import IObjectDescriptionProvider
+import martian
+from zope.introspector.interfaces import (IObjectDescriptionProvider,
+                                          IObjectInfo)
 
 descriptor_registry = []
 
 class DescriptionFinder(grok.GlobalUtility):
     grok.implements(IObjectDescriptionProvider)
 
-    def getDescription(obj_or_dotted_path, *args, **kw):
-        pass
+    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)
+        # If no descriptor could be found, we return the plainest one.
+        return ObjectInfo(obj_or_dotted_path)
+
+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.
+    """
+    martian.component(DescriptionProvider)
+
+    def execute(self, obj=None, *args, **kw):
+        name = getattr(obj, 'name', '')
+        descriptor_registry.insert(0, dict(name=name, handler=obj()))
+        return True
+
+module_grokker = martian.ModuleGrokker()
+module_grokker.register(DescriptionProviderGrokker())
+



More information about the Checkins mailing list