From f4238018c02c4f5ca88e2db332c1ed12c2cc1be7 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 24 Feb 2021 19:51:21 -0500 Subject: [PATCH 1/2] Update to new entry_points selection protocol. --- setup.cfg | 2 +- src/flake8/_compat.py | 4 ++-- src/flake8/plugins/manager.py | 2 +- tests/integration/test_checker.py | 2 +- tests/unit/test_plugin_manager.py | 28 ++++++++++++---------------- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/setup.cfg b/setup.cfg index 8f935fd..2bc8f24 100644 --- a/setup.cfg +++ b/setup.cfg @@ -47,7 +47,7 @@ install_requires= typing; python_version<"3.5" configparser; python_version<"3.2" functools32; python_version<"3.2" - importlib-metadata; python_version<"3.8" + importlib-metadata >= 3.6 python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* diff --git a/src/flake8/_compat.py b/src/flake8/_compat.py index 85af0a3..435795f 100644 --- a/src/flake8/_compat.py +++ b/src/flake8/_compat.py @@ -6,9 +6,9 @@ if sys.version_info >= (3,): # pragma: no cover (PY3+) else: # pragma: no cover (= (3, 8): # pragma: no cover (PY38+) +if False: # pragma: no cover (PY??+) import importlib.metadata as importlib_metadata -else: # pragma: no cover ( `../lib` symlink on linux in virtualenvs so we # eliminate duplicates here diff --git a/tests/integration/test_checker.py b/tests/integration/test_checker.py index 836b543..afb13c4 100644 --- a/tests/integration/test_checker.py +++ b/tests/integration/test_checker.py @@ -106,7 +106,7 @@ def mock_file_checker_with_plugin(plugin_target): with mock.patch.object( importlib_metadata, 'entry_points', - return_value={'flake8.extension': [entry_point]}, + return_value=[entry_point], ): checks = manager.Checkers() diff --git a/tests/unit/test_plugin_manager.py b/tests/unit/test_plugin_manager.py index 9ad6aba..b1001db 100644 --- a/tests/unit/test_plugin_manager.py +++ b/tests/unit/test_plugin_manager.py @@ -8,23 +8,21 @@ from flake8.plugins import manager @mock.patch.object(importlib_metadata, 'entry_points') def test_calls_entrypoints_on_instantiation(entry_points_mck): """Verify that we call entry_points() when we create a manager.""" - entry_points_mck.return_value = {} + entry_points_mck.return_value = [] manager.PluginManager(namespace='testing.entrypoints') - entry_points_mck.assert_called_once_with() + entry_points_mck.assert_called_once_with(group='testing.entrypoints') @mock.patch.object(importlib_metadata, 'entry_points') def test_calls_entrypoints_creates_plugins_automaticaly(entry_points_mck): """Verify that we create Plugins on instantiation.""" - entry_points_mck.return_value = { - 'testing.entrypoints': [ - importlib_metadata.EntryPoint('T100', '', None), - importlib_metadata.EntryPoint('T200', '', None), - ], - } + entry_points_mck.return_value = [ + importlib_metadata.EntryPoint('T100', '', None), + importlib_metadata.EntryPoint('T200', '', None), + ] plugin_mgr = manager.PluginManager(namespace='testing.entrypoints') - entry_points_mck.assert_called_once_with() + entry_points_mck.assert_called_once_with(group='testing.entrypoints') assert 'T100' in plugin_mgr.plugins assert 'T200' in plugin_mgr.plugins assert isinstance(plugin_mgr.plugins['T100'], manager.Plugin) @@ -34,12 +32,10 @@ def test_calls_entrypoints_creates_plugins_automaticaly(entry_points_mck): @mock.patch.object(importlib_metadata, 'entry_points') def test_handles_mapping_functions_across_plugins(entry_points_mck): """Verify we can use the PluginManager call functions on all plugins.""" - entry_points_mck.return_value = { - 'testing.entrypoints': [ - importlib_metadata.EntryPoint('T100', '', None), - importlib_metadata.EntryPoint('T200', '', None), - ], - } + entry_points_mck.return_value = [ + importlib_metadata.EntryPoint('T100', '', None), + importlib_metadata.EntryPoint('T200', '', None), + ] plugin_mgr = manager.PluginManager(namespace='testing.entrypoints') plugins = [plugin_mgr.plugins[name] for name in plugin_mgr.names] @@ -49,7 +45,7 @@ def test_handles_mapping_functions_across_plugins(entry_points_mck): @mock.patch.object(importlib_metadata, 'entry_points') def test_local_plugins(entry_points_mck): """Verify PluginManager can load given local plugins.""" - entry_points_mck.return_value = {} + entry_points_mck.return_value = [] plugin_mgr = manager.PluginManager( namespace='testing.entrypoints', local_plugins=['X = path.to:Plugin'] From 845c557ea4d3faeed2c06e09059bc32a6560646b Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 1 Mar 2021 13:56:28 -0500 Subject: [PATCH 2/2] Remove 'compat' hook for importlib_metadata. --- src/flake8/_compat.py | 7 +------ src/flake8/plugins/manager.py | 3 ++- tests/integration/test_checker.py | 2 +- tests/unit/test_plugin_manager.py | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/flake8/_compat.py b/src/flake8/_compat.py index 435795f..0bad8a1 100644 --- a/src/flake8/_compat.py +++ b/src/flake8/_compat.py @@ -6,9 +6,4 @@ if sys.version_info >= (3,): # pragma: no cover (PY3+) else: # pragma: no cover (