From 302b8539744a24ec0d419386e2ed2f77755a3293 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Sun, 4 Feb 2024 23:28:03 -0700 Subject: replace pkg_resources with importlib.metadata in pshell script --- src/pyramid/scripts/pshell.py | 14 ++++++++++---- tests/test_scripts/test_pshell.py | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/pyramid/scripts/pshell.py b/src/pyramid/scripts/pshell.py index 63600abaf..4d3817ffb 100644 --- a/src/pyramid/scripts/pshell.py +++ b/src/pyramid/scripts/pshell.py @@ -1,8 +1,8 @@ import argparse from code import interact from contextlib import contextmanager +import importlib.metadata import os -import pkg_resources import sys import textwrap @@ -41,7 +41,7 @@ class PShellCommand: script_name = 'pshell' bootstrap = staticmethod(bootstrap) # for testing get_config_loader = staticmethod(get_config_loader) # for testing - pkg_resources = pkg_resources # for testing + importlib_metadata = importlib.metadata # for testing parser = argparse.ArgumentParser( description=textwrap.dedent(description), @@ -228,10 +228,16 @@ class PShellCommand: return 0 def find_all_shells(self): - pkg_resources = self.pkg_resources + importlib_metadata = self.importlib_metadata shells = {} - for ep in pkg_resources.iter_entry_points('pyramid.pshell_runner'): + eps = importlib_metadata.entry_points() + if hasattr(eps, 'select'): + eps = eps.select(group='pyramid.pshell_runner') + else: # pragma: no cover + # fallback for py38 and py39 + eps = eps.get('pyramid.pshell_runner') + for ep in eps: name = ep.name shell_factory = ep.load() shells[name] = shell_factory diff --git a/tests/test_scripts/test_pshell.py b/tests/test_scripts/test_pshell.py index de7e17496..a5eeee045 100644 --- a/tests/test_scripts/test_pshell.py +++ b/tests/test_scripts/test_pshell.py @@ -1,4 +1,5 @@ import os +import sys import unittest from . import dummy @@ -50,7 +51,10 @@ class TestPShellCommand(unittest.TestCase): return cmd def _makeEntryPoints(self, command, shells): - command.pkg_resources = dummy.DummyPkgResources(shells) + entry_points = [ + DummyEntryPoint(name, value) for name, value in shells.items() + ] + command.importlib_metadata = DummyImportlibMetadata(entry_points) def test_command_loads_default_shell(self): command = self._makeOne() @@ -430,3 +434,35 @@ class Test_main(unittest.TestCase): def test_it(self): result = self._callFUT(['pshell']) self.assertEqual(result, 2) + + +class DummyImportlibMetadata: + def __init__(self, entry_points): + self._entry_points = entry_points + + def entry_points(self): + return DummyEntryPoints(self._entry_points) + + +class DummyEntryPoints: + def __init__(self, entry_points): + self._entry_points = entry_points + + if sys.version_info >= (3, 10): + + def select(self, **kw): + return iter(self._entry_points) + + else: # pragma no cover + + def get(self, key): + return list(self._entry_points) + + +class DummyEntryPoint: + def __init__(self, name, value): + self.name = name + self.value = value + + def load(self): + return self.value -- cgit v1.2.3