summaryrefslogtreecommitdiff
path: root/tests/regressiontests/utils/module_loading.py
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-04-22 12:03:18 +0000
committerJannis Leidel <jannis@leidel.info>2011-04-22 12:03:18 +0000
commit0e5d5d6218e61aa6a3ac8ddadbd0bb86f7b02aa0 (patch)
treef7b9795348e526b9ce5882e3997b208ca45e6ba0 /tests/regressiontests/utils/module_loading.py
parent01d0bf011ef9c92892fa0717764d74ecfd2ef2b6 (diff)
Fixed #15662 -- Made sure the module_has_submodule utility function follow correct PEP 302, passing the package as the second argument to the find_module method of the importer. Thanks, Bradley Ayers.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16075 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/utils/module_loading.py')
-rw-r--r--tests/regressiontests/utils/module_loading.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/regressiontests/utils/module_loading.py b/tests/regressiontests/utils/module_loading.py
index 24c0b0753f..2e9d167fe9 100644
--- a/tests/regressiontests/utils/module_loading.py
+++ b/tests/regressiontests/utils/module_loading.py
@@ -1,5 +1,6 @@
import os
import sys
+import imp
from zipimport import zipimporter
from django.utils import unittest
@@ -8,6 +9,12 @@ from django.utils.module_loading import module_has_submodule
class DefaultLoader(unittest.TestCase):
+ def setUp(self):
+ sys.meta_path.insert(0, ProxyFinder())
+
+ def tearDown(self):
+ sys.meta_path.pop(0)
+
def test_loader(self):
"Normal module existence can be tested"
test_module = import_module('regressiontests.utils.test_module')
@@ -25,6 +32,10 @@ class DefaultLoader(unittest.TestCase):
self.assertFalse(module_has_submodule(test_module, 'no_such_module'))
self.assertRaises(ImportError, import_module, 'regressiontests.utils.test_module.no_such_module')
+ # A child that doesn't exist, but is the name of a package on the path
+ self.assertFalse(module_has_submodule(test_module, 'django'))
+ self.assertRaises(ImportError, import_module, 'regressiontests.utils.test_module.django')
+
# Don't be confused by caching of import misses
import types # causes attempted import of regressiontests.utils.types
self.assertFalse(module_has_submodule(sys.modules['regressiontests.utils'], 'types'))
@@ -84,6 +95,25 @@ class EggLoader(unittest.TestCase):
self.assertFalse(module_has_submodule(egg_module, 'no_such_module'))
self.assertRaises(ImportError, import_module, 'egg_module.sub1.sub2.no_such_module')
+class ProxyFinder(object):
+ def __init__(self):
+ self._cache = {}
+
+ def find_module(self, fullname, path=None):
+ tail = fullname.rsplit('.', 1)[-1]
+ try:
+ self._cache[fullname] = imp.find_module(tail, path)
+ except ImportError:
+ return None
+ else:
+ return self # this is a loader as well
+
+ def load_module(self, fullname):
+ if fullname in sys.modules:
+ return sys.modules[fullname]
+ fd, fn, info = self._cache[fullname]
+ return imp.load_module(fullname, fd, fn, info)
+
class TestFinder(object):
def __init__(self, *args, **kwargs):
self.importer = zipimporter(*args, **kwargs)