django1/django/utils/module_loading.py

28 lines
959 B
Python

import os
import imp
def module_has_submodule(mod, submod_name):
# If the module was loaded from an egg, __loader__ will be set and
# its find_module must be used to search for submodules.
loader = getattr(mod, '__loader__', None)
if loader:
mod_path = "%s.%s" % (mod.__name__, submod_name)
mod_path = mod_path[len(loader.prefix):]
x = loader.find_module(mod_path)
if x is None:
# zipimport.zipimporter.find_module is documented to take
# dotted paths but in fact through Pyton 2.7 is observed
# to require os.sep in place of dots...so try using os.sep
# if the dotted path version failed to find the requested
# submodule.
x = loader.find_module(mod_path.replace('.', os.sep))
return x is not None
try:
imp.find_module(submod_name, mod.__path__)
return True
except ImportError:
return False