PageRenderTime 32ms CodeModel.GetById 25ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 0ms

/bangkokhotel/lib/python2.5/site-packages/django/utils/module_loading.py

https://bitbucket.org/luisrodriguez/bangkokhotel
Python | 69 lines | 55 code | 2 blank | 12 comment | 22 complexity | afc630466bf1b23f0e349a49d46f2132 MD5 | raw file
 1import imp
 2import os
 3import sys
 4
 5
 6def module_has_submodule(package, module_name):
 7    """See if 'module' is in 'package'."""
 8    name = ".".join([package.__name__, module_name])
 9    try:
10        # None indicates a cached miss; see mark_miss() in Python/import.c.
11        return sys.modules[name] is not None
12    except KeyError:
13        pass
14    try:
15        package_path = package.__path__   # No __path__, then not a package.
16    except AttributeError:
17        # Since the remainder of this function assumes that we're dealing with
18        # a package (module with a __path__), so if it's not, then bail here.
19        return False
20    for finder in sys.meta_path:
21        if finder.find_module(name, package_path):
22            return True
23    for entry in package_path:
24        try:
25            # Try the cached finder.
26            finder = sys.path_importer_cache[entry]
27            if finder is None:
28                # Implicit import machinery should be used.
29                try:
30                    file_, _, _ = imp.find_module(module_name, [entry])
31                    if file_:
32                        file_.close()
33                    return True
34                except ImportError:
35                    continue
36            # Else see if the finder knows of a loader.
37            elif finder.find_module(name):
38                return True
39            else:
40                continue
41        except KeyError:
42            # No cached finder, so try and make one.
43            for hook in sys.path_hooks:
44                try:
45                    finder = hook(entry)
46                    # XXX Could cache in sys.path_importer_cache
47                    if finder.find_module(name):
48                        return True
49                    else:
50                        # Once a finder is found, stop the search.
51                        break
52                except ImportError:
53                    # Continue the search for a finder.
54                    continue
55            else:
56                # No finder found.
57                # Try the implicit import machinery if searching a directory.
58                if os.path.isdir(entry):
59                    try:
60                        file_, _, _ = imp.find_module(module_name, [entry])
61                        if file_:
62                            file_.close()
63                        return True
64                    except ImportError:
65                        pass
66                # XXX Could insert None or NullImporter
67    else:
68        # Exhausted the search, so the module cannot be found.
69        return False