summaryrefslogtreecommitdiff
path: root/django/utils/module_loading.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/utils/module_loading.py')
-rw-r--r--django/utils/module_loading.py27
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
+
+