From: Zac Medico Date: Sun, 22 Feb 2009 03:42:37 +0000 (-0000) Subject: Fix _LazyImportFrom to use the correct module name when registering and X-Git-Tag: v2.2_rc24~134 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=69bec35e43ad2e4d2a6c96a4c23e2355f9293f54;p=portage.git Fix _LazyImportFrom to use the correct module name when registering and unregistering. svn path=/main/trunk/; revision=12679 --- diff --git a/pym/portage/proxy/lazyimport.py b/pym/portage/proxy/lazyimport.py index cf0db77ce..954b29d74 100644 --- a/pym/portage/proxy/lazyimport.py +++ b/pym/portage/proxy/lazyimport.py @@ -65,7 +65,11 @@ class _LazyImport(ObjectProxy): class _LazyImportFrom(_LazyImport): - __slots__ = () + __slots__ = ('_attr_name',) + + def __init__(self, scope, name, attr_name, alias): + object.__setattr__(self, '_attr_name', attr_name) + _LazyImport.__init__(self, scope, alias, name) def _get_target(self): try: @@ -73,10 +77,9 @@ class _LazyImportFrom(_LazyImport): except AttributeError: pass name = object.__getattribute__(self, '_name') - components = name.split('.') - parent_name = '.'.join(components[:-1]) - __import__(parent_name) - target = getattr(sys.modules[parent_name], components[-1]) + attr_name = object.__getattribute__(self, '_attr_name') + __import__(name) + target = getattr(sys.modules[name], attr_name) object.__setattr__(self, '_target', target) object.__getattribute__(self, '_scope')[ object.__getattribute__(self, '_alias')] = target @@ -138,14 +141,14 @@ def lazyimport(scope, *args): alias = s.split('@', 1) if len(alias) == 1: alias = alias[0] - orig = alias + attr_name = alias else: - orig, alias = alias + attr_name, alias = alias if already_imported is not None: try: - scope[alias] = getattr(already_imported, orig) + scope[alias] = getattr(already_imported, attr_name) except AttributeError: - raise ImportError('cannot import name %s' % orig) + raise ImportError('cannot import name %s' % attr_name) else: - scope[alias] = _LazyImportFrom(scope, alias, - name + '.' + orig) + scope[alias] = \ + _LazyImportFrom(scope, name, attr_name, alias)