[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