mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-11 15:24:18 +00:00
Merge pull request #1631 from PyCQA/dupe-sys-path
prevent duplicate plugin discovery on misconfigured pythons
This commit is contained in:
commit
d20bb97f41
2 changed files with 24 additions and 0 deletions
|
|
@ -179,6 +179,8 @@ def _flake8_plugins(
|
||||||
|
|
||||||
|
|
||||||
def _find_importlib_plugins() -> Generator[Plugin, None, None]:
|
def _find_importlib_plugins() -> Generator[Plugin, None, None]:
|
||||||
|
# some misconfigured pythons (RHEL) have things on `sys.path` twice
|
||||||
|
seen = set()
|
||||||
for dist in importlib_metadata.distributions():
|
for dist in importlib_metadata.distributions():
|
||||||
# assigned to prevent continual reparsing
|
# assigned to prevent continual reparsing
|
||||||
eps = dist.entry_points
|
eps = dist.entry_points
|
||||||
|
|
@ -190,6 +192,11 @@ def _find_importlib_plugins() -> Generator[Plugin, None, None]:
|
||||||
# assigned to prevent continual reparsing
|
# assigned to prevent continual reparsing
|
||||||
meta = dist.metadata
|
meta = dist.metadata
|
||||||
|
|
||||||
|
if meta["name"] in seen:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
seen.add(meta["name"])
|
||||||
|
|
||||||
if meta["name"] in BANNED_PLUGINS:
|
if meta["name"] in BANNED_PLUGINS:
|
||||||
LOG.warning(
|
LOG.warning(
|
||||||
"%s plugin is obsolete in flake8>=%s",
|
"%s plugin is obsolete in flake8>=%s",
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,23 @@ unrelated = unrelated:main
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_duplicate_dists(flake8_dist):
|
||||||
|
# some poorly packaged pythons put lib and lib64 on sys.path resulting in
|
||||||
|
# duplicates from `importlib.metadata.distributions`
|
||||||
|
with mock.patch.object(
|
||||||
|
importlib_metadata,
|
||||||
|
"distributions",
|
||||||
|
return_value=[
|
||||||
|
flake8_dist,
|
||||||
|
flake8_dist,
|
||||||
|
],
|
||||||
|
):
|
||||||
|
ret = list(finder._find_importlib_plugins())
|
||||||
|
|
||||||
|
# we should not have duplicates
|
||||||
|
assert len(ret) == len(set(ret))
|
||||||
|
|
||||||
|
|
||||||
def test_find_local_plugins_nothing():
|
def test_find_local_plugins_nothing():
|
||||||
cfg = configparser.RawConfigParser()
|
cfg = configparser.RawConfigParser()
|
||||||
assert set(finder._find_local_plugins(cfg)) == set()
|
assert set(finder._find_local_plugins(cfg)) == set()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue