fix early module registering by using FQMN instead of plain module name, added test...
authorStefan Behnel <stefan_ml@behnel.de>
Sat, 3 Nov 2012 23:09:34 +0000 (00:09 +0100)
committerStefan Behnel <stefan_ml@behnel.de>
Sat, 3 Nov 2012 23:09:34 +0000 (00:09 +0100)
Cython/Compiler/ModuleNode.py
tests/run/reimport_from_package.srctree [new file with mode: 0644]

index a84ec86..6778e2e 100644 (file)
@@ -2095,9 +2095,9 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
         code.putln("{")
         code.putln("PyObject *modules = PyImport_GetModuleDict(); %s" %
                    code.error_goto_if_null("modules", self.pos))
-        code.putln('if (!PyDict_GetItemString(modules, "%s")) {' % env.module_name)
+        code.putln('if (!PyDict_GetItemString(modules, "%s")) {' % env.qualified_name)
         code.putln(code.error_goto_if_neg('PyDict_SetItemString(modules, "%s", %s)' % (
-            env.module_name, env.module_cname), self.pos))
+            env.qualified_name, env.module_cname), self.pos))
         code.putln("}")
         code.putln("}")
         code.putln("#endif")
diff --git a/tests/run/reimport_from_package.srctree b/tests/run/reimport_from_package.srctree
new file mode 100644 (file)
index 0000000..8197ec5
--- /dev/null
@@ -0,0 +1,37 @@
+PYTHON setup.py build_ext --inplace
+PYTHON -c "import a"
+
+######## setup.py ########
+
+from Cython.Build.Dependencies import cythonize
+import Cython.Compiler.Options
+Cython.Compiler.Options.cimport_from_pyx = True
+
+from distutils.core import setup
+
+setup(
+    ext_modules = cythonize("**/*.pyx"),
+    )
+
+######## a.pyx ########
+
+import sys
+import a
+assert a in sys.modules.values(), list(sys.modules)
+assert sys.modules['a'] is a, list(sys.modules)
+
+from atest.package import module
+
+######## atest/__init__.py ########
+
+######## atest/package/__init__.py ########
+
+######## atest/package/module.pyx ########
+
+import sys
+assert 'atest.package.module' in sys.modules
+
+import a
+import atest.package.module as module
+assert module in sys.modules.values(), list(sys.modules)
+assert sys.modules['atest.package.module'] is module, list(sys.modules)