Skip to content

Commit 067c417

Browse files
authored
Merge pull request #889 from minrk/rm-entrypoints
trade entrypoints for importlib_metadata
2 parents 274f325 + 7989cac commit 067c417

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

ipyparallel/cluster/app.py

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

14-
import entrypoints
1514
import zmq
1615
from IPython.core.profiledir import ProfileDir
1716
from traitlets import Bool, CaselessStrEnum, Dict, Integer, List, default
@@ -20,6 +19,7 @@
2019
from ipyparallel._version import __version__
2120
from ipyparallel.apps.baseapp import BaseParallelApplication, base_aliases, base_flags
2221
from ipyparallel.cluster import Cluster, ClusterManager, clean_cluster_files
22+
from ipyparallel.traitlets import entry_points
2323
from ipyparallel.util import abbreviate_profile_dir
2424

2525
# -----------------------------------------------------------------------------
@@ -339,13 +339,14 @@ def _classes_default(self):
339339
launcher_classes = []
340340
for kind in ('controller', 'engine'):
341341
group_name = f'ipyparallel.{kind}_launchers'
342-
group = entrypoints.get_group_named(group_name)
343-
for key, value in group.items():
342+
group = entry_points(group=group_name)
343+
for entrypoint in group:
344+
key = entrypoint.name
344345
try:
345-
cls = value.load()
346+
cls = entrypoint.load()
346347
except Exception as e:
347348
self.log.error(
348-
f"Failed to load entrypoint {group_name}: {key} = {value}\n{e}"
349+
f"Failed to load entrypoint {group_name}: {key} = {entrypoint.value}\n{e}"
349350
)
350351
else:
351352
launcher_classes.append(cls)

ipyparallel/cluster/launcher.py

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

26-
import entrypoints
2726
import psutil
2827
from IPython.utils.path import ensure_dir_exists, get_home_dir
2928
from IPython.utils.text import EvalFormatter
@@ -42,6 +41,7 @@
4241
)
4342
from traitlets.config.configurable import LoggingConfigurable
4443

44+
from ..traitlets import entry_points
4545
from ..util import shlex_join
4646
from ._winhpcjob import IPControllerJob, IPControllerTask, IPEngineSetJob, IPEngineTask
4747
from .shellcmd import ShellCommandSend
@@ -2505,25 +2505,25 @@ def find_launcher_class(name, kind):
25052505
group_name = 'ipyparallel.controller_launchers'
25062506
else:
25072507
raise ValueError(f"kind must be 'engine' or 'controller', not {kind!r}")
2508-
group = entrypoints.get_group_named(group_name)
2508+
group = entry_points(group=group_name)
25092509
# make it case-insensitive
2510-
registry = {key.lower(): value for key, value in group.items()}
2510+
registry = {entrypoint.name.lower(): entrypoint for entrypoint in group}
25112511
return registry[name.lower()].load()
25122512

25132513

25142514
@lru_cache
25152515
def abbreviate_launcher_class(cls):
25162516
"""Abbreviate a launcher class back to its entrypoint name"""
2517-
cls_key = f"{cls.__module__}.{cls.__name__}"
2517+
cls_key = f"{cls.__module__}:{cls.__name__}"
25182518
# allow entrypoint_name attribute in case the definition module
25192519
# is not the same as the 'import' module
25202520
if getattr(cls, 'entrypoint_name', None):
25212521
return getattr(cls, 'entrypoint_name')
25222522

25232523
for kind in ('controller', 'engine'):
25242524
group_name = f'ipyparallel.{kind}_launchers'
2525-
group = entrypoints.get_group_named(group_name)
2526-
for key, value in group.items():
2527-
if f"{value.module_name}.{value.object_name}" == cls_key:
2528-
return key.lower()
2525+
group = entry_points(group=group_name)
2526+
for entrypoint in group:
2527+
if entrypoint.value == cls_key:
2528+
return entrypoint.name.lower()
25292529
return cls_key

ipyparallel/tests/test_launcher.py

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

13-
import entrypoints
1413
import pytest
1514
from traitlets.config import Config
1615

1716
from ipyparallel.cluster import launcher as launcher_mod
17+
from ipyparallel.traitlets import entry_points
1818

1919
# -------------------------------------------------------------------------------
2020
# TestCase Mixins
@@ -156,9 +156,10 @@ def _wait_one(timeout):
156156
@pytest.mark.parametrize("kind", ("controller", "engine"))
157157
def test_entrypoints(kind):
158158
group_name = f"ipyparallel.{kind}_launchers"
159-
group = entrypoints.get_group_named(group_name)
159+
group = entry_points(group=group_name)
160160
assert len(group) > 2
161-
for key, entrypoint in group.items():
161+
for entrypoint in group:
162+
key = entrypoint.name
162163
# verify entrypoints are valid
163164
cls = entrypoint.load()
164165

ipyparallel/traitlets.py

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

3-
import entrypoints
3+
import sys
4+
5+
if sys.version_info < (3, 10):
6+
from importlib_metadata import entry_points
7+
else:
8+
from importlib.metadata import entry_points
9+
410
from traitlets import List, TraitError, Type
511

612

@@ -24,9 +30,7 @@ def help(self):
2430
chunks = [self._original_help]
2531
chunks.append("Currently installed: ")
2632
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-
)
33+
chunks.append(f" - {key}: {entry_point.value}")
3034
return '\n'.join(chunks)
3135

3236
@help.setter
@@ -35,10 +39,10 @@ def help(self, value):
3539

3640
def load_entry_points(self):
3741
"""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()}
42+
return {
43+
entry_point.name.lower(): entry_point
44+
for entry_point in entry_points(group=self.entry_point_group)
45+
}
4246

4347
def validate(self, obj, value):
4448
if isinstance(value, str):

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>=25",
4242
"traitlets>=5",

0 commit comments

Comments
 (0)