diff options
author | Chris Philip <chrisp533@gmail.com> | 2017-10-26 14:56:45 -0400 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2018-04-02 10:49:27 +0200 |
commit | e38f8abf294834c1512b1e30a21895a59e88c9ad (patch) | |
tree | e9096d03d1c9f847a31cc06ba95d78dc276c5164 | |
parent | 9169adc3048deeb2eb8d9d8ec8417de5b658354b (diff) | |
download | astroid-git-e38f8abf294834c1512b1e30a21895a59e88c9ad.tar.gz |
fix nested namespace package import
4 files changed, 14 insertions, 1 deletions
diff --git a/astroid/interpreter/_import/spec.py b/astroid/interpreter/_import/spec.py index bee51512..b328b74f 100644 --- a/astroid/interpreter/_import/spec.py +++ b/astroid/interpreter/_import/spec.py @@ -122,7 +122,7 @@ class ExplicitNamespacePackageFinder(ImpFinder): def find_module(self, modname, module_parts, processed, submodule_path): if processed: - return None + modname = '.'.join(processed + [modname]) if util.is_namespace(modname) and modname in sys.modules: submodule_path = sys.modules[modname].__path__ return ModuleSpec(name=modname, location='', diff --git a/astroid/tests/testdata/python2/data/foogle_fax-0.12.5-py2.7-nspkg.pth b/astroid/tests/testdata/python2/data/foogle_fax-0.12.5-py2.7-nspkg.pth index d3cb4591..eeb7ecac 100644 --- a/astroid/tests/testdata/python2/data/foogle_fax-0.12.5-py2.7-nspkg.pth +++ b/astroid/tests/testdata/python2/data/foogle_fax-0.12.5-py2.7-nspkg.pth @@ -1 +1,2 @@ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('foogle',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('foogle', types.ModuleType('foogle'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p) +import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('foogle','crank'));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('foogle.crank', types.ModuleType('foogle.crank'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p) diff --git a/astroid/tests/testdata/python3/data/foogle_fax-0.12.5-py2.7-nspkg.pth b/astroid/tests/testdata/python3/data/foogle_fax-0.12.5-py2.7-nspkg.pth index d3cb4591..eeb7ecac 100644 --- a/astroid/tests/testdata/python3/data/foogle_fax-0.12.5-py2.7-nspkg.pth +++ b/astroid/tests/testdata/python3/data/foogle_fax-0.12.5-py2.7-nspkg.pth @@ -1 +1,2 @@ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('foogle',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('foogle', types.ModuleType('foogle'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p) +import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('foogle','crank'));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('foogle.crank', types.ModuleType('foogle.crank'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p) diff --git a/astroid/tests/unittest_manager.py b/astroid/tests/unittest_manager.py index 67e6fbce..2b5258fe 100644 --- a/astroid/tests/unittest_manager.py +++ b/astroid/tests/unittest_manager.py @@ -138,6 +138,17 @@ class AstroidManagerTest(resources.SysPathSetup, del pkg_resources._namespace_packages['foogle'] # pylint: disable=no-member sys.modules.pop('foogle') + def test_nested_namespace_import(self): + pth = 'foogle_fax-0.12.5-py2.7-nspkg.pth' + site.addpackage(resources.RESOURCE_PATH, pth, []) + pkg_resources._namespace_packages['foogle'] = ['foogle.crank'] # pylint: disable=no-member + pkg_resources._namespace_packages['foogle.crank'] = [] # pylint: disable=no-member + try: + self.manager.ast_from_module_name('foogle.crank') + finally: + del pkg_resources._namespace_packages['foogle'] # pylint: disable=no-member + sys.modules.pop('foogle') + def test_namespace_and_file_mismatch(self): filepath = unittest.__file__ ast = self.manager.ast_from_file(filepath) |