summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Walls <jacobtylerwalls@gmail.com>2022-08-09 04:12:52 -0400
committerGitHub <noreply@github.com>2022-08-09 10:12:52 +0200
commit93ca875a10c4ff84772d77e52f991882309ca7aa (patch)
treeaf7d1d8c5edfa29900811942e9b1ed432bc189fc
parent4551b579ac91534cc7690974aabd36e51d1572b7 (diff)
downloadastroid-git-93ca875a10c4ff84772d77e52f991882309ca7aa.tar.gz
Fix crash in `ExplicitNamespacePackageFinder` (#1714)
* Add skip if no `six` * `urllib3` does appear to be required * Check `submodule_search_locations` Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
-rw-r--r--ChangeLog4
-rw-r--r--astroid/interpreter/_import/util.py9
-rw-r--r--requirements_test_brain.txt1
-rw-r--r--tests/unittest_modutils.py17
4 files changed, 27 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 6a5b926e..587e675f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,10 @@ What's New in astroid 2.12.3?
=============================
Release date: TBA
+* Fixed crash in ``ExplicitNamespacePackageFinder`` involving ``_SixMetaPathImporter``.
+
+ Closes #1708
+
* Fix unhandled `FutureWarning` from pandas import in cython modules
Closes #1717
diff --git a/astroid/interpreter/_import/util.py b/astroid/interpreter/_import/util.py
index c1694f85..f082e9c4 100644
--- a/astroid/interpreter/_import/util.py
+++ b/astroid/interpreter/_import/util.py
@@ -72,7 +72,8 @@ def is_namespace(modname: str) -> bool:
if found_spec and found_spec.submodule_search_locations:
last_submodule_search_locations = found_spec.submodule_search_locations
- if found_spec is None:
- return False
-
- return found_spec.origin is None
+ return (
+ found_spec is not None
+ and found_spec.submodule_search_locations is not None
+ and found_spec.origin is None
+ )
diff --git a/requirements_test_brain.txt b/requirements_test_brain.txt
index 76f0ebd1..3cde9230 100644
--- a/requirements_test_brain.txt
+++ b/requirements_test_brain.txt
@@ -7,3 +7,4 @@ PyQt6
types-python-dateutil
six
types-six
+urllib3
diff --git a/tests/unittest_modutils.py b/tests/unittest_modutils.py
index 96418b01..82bb7660 100644
--- a/tests/unittest_modutils.py
+++ b/tests/unittest_modutils.py
@@ -17,6 +17,7 @@ from pathlib import Path
from xml import etree
from xml.etree import ElementTree
+import pytest
from pytest import CaptureFixture, LogCaptureFixture
import astroid
@@ -25,6 +26,13 @@ from astroid.interpreter._import import spec
from . import resources
+try:
+ import urllib3 # pylint: disable=unused-import
+
+ HAS_URLLIB3 = True
+except ImportError:
+ HAS_URLLIB3 = False
+
def _get_file_from_object(obj) -> str:
return modutils._path_from_filename(obj.__file__)
@@ -439,5 +447,14 @@ class ExtensionPackageWhitelistTest(unittest.TestCase):
)
+@pytest.mark.skipif(not HAS_URLLIB3, reason="This test requires urllib3.")
+def test_file_info_from_modpath__SixMetaPathImporter() -> None:
+ pytest.raises(
+ ImportError,
+ modutils.file_info_from_modpath,
+ ["urllib3.packages.six.moves.http_client"],
+ )
+
+
if __name__ == "__main__":
unittest.main()