Mercurial > hg
changeset 15096:868282fa29d8
demandimport: determine at load time if __import__ has level argument
author | Simon Heimberg <simohe@besonet.ch> |
---|---|
date | Mon, 22 Aug 2011 22:50:52 +0200 |
parents | 2ca855126091 |
children | cda7a87c1871 |
files | mercurial/demandimport.py |
diffstat | 1 files changed, 11 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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):