Package: release.debian.org Severity: normal X-Debbugs-Cc: ipyparal...@packages.debian.org Control: affects -1 + src:ipyparallel User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package ipyparallel I'm tryng to get old python3-entrypoints out of Trixie and we are almost there. There's an AUTORM pending for a lot of other packages and I'd like to get this settled. [ Reason ] ipyparallel autopkgtest is quite flaky as usual [ Impact ] (What is the impact for the user if the unblock isn't granted?) One more confusing old library ends up in Trixie [ Tests ] autopkgtest succeeded for most architectures [ Risks ] Patch from upstream; 1 dependency dropped. [ Checklist ] [x] all changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in testing [ Other info ] python3-entrypoints reverse deps in Testing: python3-ipyparallel python3-papermill python3-testbook unblock ipyparallel/8.8.0-5
diff -Nru ipyparallel-8.8.0/debian/changelog ipyparallel-8.8.0/debian/changelog --- ipyparallel-8.8.0/debian/changelog 2024-10-30 15:15:26.000000000 +0100 +++ ipyparallel-8.8.0/debian/changelog 2025-05-14 00:45:36.000000000 +0200 @@ -1,3 +1,10 @@ +ipyparallel (8.8.0-5) unstable; urgency=medium + + * Team upload. + * Remove usage of python3-entrypoints using upstream patch. + + -- Alexandre Detiste <tc...@debian.org> Wed, 14 May 2025 00:45:36 +0200 + ipyparallel (8.8.0-4) unstable; urgency=medium * Team upload. diff -Nru ipyparallel-8.8.0/debian/control ipyparallel-8.8.0/debian/control --- ipyparallel-8.8.0/debian/control 2024-10-30 13:10:18.000000000 +0100 +++ ipyparallel-8.8.0/debian/control 2025-05-14 00:45:36.000000000 +0200 @@ -17,7 +17,6 @@ python3-dateutil, python3-decorator, python3-doc <!nodoc>, - python3-entrypoints, python3-hatchling, python3-ipykernel, python3-ipython, diff -Nru ipyparallel-8.8.0/debian/patches/7989cac274a8451dce05e9ff8f258d6da992a032.patch ipyparallel-8.8.0/debian/patches/7989cac274a8451dce05e9ff8f258d6da992a032.patch --- ipyparallel-8.8.0/debian/patches/7989cac274a8451dce05e9ff8f258d6da992a032.patch 1970-01-01 01:00:00.000000000 +0100 +++ ipyparallel-8.8.0/debian/patches/7989cac274a8451dce05e9ff8f258d6da992a032.patch 2025-05-14 00:45:36.000000000 +0200 @@ -0,0 +1,169 @@ +From 7989cac274a8451dce05e9ff8f258d6da992a032 Mon Sep 17 00:00:00 2001 +From: Min RK <benjami...@gmail.com> +Date: Tue, 2 Jul 2024 14:09:42 +0200 +Subject: [PATCH] trade entrypoints for importlib_metadata + +--- a/ipyparallel/cluster/app.py ++++ b/ipyparallel/cluster/app.py +@@ -11,7 +11,6 @@ + import sys + from functools import partial + +-import entrypoints + import zmq + from IPython.core.profiledir import ProfileDir + from traitlets import Bool, CaselessStrEnum, Dict, Integer, List, default +@@ -20,6 +19,7 @@ + from ipyparallel._version import __version__ + from ipyparallel.apps.baseapp import BaseParallelApplication, base_aliases, base_flags + from ipyparallel.cluster import Cluster, ClusterManager, clean_cluster_files ++from ipyparallel.traitlets import entry_points + from ipyparallel.util import abbreviate_profile_dir + + # ----------------------------------------------------------------------------- +@@ -339,13 +339,14 @@ + launcher_classes = [] + for kind in ('controller', 'engine'): + group_name = f'ipyparallel.{kind}_launchers' +- group = entrypoints.get_group_named(group_name) +- for key, value in group.items(): ++ group = entry_points(group=group_name) ++ for entrypoint in group: ++ key = entrypoint.name + try: +- cls = value.load() ++ cls = entrypoint.load() + except Exception as e: + self.log.error( +- f"Failed to load entrypoint {group_name}: {key} = {value}\n{e}" ++ f"Failed to load entrypoint {group_name}: {key} = {entrypoint.value}\n{e}" + ) + else: + launcher_classes.append(cls) +--- a/ipyparallel/cluster/launcher.py ++++ b/ipyparallel/cluster/launcher.py +@@ -23,7 +23,6 @@ + from tempfile import TemporaryDirectory + from textwrap import indent + +-import entrypoints + import psutil + from IPython.utils.path import ensure_dir_exists, get_home_dir + from IPython.utils.text import EvalFormatter +@@ -42,6 +41,7 @@ + ) + from traitlets.config.configurable import LoggingConfigurable + ++from ..traitlets import entry_points + from ..util import shlex_join + from ._winhpcjob import IPControllerJob, IPControllerTask, IPEngineSetJob, IPEngineTask + +@@ -2533,16 +2533,16 @@ + group_name = 'ipyparallel.controller_launchers' + else: + raise ValueError(f"kind must be 'engine' or 'controller', not {kind!r}") +- group = entrypoints.get_group_named(group_name) ++ group = entry_points(group=group_name) + # make it case-insensitive +- registry = {key.lower(): value for key, value in group.items()} ++ registry = {entrypoint.name.lower(): entrypoint for entrypoint in group} + return registry[name.lower()].load() + + + @lru_cache + def abbreviate_launcher_class(cls): + """Abbreviate a launcher class back to its entrypoint name""" +- cls_key = f"{cls.__module__}.{cls.__name__}" ++ cls_key = f"{cls.__module__}:{cls.__name__}" + # allow entrypoint_name attribute in case the definition module + # is not the same as the 'import' module + if getattr(cls, 'entrypoint_name', None): +@@ -2550,8 +2550,8 @@ + + for kind in ('controller', 'engine'): + group_name = f'ipyparallel.{kind}_launchers' +- group = entrypoints.get_group_named(group_name) +- for key, value in group.items(): +- if f"{value.module_name}.{value.object_name}" == cls_key: +- return key.lower() ++ group = entry_points(group=group_name) ++ for entrypoint in group: ++ if entrypoint.value == cls_key: ++ return entrypoint.name.lower() + return cls_key +--- a/ipyparallel/tests/test_launcher.py ++++ b/ipyparallel/tests/test_launcher.py +@@ -10,11 +10,11 @@ + import time + from subprocess import Popen + +-import entrypoints + import pytest + from traitlets.config import Config + + from ipyparallel.cluster import launcher as launcher_mod ++from ipyparallel.traitlets import entry_points + + # ------------------------------------------------------------------------------- + # TestCase Mixins +@@ -156,9 +156,10 @@ + @pytest.mark.parametrize("kind", ("controller", "engine")) + def test_entrypoints(kind): + group_name = f"ipyparallel.{kind}_launchers" +- group = entrypoints.get_group_named(group_name) ++ group = entry_points(group=group_name) + assert len(group) > 2 +- for key, entrypoint in group.items(): ++ for entrypoint in group: ++ key = entrypoint.name + # verify entrypoints are valid + cls = entrypoint.load() + +--- a/ipyparallel/traitlets.py ++++ b/ipyparallel/traitlets.py +@@ -1,6 +1,8 @@ + """Custom ipyparallel trait types""" + +-import entrypoints ++import sys ++from importlib.metadata import entry_points ++ + from traitlets import List, TraitError, Type + + +@@ -24,9 +26,7 @@ + chunks = [self._original_help] + chunks.append("Currently installed: ") + for key, entry_point in self.load_entry_points().items(): +- chunks.append( +- f" - {key}: {entry_point.module_name}.{entry_point.object_name}" +- ) ++ chunks.append(f" - {key}: {entry_point.value}") + return '\n'.join(chunks) + + @help.setter +@@ -35,10 +35,10 @@ + + def load_entry_points(self): + """Load my entry point group""" +- # load the group +- group = entrypoints.get_group_named(self.entry_point_group) +- # make it case-insensitive +- return {key.lower(): value for key, value in group.items()} ++ return { ++ entry_point.name.lower(): entry_point ++ for entry_point in entry_points(group=self.entry_point_group) ++ } + + def validate(self, obj, value): + if isinstance(value, str): +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -36,7 +36,6 @@ + urls = {Homepage = "https://ipython.org"} + requires-python = ">=3.8" + dependencies = [ +- "entrypoints", + "decorator", + "pyzmq>=18", + "traitlets>=4.3", diff -Nru ipyparallel-8.8.0/debian/patches/series ipyparallel-8.8.0/debian/patches/series --- ipyparallel-8.8.0/debian/patches/series 2024-10-30 15:14:49.000000000 +0100 +++ ipyparallel-8.8.0/debian/patches/series 2025-05-14 00:45:36.000000000 +0200 @@ -4,3 +4,4 @@ mark_async_test_xfail.patch fix_docs 0006-Define-asyncio_default_fixture_loop_scope-for-pytest.patch +7989cac274a8451dce05e9ff8f258d6da992a032.patch