Commit 7e83c3b9 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.2.X] Fixed #14698 -- Ensure that module_has_sumodule doesn't mistake a...

[1.2.X] Fixed #14698 -- Ensure that module_has_sumodule doesn't mistake a cache miss for an existent package. Thanks to Łukasz Rekucki for the report and patch, and to shields for the test case.

Backport of r15362 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15364 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent a289eba5
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -6,8 +6,11 @@ import sys
def module_has_submodule(package, module_name):
    """See if 'module' is in 'package'."""
    name = ".".join([package.__name__, module_name])
    if name in sys.modules:
        return True
    try:
        # None indicates a cached miss; see mark_miss() in Python/import.c.
        return sys.modules[name] is not None
    except KeyError:
        pass
    for finder in sys.meta_path:
        if finder.find_module(name):
            return True
+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,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')

        # 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'))

class EggLoader(unittest.TestCase):
    def setUp(self):
        self.old_path = sys.path[:]