# HG changeset patch # User Paul Boddie # Date 1336688130 -7200 # Node ID 0d0cb0b43c38de6e944551c30c64c43e2dc3c3e9 # Parent 40acedf4beedc0b5e152b39c62218f84c2f310bc Added support for loading submodules given as imported names in "from" statements (such as "module" in "from imported_package import module" referring to "imported_package.module"). diff -r 40acedf4beed -r 0d0cb0b43c38 micropython/inspect.py --- a/micropython/inspect.py Thu May 10 23:53:33 2012 +0200 +++ b/micropython/inspect.py Fri May 11 00:15:30 2012 +0200 @@ -937,17 +937,29 @@ for name, alias in node.names: if name != "*": - if module is not None and module.has_key(name): - attr = module[name] - self.store(alias or name, attr) - self.use_specific_attribute(module.full_name(), name) - if isinstance(attr.get_value(), Module) and not attr.get_value().loaded: - self.importer.load(attr.get_value().name) + if module is not None: + + # Missing names may refer to submodules. + + if not module.has_key(name): + submodule = self.importer.load(node.modname + "." + name, 1) + if submodule is not None: + module.store(name, submodule) + + # Complete the import if the name was found. + + if module.has_key(name): + attr = module[name] + self.store(alias or name, attr) + self.use_specific_attribute(module.full_name(), name) + if isinstance(attr.get_value(), Module) and not attr.get_value().loaded: + self.importer.load(attr.get_value().name) + continue # Support the import of names from missing modules. - else: - self.store(alias or name, UnresolvedName(name, node.modname, self)) + self.store(alias or name, UnresolvedName(name, node.modname, self)) + else: if module is not None: for n in module.keys(): diff -r 40acedf4beed -r 0d0cb0b43c38 tests/import_from.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/import_from.py Fri May 11 00:15:30 2012 +0200 @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from imported_package import module + +result_456 = module.attribute # cannot assign to this + +# vim: tabstop=4 expandtab shiftwidth=4