From 0a91e181af2451ed1254176d9bbbcf15148ff096 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Tue, 4 Jun 2019 10:41:58 -0700 Subject: [PATCH 1/3] fix logic if importlib_metadata.PathDistribution.files is None --- src/_pytest/config/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 40f37480b4c..1f6ae98f9e3 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -784,7 +784,7 @@ def _mark_plugins_for_rewrite(self, hook): str(file) for dist in importlib_metadata.distributions() if any(ep.group == "pytest11" for ep in dist.entry_points) - for file in dist.files + for file in dist.files or [] ) for name in _iter_rewritable_modules(package_files): From 898e869bcda29d692a55149d3a89d65d1038c28a Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Tue, 4 Jun 2019 10:55:38 -0700 Subject: [PATCH 2/3] add changelog file for #5389 --- changelog/5389.bugfix.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/5389.bugfix.rst diff --git a/changelog/5389.bugfix.rst b/changelog/5389.bugfix.rst new file mode 100644 index 00000000000..debf0a9da9d --- /dev/null +++ b/changelog/5389.bugfix.rst @@ -0,0 +1 @@ +Fix regressions of `#5063 `__ for ``importlib_metadata.PathDistribution`` which have their ``files`` attribute being ``None``. From 883db6a2161d4bcf8aa2ecbcab34c74f0ff011c6 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Tue, 4 Jun 2019 17:04:15 -0300 Subject: [PATCH 3/3] Add test for packages with broken metadata Related to #5389 --- testing/test_config.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/testing/test_config.py b/testing/test_config.py index 7b2a1209eaf..c3b027ab901 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -578,6 +578,29 @@ def distributions(): testdir.parseconfig() +def test_importlib_metadata_broken_distribution(testdir, monkeypatch): + """Integration test for broken distributions with 'files' metadata being None (#5389)""" + monkeypatch.delenv("PYTEST_DISABLE_PLUGIN_AUTOLOAD", raising=False) + + class DummyEntryPoint: + name = "mytestplugin" + group = "pytest11" + + def load(self): + return object() + + class Distribution: + version = "1.0" + files = None + entry_points = (DummyEntryPoint(),) + + def distributions(): + return (Distribution(),) + + monkeypatch.setattr(importlib_metadata, "distributions", distributions) + testdir.parseconfig() + + @pytest.mark.parametrize("block_it", [True, False]) def test_plugin_preparse_prevents_setuptools_loading(testdir, monkeypatch, block_it): monkeypatch.delenv("PYTEST_DISABLE_PLUGIN_AUTOLOAD", raising=False)