[Checkins] SVN: zope.introspectorui/trunk/src/zope/introspectorui/code.py Add views for displaying classes.

Uli Fouquet uli at gnufix.de
Thu Aug 14 21:47:55 EDT 2008


Log message for revision 89856:
  Add views for displaying classes.

Changed:
  U   zope.introspectorui/trunk/src/zope/introspectorui/code.py

-=-
Modified: zope.introspectorui/trunk/src/zope/introspectorui/code.py
===================================================================
--- zope.introspectorui/trunk/src/zope/introspectorui/code.py	2008-08-15 01:45:00 UTC (rev 89855)
+++ zope.introspectorui/trunk/src/zope/introspectorui/code.py	2008-08-15 01:47:54 UTC (rev 89856)
@@ -32,8 +32,10 @@
             return object
         return LocationProxy(object, parent, name)
     
-from zope.introspector.code import PackageInfo, FileInfo, ModuleInfo
+from zope.introspector.code import (PackageInfo, FileInfo, ModuleInfo,
+                                    ClassInfo, Function)
 from zope.introspector.interfaces import IDocString
+from zope.introspector.util import get_function_signature
 from zope.introspectorui.interfaces import IBreadcrumbProvider, ICodeView
 
 class Module(grok.View):
@@ -139,6 +141,77 @@
     def getBreadcrumbs(self):
         return IBreadcrumbProvider(self).getBreadcrumbs()
 
+class Class(grok.View):
+    grok.implements(ICodeView)
+    grok.context(ClassInfo)
+    grok.name('index')
+
+    def update(self):
+        self.docstring = self.getDocString(heading_only=False)
+        self.bases = self.getBases()
+        self.attributes = self.getAttributes()
+        self.methods = self.getMethods()
+
+    def getDocString(self, item=None, heading_only=True):
+        if item is None:
+            item = self.context.context
+        return IDocString(item).getDocString(heading_only=heading_only)
+
+    def _locate(self, obj):
+        from zope.introspector.code import Package
+        root = self.context.context
+        while not isinstance(root, Package) or isinstance(
+            root.__parent__, Package):
+            root = root.__parent__
+        top_pkg_name = obj.dotted_name.split('.')[0]
+        result = located(Package(top_pkg_name),
+                           root.__parent__,
+                           top_pkg_name)
+        for part in obj.dotted_name.split('.')[1:]:
+            result = located(result[part], result, part)
+        return result
+        
+
+    def getBases(self):
+        bases = list(self.context.getBases())
+        result = []
+        for base in bases:
+            url = None
+            try:
+                url = self.url(self._locate(base))
+            except AttributeError:
+                # martian.scan cannot handle builtins
+                continue
+            result.append(dict(name=base.dotted_name,
+                               url=url,
+                               doc=self.getDocString(item=base)))
+        return result
+        return (dict(name=x.dotted_name,
+                     url=self.url(self._locate(x)),
+                     doc=self.getDocString(item=x))
+                for x in bases)
+
+    def getAttributes(self):
+        return sorted([x[0] for x in self.context.getAttributes()])
+
+    def getMethods(self):
+        result = []
+        for name, obj, iface in self.context.getMethods():
+            dotted_name = self.context.context.dotted_name + '.' + name
+            item = Function(dotted_name)
+            signature = get_function_signature(obj)
+            if signature == '()':
+                signature = '(self)'
+            else:
+                signature = '(self, ' + signature[1:]
+            result.append(dict(name=name + signature,
+                               doc=self.getDocString(item=item)))
+        return sorted(result)
+
+    def getBreadcrumbs(self):
+        return IBreadcrumbProvider(self).getBreadcrumbs()
+
+
 class File(grok.View):
     grok.implements(ICodeView)
     grok.context(FileInfo)



More information about the Checkins mailing list