Skip to content

Commit

Permalink
Fix crash in ExplicitNamespacePackageFinder (pylint-dev#1714)
Browse files Browse the repository at this point in the history
* Add skip if no `six`
* `urllib3` does appear to be required
* Check `submodule_search_locations`

Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
  • Loading branch information
2 people authored and DanielNoord committed Aug 23, 2022
1 parent be53fcd commit 9cacf8c
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions astroid/interpreter/_import/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
1 change: 1 addition & 0 deletions requirements_test_brain.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ PyQt6
types-python-dateutil
six
types-six
urllib3
17 changes: 17 additions & 0 deletions tests/unittest_modutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from xml import etree
from xml.etree import ElementTree

import pytest
from pytest import CaptureFixture, LogCaptureFixture

import astroid
Expand All @@ -25,6 +26,13 @@

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__)
Expand Down Expand Up @@ -439,5 +447,14 @@ def test_is_module_name_part_of_extension_package_whitelist_success(self) -> Non
)


@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()

0 comments on commit 9cacf8c

Please sign in to comment.