Skip to content

Commit 02bbdd9

Browse files
committed
trade entrypoints for importlib_metadata
1 parent 0bbefbc commit 02bbdd9

File tree

5 files changed

+41
-25
lines changed

5 files changed

+41
-25
lines changed

Diff for: ipyparallel/cluster/app.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
import sys
1212
from functools import partial
1313

14-
import entrypoints
14+
try:
15+
from importlib.metadata import entry_points
16+
except ImportError:
17+
from importlib_metadata import entry_points
18+
1519
import zmq
1620
from IPython.core.profiledir import ProfileDir
1721
from traitlets import Bool, CaselessStrEnum, Dict, Integer, List, default
@@ -339,13 +343,14 @@ def _classes_default(self):
339343
launcher_classes = []
340344
for kind in ('controller', 'engine'):
341345
group_name = f'ipyparallel.{kind}_launchers'
342-
group = entrypoints.get_group_named(group_name)
343-
for key, value in group.items():
346+
group = entry_points(group=group_name)
347+
for entrypoint in group:
348+
key = entrypoint.name
344349
try:
345-
cls = value.load()
350+
cls = entrypoint.load()
346351
except Exception as e:
347352
self.log.error(
348-
f"Failed to load entrypoint {group_name}: {key} = {value}\n{e}"
353+
f"Failed to load entrypoint {group_name}: {key} = {entrypoint.value}\n{e}"
349354
)
350355
else:
351356
launcher_classes.append(cls)

Diff for: ipyparallel/cluster/launcher.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@
2323
from tempfile import TemporaryDirectory
2424
from textwrap import indent
2525

26-
import entrypoints
26+
try:
27+
from importlib.metadata import entry_points
28+
except ImportError:
29+
from importlib_metadata import entry_points
30+
2731
import psutil
2832
from IPython.utils.path import ensure_dir_exists, get_home_dir
2933
from IPython.utils.text import EvalFormatter
@@ -2533,25 +2537,25 @@ def find_launcher_class(name, kind):
25332537
group_name = 'ipyparallel.controller_launchers'
25342538
else:
25352539
raise ValueError(f"kind must be 'engine' or 'controller', not {kind!r}")
2536-
group = entrypoints.get_group_named(group_name)
2540+
group = entry_points(group=group_name)
25372541
# make it case-insensitive
2538-
registry = {key.lower(): value for key, value in group.items()}
2542+
registry = {entrypoint.name.lower(): entrypoint for entrypoint in group}
25392543
return registry[name.lower()].load()
25402544

25412545

25422546
@lru_cache
25432547
def abbreviate_launcher_class(cls):
25442548
"""Abbreviate a launcher class back to its entrypoint name"""
2545-
cls_key = f"{cls.__module__}.{cls.__name__}"
2549+
cls_key = f"{cls.__module__}:{cls.__name__}"
25462550
# allow entrypoint_name attribute in case the definition module
25472551
# is not the same as the 'import' module
25482552
if getattr(cls, 'entrypoint_name', None):
25492553
return getattr(cls, 'entrypoint_name')
25502554

25512555
for kind in ('controller', 'engine'):
25522556
group_name = f'ipyparallel.{kind}_launchers'
2553-
group = entrypoints.get_group_named(group_name)
2554-
for key, value in group.items():
2555-
if f"{value.module_name}.{value.object_name}" == cls_key:
2556-
return key.lower()
2557+
group = entry_points(group=group_name)
2558+
for entrypoint in group:
2559+
if entrypoint.value == cls_key:
2560+
return entrypoint.name.lower()
25572561
return cls_key

Diff for: ipyparallel/tests/test_launcher.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
import time
1111
from subprocess import Popen
1212

13-
import entrypoints
13+
try:
14+
from importlib.metadata import entry_points
15+
except ImportError:
16+
from importlib_metadata import entry_points
17+
1418
import pytest
1519
from traitlets.config import Config
1620

@@ -156,9 +160,10 @@ def _wait_one(timeout):
156160
@pytest.mark.parametrize("kind", ("controller", "engine"))
157161
def test_entrypoints(kind):
158162
group_name = f"ipyparallel.{kind}_launchers"
159-
group = entrypoints.get_group_named(group_name)
163+
group = entry_points(group=group_name)
160164
assert len(group) > 2
161-
for key, entrypoint in group.items():
165+
for entrypoint in group:
166+
key = entrypoint.name
162167
# verify entrypoints are valid
163168
cls = entrypoint.load()
164169

Diff for: ipyparallel/traitlets.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
"""Custom ipyparallel trait types"""
22

3-
import entrypoints
3+
try:
4+
from importlib.metadata import entry_points
5+
except ImportError:
6+
from importlib_metadata import entry_points
7+
48
from traitlets import List, TraitError, Type
59

610

@@ -24,9 +28,7 @@ def help(self):
2428
chunks = [self._original_help]
2529
chunks.append("Currently installed: ")
2630
for key, entry_point in self.load_entry_points().items():
27-
chunks.append(
28-
f" - {key}: {entry_point.module_name}.{entry_point.object_name}"
29-
)
31+
chunks.append(f" - {key}: {entry_point.value}")
3032
return '\n'.join(chunks)
3133

3234
@help.setter
@@ -35,10 +37,10 @@ def help(self, value):
3537

3638
def load_entry_points(self):
3739
"""Load my entry point group"""
38-
# load the group
39-
group = entrypoints.get_group_named(self.entry_point_group)
40-
# make it case-insensitive
41-
return {key.lower(): value for key, value in group.items()}
40+
return {
41+
entry_point.name.lower(): entry_point
42+
for entry_point in entry_points(group=self.entry_point_group)
43+
}
4244

4345
def validate(self, obj, value):
4446
if isinstance(value, str):

Diff for: pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ classifiers = [
3636
urls = {Homepage = "https://ipython.org"}
3737
requires-python = ">=3.8"
3838
dependencies = [
39-
"entrypoints",
39+
"importlib_metadata>=3.6; python_version < '3.10'",
4040
"decorator",
4141
"pyzmq>=18",
4242
"traitlets>=4.3",

0 commit comments

Comments
 (0)