# HG changeset patch # User Paul Boddie # Date 1339538081 -7200 # Node ID 63a3ea888ac5b5b7fe13a6c037bc2e62c6022161 # Parent 7e2bd174ae7351c143670c53ab9a682370bd326f Added measures to prevent failure when modules provide neither a given name nor any submodules. Added circular import warnings and some more verbose output around module processing. diff -r 7e2bd174ae73 -r 63a3ea888ac5 micropython/__init__.py --- a/micropython/__init__.py Tue Jun 12 23:52:18 2012 +0200 +++ b/micropython/__init__.py Tue Jun 12 23:54:41 2012 +0200 @@ -993,6 +993,11 @@ module.set_module(p, submodule) module = submodule + # Stop descending if no package was found. + + if not d: + break + # Return either the deepest or the uppermost module. if return_leaf: @@ -1012,9 +1017,11 @@ module = self.add_module(module_name) if not module.loaded and module not in self.loading: self.loading.add(module) - #print >>sys.stderr, "Parsing", name + if self.verbose: + print >>sys.stderr, "Parsing", name module.parse(name) - #print >>sys.stderr, "Done", name + if self.verbose: + print >>sys.stderr, "Loaded", name self.loading.remove(module) module.loaded = 1 diff -r 7e2bd174ae73 -r 63a3ea888ac5 micropython/inspect.py --- a/micropython/inspect.py Tue Jun 12 23:52:18 2012 +0200 +++ b/micropython/inspect.py Tue Jun 12 23:54:41 2012 +0200 @@ -963,19 +963,25 @@ def visitFrom(self, node): module = self.importer.load(node.modname, 1) + if module and not module.loaded: + print >>sys.stderr, "Warning: a circular import of %s is being attempted in %s" % (node.modname, self.full_name()) #if module is None: # print >>sys.stderr, "Warning:", node.modname, "not imported." for name, alias in node.names: if name != "*": - if module is not None: + if module: # 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: + if submodule: + if not submodule.loaded: + print >>sys.stderr, "Warning: a circular import of %s.%s is being attempted in %s" % ( + node.modname, name, self.full_name()) + module.store(name, submodule) # Complete the import if the name was found. @@ -993,7 +999,7 @@ self.store(alias or name, UnresolvedName(name, node.modname, self)) else: - if module is not None: + if module: for n in module.keys(): attr = module[n] self.store(n, attr)