[cwconfig] Add optional configuration param to load a UI cube before other cubes
authorRémi Cardona <remi.cardona@logilab.fr>
Fri, 15 Mar 2013 12:11:29 +0100
changeset 8850 4032499c701e
parent 8849 7da8339cd768
child 8851 0020aa12af07
[cwconfig] Add optional configuration param to load a UI cube before other cubes Needed later on to load UI cubes such as legacyui, and one day squareui.
cwconfig.py
web/webconfig.py
--- a/cwconfig.py	Tue Apr 02 12:13:06 2013 +0200
+++ b/cwconfig.py	Fri Mar 15 12:11:29 2013 +0100
@@ -565,19 +565,27 @@
                         todo.append(depcube)
         return cubes
 
-    @classmethod
-    def reorder_cubes(cls, cubes):
+    def reorder_cubes(self, cubes):
         """reorder cubes from the top level cubes to inner dependencies
         cubes
         """
         from logilab.common.graph import ordered_nodes, UnorderableGraph
+        # See help string for 'ui-cube' in web/webconfig.py for the reasons
+        # behind this hack.
+        uicube = self.get('ui-cube', None)
         graph = {}
+        if uicube:
+            graph[uicube] = set()
         for cube in cubes:
             cube = CW_MIGRATION_MAP.get(cube, cube)
-            graph[cube] = set(dep for dep in cls.cube_dependencies(cube)
+            graph[cube] = set(dep for dep in self.cube_dependencies(cube)
                               if dep in cubes)
-            graph[cube] |= set(dep for dep in cls.cube_recommends(cube)
+            graph[cube] |= set(dep for dep in self.cube_recommends(cube)
                                if dep in cubes)
+            if uicube and cube != uicube \
+                    and cube not in self.cube_dependencies(uicube) \
+                    and cube not in self.cube_recommends(uicube):
+                graph[cube].add(uicube)
         try:
             return ordered_nodes(graph)
         except UnorderableGraph as ex:
--- a/web/webconfig.py	Tue Apr 02 12:13:06 2013 +0200
+++ b/web/webconfig.py	Fri Mar 15 12:11:29 2013 +0100
@@ -111,6 +111,14 @@
           'group': 'web', 'level': 3,
           }),
         # web configuration
+        ('ui-cube',
+         {'type' : 'string',
+          'default': None,
+          'help': 'the name of the UI cube that will be loaded before all other '\
+          'cubes. Setting this value to None will instruct cubicweb not to load '\
+          'any extra cube.',
+          'group': 'web', 'level': 3,
+          }),
         ('https-url',
          {'type' : 'string',
           'default': None,