[Checkins]
SVN: grokui.introspector/trunk/src/grokui/introspector/introspector.py
Add traverser for code instrospection.
Uli Fouquet
uli at gnufix.de
Fri Jul 18 17:41:06 EDT 2008
Log message for revision 88554:
Add traverser for code instrospection.
Changed:
U grokui.introspector/trunk/src/grokui/introspector/introspector.py
-=-
Modified: grokui.introspector/trunk/src/grokui/introspector/introspector.py
===================================================================
--- grokui.introspector/trunk/src/grokui/introspector/introspector.py 2008-07-18 21:09:30 UTC (rev 88553)
+++ grokui.introspector/trunk/src/grokui/introspector/introspector.py 2008-07-18 21:41:05 UTC (rev 88554)
@@ -15,7 +15,8 @@
"""
import grok
from zope.component import getUtility
-from zope.introspector.interfaces import IRegistryInfo
+from zope.introspector.interfaces import (IRegistryInfo,
+ IObjectDescriptionProvider,)
from zope.location.interfaces import ILocation
from zope.traversing.interfaces import ITraversable
from grok.interfaces import IContext
@@ -59,8 +60,31 @@
) for x in uinfo.getAllUtilities()]
return utilities
+
class CodeIntrospector(grok.Model):
grok.implements(IGrokCodeIntrospector)
+
+ def __init__(self, dotted_name=None, *args, **kw):
+ super(CodeIntrospector, self).__init__(*args, **kw)
+ self.dotted_name = dotted_name
+ def getIntrospector(self):
+ if self.dotted_name is None:
+ return self
+ provider = getUtility(IObjectDescriptionProvider)
+ description = provider.getDescription(dotted_name=self.dotted_name)
+ return description
+
+class CodeTraverser(grok.Traverser):
+ grok.context(IGrokCodeIntrospector)
+
+ def traverse(self, path, *args, **kw):
+ dotted_name = self.context.dotted_name or ''
+ if len(dotted_name):
+ dotted_name += '.'
+ dotted_name += path
+ introspector = CodeIntrospector(dotted_name=dotted_name)
+ return introspector.getIntrospector()
+
class ZODBBrowser(grok.Model):
grok.implements(IGrokZODBBrowser)
More information about the Checkins
mailing list