From 218a7b403438029ed9e21782ee1aaed4623d7211 Mon Sep 17 00:00:00 2001 From: Talley Lambert Date: Fri, 1 Jul 2022 11:23:00 -0400 Subject: [PATCH] fix: fix deprecation warning on fonticon plugin discovery on python 3.10 (#95) * fix: fix fonticon * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix entry points API Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/superqt/fonticon/_plugins.py | 7 +++- .../fixtures/fake_plugin.dist-info/METADATA | 3 ++ .../fake_plugin.dist-info/entry_points.txt | 2 ++ .../fake_plugin.dist-info/top_level.txt | 1 + .../fixtures/fake_plugin/__init__.py | 6 ++++ .../{ => fixtures/fake_plugin}/icontest.ttf | Bin tests/test_fonticon/test_fonticon.py | 2 +- tests/test_fonticon/test_plugins.py | 32 ++---------------- 8 files changed, 22 insertions(+), 31 deletions(-) create mode 100644 tests/test_fonticon/fixtures/fake_plugin.dist-info/METADATA create mode 100644 tests/test_fonticon/fixtures/fake_plugin.dist-info/entry_points.txt create mode 100644 tests/test_fonticon/fixtures/fake_plugin.dist-info/top_level.txt create mode 100644 tests/test_fonticon/fixtures/fake_plugin/__init__.py rename tests/test_fonticon/{ => fixtures/fake_plugin}/icontest.ttf (100%) diff --git a/src/superqt/fonticon/_plugins.py b/src/superqt/fonticon/_plugins.py index 3b1d6e0..8d73853 100644 --- a/src/superqt/fonticon/_plugins.py +++ b/src/superqt/fonticon/_plugins.py @@ -17,7 +17,12 @@ class FontIconManager: def _discover_fonts(self) -> None: self._PLUGINS.clear() - for ep in entry_points().get(self.ENTRY_POINT, {}): + entries = entry_points() + if hasattr(entries, "select"): # python>3.10 + _entries = entries.select(group=self.ENTRY_POINT) # type: ignore + else: + _entries = entries.get(self.ENTRY_POINT, []) + for ep in _entries: if ep not in self._BLOCKED: self._PLUGINS[ep.name] = ep diff --git a/tests/test_fonticon/fixtures/fake_plugin.dist-info/METADATA b/tests/test_fonticon/fixtures/fake_plugin.dist-info/METADATA new file mode 100644 index 0000000..5d6e5a0 --- /dev/null +++ b/tests/test_fonticon/fixtures/fake_plugin.dist-info/METADATA @@ -0,0 +1,3 @@ +Metadata-Version: 2.1 +Name: fake-plugin +Version: 5.15.4 diff --git a/tests/test_fonticon/fixtures/fake_plugin.dist-info/entry_points.txt b/tests/test_fonticon/fixtures/fake_plugin.dist-info/entry_points.txt new file mode 100644 index 0000000..4de2f7a --- /dev/null +++ b/tests/test_fonticon/fixtures/fake_plugin.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[superqt.fonticon] +ico = fake_plugin:ICO diff --git a/tests/test_fonticon/fixtures/fake_plugin.dist-info/top_level.txt b/tests/test_fonticon/fixtures/fake_plugin.dist-info/top_level.txt new file mode 100644 index 0000000..953a53a --- /dev/null +++ b/tests/test_fonticon/fixtures/fake_plugin.dist-info/top_level.txt @@ -0,0 +1 @@ +fake_plugin diff --git a/tests/test_fonticon/fixtures/fake_plugin/__init__.py b/tests/test_fonticon/fixtures/fake_plugin/__init__.py new file mode 100644 index 0000000..d73cd6f --- /dev/null +++ b/tests/test_fonticon/fixtures/fake_plugin/__init__.py @@ -0,0 +1,6 @@ +from pathlib import Path + + +class ICO: + __font_file__ = str(Path(__file__).parent / "icontest.ttf") + smiley = "ico.\ue900" diff --git a/tests/test_fonticon/icontest.ttf b/tests/test_fonticon/fixtures/fake_plugin/icontest.ttf similarity index 100% rename from tests/test_fonticon/icontest.ttf rename to tests/test_fonticon/fixtures/fake_plugin/icontest.ttf diff --git a/tests/test_fonticon/test_fonticon.py b/tests/test_fonticon/test_fonticon.py index e6d6f78..39ba6da 100644 --- a/tests/test_fonticon/test_fonticon.py +++ b/tests/test_fonticon/test_fonticon.py @@ -11,7 +11,7 @@ TEST_PREFIX = "ico" TEST_CHARNAME = "smiley" TEST_CHAR = "\ue900" TEST_GLYPHKEY = f"{TEST_PREFIX}.{TEST_CHARNAME}" -FONT_FILE = Path(__file__).parent / "icontest.ttf" +FONT_FILE = Path(__file__).parent / "fixtures" / "fake_plugin" / "icontest.ttf" @pytest.fixture diff --git a/tests/test_fonticon/test_plugins.py b/tests/test_fonticon/test_plugins.py index 2ee2b7d..267b896 100644 --- a/tests/test_fonticon/test_plugins.py +++ b/tests/test_fonticon/test_plugins.py @@ -7,41 +7,15 @@ from qtpy.QtGui import QIcon, QPixmap from superqt.fonticon import _plugins, icon from superqt.fonticon._qfont_icon import QFontIconStore -try: - from importlib.metadata import Distribution -except ImportError: - from importlib_metadata import Distribution # type: ignore - - -class ICO: - __font_file__ = str(Path(__file__).parent / "icontest.ttf") - smiley = "ico.\ue900" +FIXTURES = Path(__file__).parent / "fixtures" @pytest.fixture def plugin_store(qapp, monkeypatch): - class MockEntryPoint: - name = "ico" - group = _plugins.FontIconManager.ENTRY_POINT - value = "fake_plugin.ICO" - - def load(self): - return ICO - - class MockFinder: - def find_distributions(self, *a): - class D(Distribution): - name = "mock" - - @property - def entry_points(self): - return [MockEntryPoint()] - - return [D()] - + _path = [str(FIXTURES)] + sys.path.copy() store = QFontIconStore().instance() with monkeypatch.context() as m: - m.setattr(sys, "meta_path", [MockFinder()]) + m.setattr(sys, "path", _path) yield store store.clear()