[Checkins] SVN: Products.Five/branches/philikon-local-components/component/ try and improve the UI of the view listing a bit by mangling file names

Philipp von Weitershausen philikon at philikon.de
Sat Mar 25 06:04:52 EST 2006


Log message for revision 66158:
  try and improve the UI of the view listing a bit by mangling file names
  a bit and displaying a table.
  

Changed:
  U   Products.Five/branches/philikon-local-components/component/browser.py
  U   Products.Five/branches/philikon-local-components/component/templateviews.pt
  U   Products.Five/branches/philikon-local-components/component/tests.py

-=-
Modified: Products.Five/branches/philikon-local-components/component/browser.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/browser.py	2006-03-24 22:29:19 UTC (rev 66157)
+++ Products.Five/branches/philikon-local-components/component/browser.py	2006-03-25 11:04:50 UTC (rev 66158)
@@ -26,6 +26,7 @@
 
 import zope.interface
 import zope.component
+import zope.dottedname.resolve
 from zope.component.globalregistry import base
 from zope.component.persistentregistry import PersistentComponents
 from zope.publisher.interfaces.browser import IBrowserRequest
@@ -72,6 +73,48 @@
 
         self.context.setSiteManage(None)
 
+def mangleAbsoluteFilename(filename):
+    """
+    Mangle an absolute filename when the file happens to be in a
+    package.  The mangled name will then be of the form::
+
+      <dotted package name>/<base filename>.
+
+    For example, let's take Five's configure.zcml as an example.  We
+    assemble it in an OS-independent way so this test works on all
+    platforms:
+    
+      >>> def filesystemPath(*elements):
+      ...     return os.path.sep.join(elements)
+
+    We see that the filename is now mangled:
+
+      >>> mangleAbsoluteFilename(filesystemPath(
+      ...     '', 'path', 'to', 'Products', 'Five', 'configure.zcml'))
+      'Products.Five/configure.zcml'
+
+    The name of a file that's not in a package is returned unchanged:
+
+      >>> not_in_a_package = filesystemPath('', 'path', 'to', 'configure.zcml')
+      >>> mangleAbsoluteFilename(not_in_a_package) == not_in_a_package
+      True
+    """
+    if not os.path.isabs(filename):
+        raise ValueError("Can only determine package for absolute filenames")
+    dir, basename = os.path.split(filename)
+    pieces = dir.split(os.path.sep)
+    if pieces[0] == '':
+        pieces = pieces[1:]
+    while pieces:
+        try:
+            zope.dottedname.resolve.resolve('.'.join(pieces))
+            break
+        except ImportError:
+            pieces = pieces[1:]
+    if not pieces:
+        return filename
+    return '.'.join(pieces) + '/' + basename
+
 class CustomizationView(BrowserView):
 
     def templateViewRegistrations(self):
@@ -86,6 +129,18 @@
                    factory.__name__.startswith('SimpleViewClass'):
                 yield reg
 
+    def templateViewRegInfo(self):
+        def regkey(reg):
+            return reg.name
+        for reg in sorted(self.templateViewRegistrations(), key=regkey):
+            yield {
+                'viewname': reg.name,
+                'for': reg.required[0].__identifier__,
+                'type': reg.required[1].__identifier__,
+                'zptfile': mangleAbsoluteFilename(reg.factory.index.filename),
+                'zcmlfile': mangleAbsoluteFilename(reg.info.file)
+                }
+
     def templateFromViewname(self, viewname):
         view = zope.component.getMultiAdapter((self.context, self.request),
                                               name=viewname)

Modified: Products.Five/branches/philikon-local-components/component/templateviews.pt
===================================================================
--- Products.Five/branches/philikon-local-components/component/templateviews.pt	2006-03-24 22:29:19 UTC (rev 66157)
+++ Products.Five/branches/philikon-local-components/component/templateviews.pt	2006-03-25 11:04:50 UTC (rev 66158)
@@ -6,16 +6,26 @@
   <p i18n:translate="">Template-based (global) browser views available
   for this component:</p>
 
-  <ul>
-    <li tal:repeat="reg view/templateViewRegistrations">
-      <a href=""
-         tal:attributes="href string:@@customizetemplate.html?viewname=${reg/name}"
-         tal:content="reg/name">
-      </a><br />
-      Template file: <code tal:content="reg/factory/index/filename">filename</code>.<br />
-      Registered in: <code tal:content="reg/info/file">filename</code>.<br />
-    </li>
-  </ul>
+  <table>
+    <tr>
+      <th></th>
+      <th>Name of View</th>
+      <th>Registration Info</th>
+    </tr>
+    <tr tal:repeat="info view/templateViewRegInfo">
+      <td><img src="misc_/PageTemplates/zpt.gif"
+               tal:attributes="src string:${context/@@absolute_url}/misc_/PageTemplates/zpt.gif" /></td>
+      <td>
+        <a href=""
+           tal:attributes="href string:@@customizetemplate.html?viewname=${info/viewname}"
+           tal:content="info/viewname">
+        </a>
+      </td>
+      <td><code tal:content="info/zptfile">zptfile</code><br />
+          <code tal:content="info/for">for</code><br />
+          <code tal:content="info/zcmlfile">zcmlfile</code></td>
+    </tr>
+  </table>
 
   </div>
   </body>

Modified: Products.Five/branches/philikon-local-components/component/tests.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/tests.py	2006-03-24 22:29:19 UTC (rev 66157)
+++ Products.Five/branches/philikon-local-components/component/tests.py	2006-03-25 11:04:50 UTC (rev 66158)
@@ -16,14 +16,15 @@
 $Id$
 """
 import unittest
-from zope.testing.doctestunit import DocFileSuite
+from zope.testing.doctestunit import DocFileSuite, DocTestSuite
 
 __docformat__ = "reStructuredText"
 
 def test_suite():
     return unittest.TestSuite([
         DocFileSuite('component.txt', package="Products.Five.component"),
-        DocFileSuite('zpt.txt', package="Products.Five.component")
+        DocFileSuite('zpt.txt', package="Products.Five.component"),
+        DocTestSuite('Products.Five.component.browser')
         ])
 
 if __name__ == '__main__':



More information about the Checkins mailing list