diff options
Diffstat (limited to 'django/utils/module_loading.py')
-rw-r--r-- | django/utils/module_loading.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/django/utils/module_loading.py b/django/utils/module_loading.py new file mode 100644 index 0000000000..b23336e9df --- /dev/null +++ b/django/utils/module_loading.py @@ -0,0 +1,27 @@ +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 + + |