##// END OF EJS Templates
demandimport: pass proper level to __import__ in Python 3...
Gregory Szorc -
r21290:74be3fb1 default
parent child Browse files
Show More
@@ -24,13 +24,17 b' These imports will not be delayed:'
24 b = __import__(a)
24 b = __import__(a)
25 '''
25 '''
26
26
27 import __builtin__, os
27 import __builtin__, os, sys
28 _origimport = __import__
28 _origimport = __import__
29
29
30 nothing = object()
30 nothing = object()
31
31
32 try:
32 try:
33 _origimport(__builtin__.__name__, {}, {}, None, -1)
33 # Python 3 doesn't have relative imports nor level -1.
34 level = -1
35 if sys.version_info[0] >= 3:
36 level = 0
37 _origimport(__builtin__.__name__, {}, {}, None, level)
34 except TypeError: # no level argument
38 except TypeError: # no level argument
35 def _import(name, globals, locals, fromlist, level):
39 def _import(name, globals, locals, fromlist, level):
36 "call _origimport with no level argument"
40 "call _origimport with no level argument"
@@ -55,7 +59,7 b' def _hgextimport(importfunc, name, globa'
55
59
56 class _demandmod(object):
60 class _demandmod(object):
57 """module demand-loader and proxy"""
61 """module demand-loader and proxy"""
58 def __init__(self, name, globals, locals, level=-1):
62 def __init__(self, name, globals, locals, level=level):
59 if '.' in name:
63 if '.' in name:
60 head, rest = name.split('.', 1)
64 head, rest = name.split('.', 1)
61 after = [rest]
65 after = [rest]
@@ -105,7 +109,7 b' class _demandmod(object):'
105 self._load()
109 self._load()
106 setattr(self._module, attr, val)
110 setattr(self._module, attr, val)
107
111
108 def _demandimport(name, globals=None, locals=None, fromlist=None, level=-1):
112 def _demandimport(name, globals=None, locals=None, fromlist=None, level=level):
109 if not locals or name in ignore or fromlist == ('*',):
113 if not locals or name in ignore or fromlist == ('*',):
110 # these cases we can't really delay
114 # these cases we can't really delay
111 return _hgextimport(_import, name, globals, locals, fromlist, level)
115 return _hgextimport(_import, name, globals, locals, fromlist, level)
General Comments 0
You need to be logged in to leave comments. Login now