[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