Fix possible double import of cubes 3.26
authorPhilippe Pepiot <philippe.pepiot@logilab.fr>
Fri, 24 Aug 2018 17:19:02 +0200
branch3.26
changeset 12349 7e670235174f
parent 12348 6bcdd7278f7f
child 12350 ee4ad63c91e5
Fix possible double import of cubes For a new-style cube, if we import "cubicweb_<name>" and then import "cubes.<name>", the cube will be imported twice. cubes.<name> and then cubicweb_name is ok though... When using pyramid, we try to find which cube define a "includeme" by importing them with the name "cubes.<name>", so we (possibly ?) double import all new-style cube. This case may also occur in tests with PyramidCWTest. Touching the import loader to fix this scares me, so let's fix this by testing "cubicweb_<name>" *before* "cubes.name" (for old style cubes, importing cubicweb_<name> raise ImportError).
cubicweb/pyramid/core.py
--- a/cubicweb/pyramid/core.py	Wed Aug 22 16:04:39 2018 +0200
+++ b/cubicweb/pyramid/core.py	Fri Aug 24 17:19:02 2018 +0200
@@ -413,8 +413,12 @@
 
     cwcfg = config.registry['cubicweb.config']
     for cube in cwcfg.cubes():
-        pkgname = 'cubes.' + cube
-        mod = __import__(pkgname)
-        mod = getattr(mod, cube)
+        try:
+            pkgname = 'cubicweb_{}'.format(cube)
+            mod = __import__(pkgname)
+        except ImportError:
+            pkgname = 'cubes.{}'.format(cube)
+            mod = __import__(pkgname)
+            mod = getattr(mod, cube)
         if hasattr(mod, 'includeme'):
-            config.include('cubes.' + cube)
+            config.include(pkgname)