mercurial/demandimport.py
author Augie Fackler <durin42@gmail.com>
Sun, 10 Oct 2010 12:41:36 -0500
changeset 12715 33820dccbea4
parent 12686 fe31f834a9ff
child 12801 cddea24aafed
permissions -rw-r--r--
revset: rename tagged() to tag() and allow it to take an optional tag name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     1
# demandimport.py - global demand-loading of modules for Mercurial
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     2
#
4635
63b9d2deed48 Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4631
diff changeset
     3
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     4
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 7861
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10242
diff changeset
     6
# GNU General Public License version 2 or any later version.
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     7
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     8
'''
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     9
demandimport - automatic demandloading of modules
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    10
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    11
To enable this module, do:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    12
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    13
  import demandimport; demandimport.enable()
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    14
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    15
Imports of the following forms will be demand-loaded:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    16
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    17
  import a, b.c
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    18
  import a.b as c
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    19
  from a import b,c # a will be loaded immediately
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    20
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    21
These imports will not be delayed:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    22
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    23
  from a import *
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    24
  b = __import__(a)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    25
'''
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    26
7727
25fc4c620e54 demandimport: patch __builtin__ instead of __builtins__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5929
diff changeset
    27
import __builtin__
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    28
_origimport = __import__
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    29
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    30
class _demandmod(object):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    31
    """module demand-loader and proxy"""
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    32
    def __init__(self, name, globals, locals, level):
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    33
        if '.' in name:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    34
            head, rest = name.split('.', 1)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    35
            after = [rest]
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    36
        else:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    37
            head = name
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    38
            after = []
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    39
        object.__setattr__(self, "_data", (head, globals, locals, after, level))
3896
3b628b5da9e9 use parent.__setattr__ instead of __dict__
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3877
diff changeset
    40
        object.__setattr__(self, "_module", None)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    41
    def _extend(self, name):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    42
        """add to the list of submodules to load"""
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    43
        self._data[3].append(name)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    44
    def _load(self):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    45
        if not self._module:
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    46
            head, globals, locals, after, level = self._data
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    47
            if level is not None:
12686
fe31f834a9ff demandimport: fix an obscure corner-case.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 11942
diff changeset
    48
                mod = _origimport(head, globals, locals, level=level)
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    49
            else:
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    50
                mod = _origimport(head, globals, locals)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    51
            # load submodules
3921
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    52
            def subload(mod, p):
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    53
                h, t = p, None
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    54
                if '.' in p:
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    55
                    h, t = p.split('.', 1)
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    56
                if not hasattr(mod, h):
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    57
                    # TODO: should we adjust the level here?
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    58
                    submod = _demandmod(p, mod.__dict__, mod.__dict__,
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    59
                                        level=level)
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
    60
                    setattr(mod, h, submod)
3926
de6ae8f016af demandimport: handle already-loaded nested modules in subload
Brendan Cully <brendan@kublai.com>
parents: 3921
diff changeset
    61
                elif t:
3921
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    62
                    subload(getattr(mod, h), t)
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    63
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    64
            for x in after:
3921
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    65
                subload(mod, x)
6d0d025e125a demandimport: fix import x.y.z as a when x.y is already imported.
Matt Mackall <mpm@selenic.com>
parents: 3903
diff changeset
    66
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    67
            # are we in the locals dictionary still?
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    68
            if locals and locals.get(head) == self:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    69
                locals[head] = mod
3896
3b628b5da9e9 use parent.__setattr__ instead of __dict__
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3877
diff changeset
    70
            object.__setattr__(self, "_module", mod)
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents: 4626
diff changeset
    71
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    72
    def __repr__(self):
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents: 4626
diff changeset
    73
        if self._module:
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents: 4626
diff changeset
    74
            return "<proxied module '%s'>" % self._data[0]
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    75
        return "<unloaded module '%s'>" % self._data[0]
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    76
    def __call__(self, *args, **kwargs):
5639
7dd5cf9d1e09 demandload: give better diagnostic for call of an unloaded module
Matt Mackall <mpm@selenic.com>
parents: 5098
diff changeset
    77
        raise TypeError("%s object is not callable" % repr(self))
3903
f9136599700f Make demandimport pass all tests on python2.5.
Brendan Cully <brendan@kublai.com>
parents: 3898
diff changeset
    78
    def __getattribute__(self, attr):
f9136599700f Make demandimport pass all tests on python2.5.
Brendan Cully <brendan@kublai.com>
parents: 3898
diff changeset
    79
        if attr in ('_data', '_extend', '_load', '_module'):
f9136599700f Make demandimport pass all tests on python2.5.
Brendan Cully <brendan@kublai.com>
parents: 3898
diff changeset
    80
            return object.__getattribute__(self, attr)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    81
        self._load()
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    82
        return getattr(self._module, attr)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    83
    def __setattr__(self, attr, val):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    84
        self._load()
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    85
        setattr(self._module, attr, val)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    86
5929
e160f2312815 demandimport: handling new relative imports
Ali Gholami Rudi <aligrudi@users.sourceforge.net>
parents: 5639
diff changeset
    87
def _demandimport(name, globals=None, locals=None, fromlist=None, level=None):
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    88
    if not locals or name in ignore or fromlist == ('*',):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    89
        # these cases we can't really delay
9315
fb66a7d3f28f dispatch: also pass level argument to __import__ for ignored modules
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8225
diff changeset
    90
        if level is None:
