# HG changeset patch # User Simon Heimberg # Date 1314046252 -7200 # Node ID 868282fa29d81a123f576e7bde8cfe4f7183f18c # Parent 2ca855126091fb099f3534e32258e9f04e9e7169 demandimport: determine at load time if __import__ has level argument diff -r 2ca855126091 -r 868282fa29d8 mercurial/demandimport.py --- a/mercurial/demandimport.py Wed Sep 14 13:57:56 2011 +0200 +++ b/mercurial/demandimport.py Mon Aug 22 22:50:52 2011 +0200 @@ -29,6 +29,15 @@ nothing = object() +try: + _origimport(__builtin__.__name__, {}, {}, None, -1) +except TypeError: # no level argument + def _import(name, globals, locals, fromlist, level): + "call _origimport with no level argument" + return _origimport(name, globals, locals, fromlist) +else: + _import = _origimport + class _demandmod(object): """module demand-loader and proxy""" def __init__(self, name, globals, locals): @@ -83,20 +92,14 @@ def _demandimport(name, globals=None, locals=None, fromlist=None, level=-1): if not locals or name in ignore or fromlist == ('*',): # these cases we can't really delay - if level == -1: - return _origimport(name, globals, locals, fromlist) - else: - return _origimport(name, globals, locals, fromlist, level) + return _import(name, globals, locals, fromlist, level) elif not fromlist: # import a [as b] if '.' in name: # a.b base, rest = name.split('.', 1) # email.__init__ loading email.mime if globals and globals.get('__name__', None) == base: - if level != -1: - return _origimport(name, globals, locals, fromlist, level) - else: - return _origimport(name, globals, locals, fromlist) + return _import(name, globals, locals, fromlist, level) # if a is already demand-loaded, add b to its submodule list if base in locals: if isinstance(locals[base], _demandmod):