[Checkins] SVN: zope.introspectorui/trunk/src/zope/introspectorui/util.py Replace old breadcrumb generator with a more flexible adapter.

Uli Fouquet uli at gnufix.de
Sun Aug 10 11:39:28 EDT 2008


Log message for revision 89601:
  Replace old breadcrumb generator with a more flexible adapter.

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

-=-
Modified: zope.introspectorui/trunk/src/zope/introspectorui/util.py
===================================================================
--- zope.introspectorui/trunk/src/zope/introspectorui/util.py	2008-08-10 15:37:17 UTC (rev 89600)
+++ zope.introspectorui/trunk/src/zope/introspectorui/util.py	2008-08-10 15:39:27 UTC (rev 89601)
@@ -13,21 +13,24 @@
 ##############################################################################
 """Helpers for the zope.introspectorui.
 """
-from zope.traversing.browser.interfaces import IAbsoluteURL
-from zope.component import getMultiAdapter
+import grokcore.component as grok
+from zope.introspectorui.interfaces import IBreadcrumbProvider, ICodeView
+from zope.introspector.code import Code, Package
 
-def code_breadcrumbs(url, dotted_name):
-    """Breadcrumbs for code objects.
+class CodeBreadcrumbProvider(grok.Adapter):
+    """An adapter, that adapts 'ICodeView' objects, i.e. all views
+    defined in the ``code`` module.
+    """
+    grok.context(ICodeView)
+    grok.provides(IBreadcrumbProvider)
 
-    The `url` parameter should be a link to the object denoted by the
-    dotted name `dotted_name``.
-    """
-    url_parts = url.split('/')
-    dotted_name_parts = dotted_name.split('.')
-    start_len = len(url_parts) - len(dotted_name_parts)
-    url_start = '/'.join(url_parts[:start_len])
-    result = []
-    for name in dotted_name_parts:
-        url_start = '/'.join([url_start, name])
-        result.append(dict(name=name, url=url_start))
-    return tuple(result)
+    def getBreadcrumbs(self):
+        code_obj = self.context.context.context
+        items = code_obj.getParents()
+        result = []
+        for item in items:
+            name = getattr(item, 'name', item.dotted_name.split('.')[-1])
+            url = self.context.url(item)
+            result.append(
+                '<a href="%s">%s</a>' % (url, name))
+        return '.'.join(result)



More information about the Checkins mailing list