24 def demandload(scope, modules): |
24 def demandload(scope, modules): |
25 """ fake demandload function that collects the required modules |
25 """ fake demandload function that collects the required modules |
26 foo import foo |
26 foo import foo |
27 foo bar import foo, bar |
27 foo bar import foo, bar |
28 foo.bar import foo.bar |
28 foo.bar import foo.bar |
|
29 foo@bar import foo as bar |
29 foo:bar from foo import bar |
30 foo:bar from foo import bar |
30 foo:bar,quux from foo import bar, quux |
31 foo:bar,quux from foo import bar, quux |
31 foo.bar:quux from foo.bar import quux""" |
32 foo.bar:quux from foo.bar import quux""" |
32 |
33 |
33 for m in modules.split(): |
34 for m in modules.split(): |
36 module, fromlist = m.split(':') |
37 module, fromlist = m.split(':') |
37 fromlist = fromlist.split(',') |
38 fromlist = fromlist.split(',') |
38 except: |
39 except: |
39 module = m |
40 module = m |
40 fromlist = [] |
41 fromlist = [] |
|
42 as = None |
|
43 if '@' in module: |
|
44 module, as = module.split("@") |
41 mod = __import__(module, scope, scope, fromlist) |
45 mod = __import__(module, scope, scope, fromlist) |
42 if fromlist == []: |
46 if fromlist == []: |
43 # mod is only the top package, but we need all packages |
47 # mod is only the top package, but we need all packages |
44 comp = module.split('.') |
48 comp = module.split('.') |
45 i = 1 |
49 i = 1 |
46 mn = comp[0] |
50 mn = comp[0] |
47 while True: |
51 while True: |
48 # mn and mod.__name__ might not be the same |
52 # mn and mod.__name__ might not be the same |
49 scope[mn] = mod |
53 if not as: |
|
54 as = mn |
|
55 scope[as] = mod |
50 requiredmodules[mod.__name__] = 1 |
56 requiredmodules[mod.__name__] = 1 |
51 if len(comp) == i: break |
57 if len(comp) == i: break |
52 mod = getattr(mod,comp[i]) |
58 mod = getattr(mod,comp[i]) |
53 mn = string.join(comp[:i+1],'.') |
59 mn = string.join(comp[:i+1],'.') |
54 i += 1 |
60 i += 1 |