Skip to content

Commit

Permalink
Fixed #15525 -- Custom template tags loading breaks whenever template…
Browse files Browse the repository at this point in the history
…tags is a python file

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16703 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
SmileyChris committed Aug 28, 2011
1 parent 77189af commit 0f8f468
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
10 changes: 8 additions & 2 deletions django/utils/module_loading.py
Expand Up @@ -11,10 +11,16 @@ def module_has_submodule(package, module_name):
return sys.modules[name] is not None
except KeyError:
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:
if finder.find_module(name, package.__path__):
if finder.find_module(name, package_path):
return True
for entry in package.__path__: # No __path__, then not a package.
for entry in package_path:
try:
# Try the cached finder.
finder = sys.path_importer_cache[entry]
Expand Down
7 changes: 7 additions & 0 deletions tests/regressiontests/utils/module_loading.py
Expand Up @@ -18,6 +18,8 @@ def tearDown(self):
def test_loader(self):
"Normal module existence can be tested"
test_module = import_module('regressiontests.utils.test_module')
test_no_submodule = import_module(
'regressiontests.utils.test_no_submodule')

# An importable child
self.assertTrue(module_has_submodule(test_module, 'good_module'))
Expand All @@ -40,6 +42,11 @@ def test_loader(self):
import types # causes attempted import of 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):
def setUp(self):
self.old_path = sys.path[:]
Expand Down
1 change: 1 addition & 0 deletions tests/regressiontests/utils/test_no_submodule.py
@@ -0,0 +1 @@
# Used to test for modules which don't have submodules.

0 comments on commit 0f8f468

Please sign in to comment.