1.1 --- a/micropython/inspect.py Thu May 10 23:53:33 2012 +0200
1.2 +++ b/micropython/inspect.py Fri May 11 00:15:30 2012 +0200
1.3 @@ -937,17 +937,29 @@
1.4
1.5 for name, alias in node.names:
1.6 if name != "*":
1.7 - if module is not None and module.has_key(name):
1.8 - attr = module[name]
1.9 - self.store(alias or name, attr)
1.10 - self.use_specific_attribute(module.full_name(), name)
1.11 - if isinstance(attr.get_value(), Module) and not attr.get_value().loaded:
1.12 - self.importer.load(attr.get_value().name)
1.13 + if module is not None:
1.14 +
1.15 + # Missing names may refer to submodules.
1.16 +
1.17 + if not module.has_key(name):
1.18 + submodule = self.importer.load(node.modname + "." + name, 1)
1.19 + if submodule is not None:
1.20 + module.store(name, submodule)
1.21 +
1.22 + # Complete the import if the name was found.
1.23 +
1.24 + if module.has_key(name):
1.25 + attr = module[name]
1.26 + self.store(alias or name, attr)
1.27 + self.use_specific_attribute(module.full_name(), name)
1.28 + if isinstance(attr.get_value(), Module) and not attr.get_value().loaded:
1.29 + self.importer.load(attr.get_value().name)
1.30 + continue
1.31
1.32 # Support the import of names from missing modules.
1.33
1.34 - else:
1.35 - self.store(alias or name, UnresolvedName(name, node.modname, self))
1.36 + self.store(alias or name, UnresolvedName(name, node.modname, self))
1.37 +
1.38 else:
1.39 if module is not None:
1.40 for n in module.keys():
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/tests/import_from.py Fri May 11 00:15:30 2012 +0200
2.3 @@ -0,0 +1,7 @@
2.4 +#!/usr/bin/env python
2.5 +
2.6 +from imported_package import module
2.7 +
2.8 +result_456 = module.attribute # cannot assign to this
2.9 +
2.10 +# vim: tabstop=4 expandtab shiftwidth=4