[Checkins] SVN: z3c.versionedresource/trunk/ * Feature: Add ability to specify multiple layers.

Stephan Richter srichter at cosmos.phy.tufts.edu
Sun Sep 28 01:53:14 EDT 2008


Log message for revision 91567:
  * Feature: Add ability to specify multiple layers.
  

Changed:
  U   z3c.versionedresource/trunk/CHANGES.txt
  U   z3c.versionedresource/trunk/setup.py
  U   z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt
  U   z3c.versionedresource/trunk/src/z3c/versionedresource/list.py
  U   z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py

-=-
Modified: z3c.versionedresource/trunk/CHANGES.txt
===================================================================
--- z3c.versionedresource/trunk/CHANGES.txt	2008-09-27 19:55:48 UTC (rev 91566)
+++ z3c.versionedresource/trunk/CHANGES.txt	2008-09-28 05:53:11 UTC (rev 91567)
@@ -2,6 +2,11 @@
 CHANGES
 =======
 
+Version 0.4.0 (2008-09-27)
+--------------------------
+
+* Feature: Add ability to specify multiple layers.
+
 Version 0.3.0 (2008-08-09)
 --------------------------
 

Modified: z3c.versionedresource/trunk/setup.py
===================================================================
--- z3c.versionedresource/trunk/setup.py	2008-09-27 19:55:48 UTC (rev 91566)
+++ z3c.versionedresource/trunk/setup.py	2008-09-28 05:53:11 UTC (rev 91567)
@@ -23,7 +23,7 @@
 
 setup (
     name='z3c.versionedresource',
-    version='0.4.0dev',
+    version='0.4.0',
     author = "Stephan Richter and the Zope Community",
     author_email = "zope3-dev at zope.org",
     description = "Versioned Resources",

Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt	2008-09-27 19:55:48 UTC (rev 91566)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt	2008-09-28 05:53:11 UTC (rev 91567)
@@ -412,7 +412,8 @@
 layer. Optionally a URL can be passed in to alter the resource URLs.
 
   >>> resources = list.getResources(
-  ...     'z3c.versionedresource.tests.test_doc.ITestLayer')
+  ...     ['z3c.versionedresource.tests.test_doc.ITestLayer',
+  ...      'z3c.versionedresource.tests.test_doc.ITestLayer2'])
   >>> sorted(resources)
   [(u'zcml-subdir', <DirectoryResource u'.../testfiles/subdir'>),
    (u'zcml-test.gif', <FileResource u'.../testfiles/test.gif'>)]

Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/list.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/list.py	2008-09-27 19:55:48 UTC (rev 91566)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/list.py	2008-09-28 05:53:11 UTC (rev 91567)
@@ -34,24 +34,30 @@
         if name in list:
             list.remove(name)
 
-def getResources(layerPath, url='http://localhost/'):
-    # Get the layer interface
-    moduleName, layerName = layerPath.rsplit('.', 1)
-    module = __import__(moduleName, {}, {}, [1])
-    layer = getattr(module, layerName)
-    # Now we create a test request with that layer and our custom base URL.
-    request = TestRequest(environ={'SERVER_URL': url})
-    zope.interface.alsoProvides(request, layer)
-    # Next we look up all the resources
-    return tuple(
-        zope.component.getAdapters((request,), interfaces.IVersionedResource))
+def getResources(layerPaths, url='http://localhost/'):
+    resources = ()
+    for layerPath in layerPaths:
+        # Get the layer interface
+        moduleName, layerName = layerPath.rsplit('.', 1)
+        module = __import__(moduleName, {}, {}, ['None'])
+        layer = getattr(module, layerName)
+        # Now we create a test request with that layer and our custom base URL.
+        request = TestRequest(environ={'SERVER_URL': url})
+        zope.interface.alsoProvides(request, layer)
+        # Next we look up all the resources
+        resources += tuple(
+            zope.component.getAdapters(
+                (request,), interfaces.IVersionedResource))
+    return resources
 
 def getResourceUrls(resources):
     paths = []
     for name, res in resources:
         # For file-based resources, just report their URL.
         if not isinstance(res, DirectoryResource):
-            paths.append(res())
+            # Avoid duplicate paths
+            if res() not in paths:
+                paths.append(res())
         # For directory resources, we want to walk the tree.
         baseURL = res()
         path = res.context.path
@@ -62,7 +68,10 @@
             # Produce a path for the resource
             relativePath = root.replace(path, '')
             for file in files:
-                paths.append(baseURL + relativePath + '/' + file)
+                fullPath = baseURL + relativePath + '/' + file
+                # Avoid duplicate paths
+                if fullPath not in paths:
+                    paths.append(fullPath)
     return paths
 
 def storeResource(dir, name, resource, zip=False):
@@ -93,7 +102,7 @@
     # Run the configuration
     context = xmlconfig.file(options.zcml)
     # Get resource list
-    resources = getResources(options.layer, options.url)
+    resources = getResources(options.layers, options.url)
     # If we only want to list the paths
     if options.listOnly:
         paths = getResourceUrls(resources)
@@ -117,8 +126,7 @@
     parser, "Configuration", "Configuration of lookup and reporting parameters.")
 
 config.add_option(
-    '--layer', '-l', action="store", dest='layer',
-    default='zope.interface.Interface',
+    '--layer', '-l', action="append", dest='layers',
     help="""The layer for which to lookup the resources.""")
 
 config.add_option(

Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py	2008-09-27 19:55:48 UTC (rev 91566)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py	2008-09-28 05:53:11 UTC (rev 91567)
@@ -28,6 +28,9 @@
 class ITestLayer(IDefaultBrowserLayer):
     pass
 
+class ITestLayer2(IDefaultBrowserLayer):
+    pass
+
 class ResourceFactory(object):
 
     def __init__(self, request):



More information about the Checkins mailing list