~ubuntu-branches/ubuntu/karmic/pypy/karmic

« back to all changes in this revision

Viewing changes to pypy/module/__builtin__/app_misc.py

  • Committer: Bazaar Package Importer
  • Author(s): Alexandre Fayolle
  • Date: 2007-04-13 09:33:09 UTC
  • Revision ID: james.westby@ubuntu.com-20070413093309-yoojh4jcoocu2krz
Tags: upstream-1.0.0
ImportĀ upstreamĀ versionĀ 1.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
Plain Python definition of some miscellaneous builtin functions.
 
3
"""
 
4
 
 
5
 
 
6
def find_module(fullname,  path):
 
7
    import sys
 
8
    meta_path = sys.meta_path
 
9
    for hook in meta_path:
 
10
        loader = hook.find_module(fullname,  path)
 
11
        if loader:
 
12
            return loader
 
13
    if path != None and type(path) == str:
 
14
       pass
 
15
       # XXX Check for frozen modules ?
 
16
    if path == None:
 
17
       # XXX Check frozen
 
18
       path = sys.path
 
19
    path_hooks = sys.path_hooks
 
20
    importer_cache = sys.path_importer_cache 
 
21
    importer = None
 
22
    for p in path:
 
23
        if importer_cache.get(p,None):
 
24
            importer = importer_cache.get(p)
 
25
        else:
 
26
            importer_cache[p] = None
 
27
            for hook in path_hooks:
 
28
                try:
 
29
                    importer = hook(p)
 
30
                except ImportError:
 
31
                    pass
 
32
                else:
 
33
                    break
 
34
            if importer:
 
35
                importer_cache[p] = importer
 
36
        if importer:
 
37
            loader = importer.find_module(fullname)
 
38
            if loader:
 
39
                return loader
 
40
     #no hooks match - do normal import
 
41
 
 
42
def reload(module):
 
43
    """Reload the module.
 
44
    The module must have been successfully imported before."""
 
45
    import imp, sys, errno
 
46
 
 
47
    if type(module) not in (type(imp), type(errno)):
 
48
        raise TypeError("reload() argument must be module")
 
49
 
 
50
    name = module.__name__
 
51
    if module is not sys.modules[name]:
 
52
        raise ImportError("reload(): module %.200s not in sys.modules" % name)
 
53
 
 
54
    namepath = name.split('.')
 
55
    subname = namepath[-1]
 
56
    parent_name = '.'.join(namepath[:-1])
 
57
    parent = None
 
58
    path = None
 
59
    if parent_name:
 
60
        try:
 
61
            parent = sys.modules[parent_name]
 
62
        except KeyError:
 
63
            raise ImportError("reload(): parent %.200s not in sys.modules" %
 
64
                              parent_name)
 
65
        path = parent.__path__
 
66
    loader = find_module(name, path)
 
67
    if loader:
 
68
        mod = loader.load_module(name)
 
69
        if mod:
 
70
            return mod
 
71
 
 
72
    f, filename, description = imp.find_module(subname, path)
 
73
    try:
 
74
        new_module = imp.load_module(name, f, filename, description)
 
75
    finally:
 
76
        sys.modules[name] = module
 
77
        if f is not None:
 
78
            f.close()
 
79
 
 
80
    return new_module