Fixed #15525 -- Custom template tags loading breaks whenever templatetags is a python file
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16703 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
77189afb7f
commit
0f8f46802a
|
@ -11,10 +11,16 @@ def module_has_submodule(package, module_name):
|
||||||
return sys.modules[name] is not None
|
return sys.modules[name] is not None
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
try:
|
||||||
|
package_path = package.__path__ # No __path__, then not a package.
|
||||||
|
except AttributeError:
|
||||||
|
# Since the remainder of this function assumes that we're dealing with
|
||||||
|
# a package (module with a __path__), so if it's not, then bail here.
|
||||||
|
return False
|
||||||
for finder in sys.meta_path:
|
for finder in sys.meta_path:
|
||||||
if finder.find_module(name, package.__path__):
|
if finder.find_module(name, package_path):
|
||||||
return True
|
return True
|
||||||
for entry in package.__path__: # No __path__, then not a package.
|
for entry in package_path:
|
||||||
try:
|
try:
|
||||||
# Try the cached finder.
|
# Try the cached finder.
|
||||||
finder = sys.path_importer_cache[entry]
|
finder = sys.path_importer_cache[entry]
|
||||||
|
|
|
@ -18,6 +18,8 @@ class DefaultLoader(unittest.TestCase):
|
||||||
def test_loader(self):
|
def test_loader(self):
|
||||||
"Normal module existence can be tested"
|
"Normal module existence can be tested"
|
||||||
test_module = import_module('regressiontests.utils.test_module')
|
test_module = import_module('regressiontests.utils.test_module')
|
||||||
|
test_no_submodule = import_module(
|
||||||
|
'regressiontests.utils.test_no_submodule')
|
||||||
|
|
||||||
# An importable child
|
# An importable child
|
||||||
self.assertTrue(module_has_submodule(test_module, 'good_module'))
|
self.assertTrue(module_has_submodule(test_module, 'good_module'))
|
||||||
|
@ -40,6 +42,11 @@ class DefaultLoader(unittest.TestCase):
|
||||||
import types # causes attempted import of regressiontests.utils.types
|
import types # causes attempted import of regressiontests.utils.types
|
||||||
self.assertFalse(module_has_submodule(sys.modules['regressiontests.utils'], 'types'))
|
self.assertFalse(module_has_submodule(sys.modules['regressiontests.utils'], 'types'))
|
||||||
|
|
||||||
|
# A module which doesn't have a __path__ (so no submodules)
|
||||||
|
self.assertFalse(module_has_submodule(test_no_submodule, 'anything'))
|
||||||
|
self.assertRaises(ImportError, import_module,
|
||||||
|
'regressiontests.utils.test_no_submodule.anything')
|
||||||
|
|
||||||
class EggLoader(unittest.TestCase):
|
class EggLoader(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.old_path = sys.path[:]
|
self.old_path = sys.path[:]
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
# Used to test for modules which don't have submodules.
|
Loading…
Reference in New Issue