fb66a7d3f28f dispatch: also pass level argument to __import__ for ignored modules
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8225
diff changeset
    91
            return _origimport(name, globals, locals, fromlist)
fb66a7d3f28f dispatch: also pass level argument to __import__ for ignored modules
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8225
diff changeset
    92
        else:
fb66a7d3f28f dispatch: also pass level argument to __import__ for ignored modules
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 8225
diff changeset
    93
            return _origimport(name, globals, locals, fromlist, level)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    94
    elif not fromlist:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    95
        # import a [as b]
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    96
        if '.' in name: # a.b
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    97
            base, rest = name.split('.', 1)
3903
f9136599700f Make demandimport pass all tests on python2.5.
Brendan Cully <brendan@kublai.com>
parents: 3898
diff changeset
    98
            # email.__init__ loading email.mime
f9136599700f Make demandimport pass all tests on python2.5.
Brendan Cully <brendan@kublai.com>
parents: 3898
diff changeset
    99
            if globals and globals.get('__name__', None) == base:
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   100
                if level is not None:
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   101
                    return _origimport(name, globals, locals, fromlist, level)
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   102
                else:
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   103
                    return _origimport(name, globals, locals, fromlist)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   104
            # if a is already demand-loaded, add b to its submodule list
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   105
            if base in locals:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   106
                if isinstance(locals[base], _demandmod):
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   107
                    locals[base]._extend(rest)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   108
                return locals[base]
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   109
        return _demandmod(name, globals, locals, level=level)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   110
    else:
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   111
        # from a import b,c,d
5929
e160f2312815 demandimport: handling new relative imports
Ali Gholami Rudi <aligrudi@users.sourceforge.net>
parents: 5639
diff changeset
   112
        if level is not None:
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   113
            mod = _origimport(name, globals, locals, level=level)
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   114
        else:
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   115
            mod = _origimport(name, globals, locals)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   116
        # recurse down the module chain
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   117
        for comp in name.split('.')[1:]:
4626
eb99af2d845e Fix for demandimport.py and Windows compiled version.
Lee Cantey <lcantey@gmail.com>
parents: 4126
diff changeset
   118
            if not hasattr(mod, comp):
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   119
                # TODO: should we adjust the level here?
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   120
                submod = _demandmod(comp, mod.__dict__, mod.__dict__,
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   121
                                    level=level)
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   122
                setattr(mod, comp, submod)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   123
            mod = getattr(mod, comp)
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   124
        for x in fromlist:
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   125
            # set requested submodules for demand load
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   126
            if not(hasattr(mod, x)):
11942
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   127
                # TODO: should we adjust the level here?
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   128
                submod = _demandmod(x, mod.__dict__, locals, level=level)
50a4e55aa278 demandimport: store level argument on _demandmod instances
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 10612
diff changeset
   129
                setattr(mod, x, submod)
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   130
        return mod
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   131
5098
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   132
ignore = [
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   133
    '_hashlib',
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   134
    '_xmlplus',
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   135
    'fcntl',
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   136
    'win32com.gen_py',
10242
ecd0a5c8bbe5 demandimport: ignore _winreg (used in python-2.7 mimetypes)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9458
diff changeset
   137
    '_winreg', # 2.7 mimetypes needs immediate ImportError
7861
2bc14da14992 demandimport: blacklist pythoncom
Steve Borho <steve@borho.org>
parents: 7727
diff changeset
   138
    'pythoncom',
5098
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   139
    # imported by tarfile, not available under Windows
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   140
    'pwd',
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   141
    'grp',
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   142
    # imported by profile, itself imported by hotshot.stats,
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   143
    # not available under Windows
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   144
    'resource',
9458
ffeaf5ba25d8 demandimport: blacklist gtk
Steve Borho <steve@borho.org>
parents: 9315
diff changeset
   145
    # this trips up many extension authors
ffeaf5ba25d8 demandimport: blacklist gtk
Steve Borho <steve@borho.org>
parents: 9315
diff changeset
   146
    'gtk',
10598
1037bd445768 demandimport: add __main__ to the blacklist (because of setuptools)
Greg Ward <greg-hg@gerg.ca>
parents: 10263
diff changeset
   147
    # setuptools' pkg_resources.py expects "from __main__ import x" to
1037bd445768 demandimport: add __main__ to the blacklist (because of setuptools)
Greg Ward <greg-hg@gerg.ca>
parents: 10263
diff changeset
   148
    # raise ImportError if x not defined
1037bd445768 demandimport: add __main__ to the blacklist (because of setuptools)
Greg Ward <greg-hg@gerg.ca>
parents: 10263
diff changeset
   149
    '__main__',
10612
30553ac3e355 demandimport: blacklist _ssl (issue1964)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10598
diff changeset
   150
    '_ssl', # conditional imports in the stdlib, issue1964
5098
0bbd86b847dd demandimport: ignore resource module, not available under Windows.
Patrick Mezard <pmezard@gmail.com>
parents: 5097
diff changeset
   151
    ]
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   152
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   153
def enable():
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   154
    "enable global demand-loading of modules"
7727
25fc4c620e54 demandimport: patch __builtin__ instead of __builtins__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5929
diff changeset
   155
    __builtin__.__import__ = _demandimport
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   156
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   157
def disable():
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   158
    "disable global demand-loading of modules"
7727
25fc4c620e54 demandimport: patch __builtin__ instead of __builtins__
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5929
diff changeset
   159
    __builtin__.__import__ = _origimport
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   160