[Checkins] SVN: z3c.resourceinclude/trunk/z3c/resourceinclude/zcml.py Order resource managers by file extension first, then sequence; this makes it possible to predict the order of resources of different types when registered for the same layer.

Malthe Borch mborch at gmail.com
Thu Jul 3 17:55:48 EDT 2008


Log message for revision 87969:
  Order resource managers by file extension first, then sequence; this makes it possible to predict the order of resources of different types when registered for the same layer.

Changed:
  U   z3c.resourceinclude/trunk/z3c/resourceinclude/zcml.py

-=-
Modified: z3c.resourceinclude/trunk/z3c/resourceinclude/zcml.py
===================================================================
--- z3c.resourceinclude/trunk/z3c/resourceinclude/zcml.py	2008-07-03 21:08:59 UTC (rev 87968)
+++ z3c.resourceinclude/trunk/z3c/resourceinclude/zcml.py	2008-07-03 21:55:48 UTC (rev 87969)
@@ -38,7 +38,7 @@
 def includeDirective(_context, include, base=u"", layer=IDefaultBrowserLayer, manager=None):
     if base:
         include = [base+'/'+name for name in include]
-        
+
     _context.action(
         discriminator = ('resourceInclude', IBrowserRequest, layer, "".join(include)),
         callable = handler,
@@ -50,17 +50,31 @@
 
     global managers
 
-    if manager is None:
-        manager = managers.get(layer)
+    manager_override = manager is not None
 
+    for path in include:
+        try:
+            extension =  path.rsplit('.', 1)[1]
+        except IndexError:
+            extension = None
+
+        key = (layer, extension)
+        
+        if not manager_override:
+            manager = managers.get(key)
+
         if manager is None:
-            managers[layer] = manager = ResourceManager()
+            # create new resource manager
+            managers[key] = manager = ResourceManager()
 
-            count = len(managers)
-            name = str(count).rjust(3, '0') + ':' + layer.__module__ + '.' + layer.__name__
+            # maintain order by creating a name that corresponds to
+            # the current number of resource managers
+            name = "%s-resource-manager-%03d" % (extension, len(managers))
 
+            # register as an adapter
             component.provideAdapter(
                 manager, (layer,), IResourceManager, name=name)
 
-    for path in include:
         manager.add(path)
+
+        



More information about the Checkins mailing list