summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/elasticsearch/Manifest1
-rw-r--r--dev-python/elasticsearch/elasticsearch-9.1.0.ebuild84
-rw-r--r--dev-python/ensurepip-pip/Manifest1
-rw-r--r--dev-python/ensurepip-pip/ensurepip-pip-25.2.ebuild181
-rw-r--r--dev-python/ensurepip-pip/files/pip-25.2-test-wheels.patch74
-rw-r--r--dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch71
-rw-r--r--dev-python/greenlet/files/greenlet-3.2.3-skip-leak-tests.patch51
-rw-r--r--dev-python/greenlet/greenlet-3.2.3.ebuild14
-rw-r--r--dev-python/langdetect/Manifest2
-rw-r--r--dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch13
-rw-r--r--dev-python/langdetect/langdetect-1.0.9.ebuild6
-rw-r--r--dev-python/langdetect/metadata.xml10
-rw-r--r--dev-python/neovim-remote/neovim-remote-2.5.1.ebuild2
-rw-r--r--dev-python/neovim-remote/neovim-remote-9999.ebuild2
-rw-r--r--dev-python/pip/Manifest1
-rw-r--r--dev-python/pip/files/pip-25.2-test-wheels.patch74
-rw-r--r--dev-python/pip/pip-25.2.ebuild191
-rw-r--r--dev-python/pygdbmi/pygdbmi-0.11.0.0.ebuild1
-rw-r--r--dev-python/pyrate-limiter/pyrate-limiter-3.9.0.ebuild1
-rw-r--r--dev-python/pyroute2/Manifest1
-rw-r--r--dev-python/pyroute2/pyroute2-0.9.4.ebuild26
-rw-r--r--dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild2
-rw-r--r--dev-python/respx/respx-0.22.0-r1.ebuild4
-rw-r--r--dev-python/unasync/unasync-0.6.0-r1.ebuild15
-rw-r--r--dev-python/virtualenvwrapper/virtualenvwrapper-6.1.1.ebuild2
25 files changed, 792 insertions, 38 deletions
diff --git a/dev-python/elasticsearch/Manifest b/dev-python/elasticsearch/Manifest
index 934b7e2f240e..1dc2e3473527 100644
--- a/dev-python/elasticsearch/Manifest
+++ b/dev-python/elasticsearch/Manifest
@@ -1 +1,2 @@
DIST elasticsearch-py-9.0.2.gh.tar.gz 2192777 BLAKE2B d7fc3c9fe94b954d0522be03335c7639e38a67fa30949f19a1004b368750ae87da5fd3ea87e048f6cc36c19a42883821ff3f986879ab6f61f4128add73a62c83 SHA512 b2473dae673051be4e6477947b9faddb11d1ac563a971c0b4eb14748ffdf3ab7eef89dbbdca27b486e631f575f7558341e46d22d551b1d20f100260d41c3b2c7
+DIST elasticsearch-py-9.1.0.gh.tar.gz 2229791 BLAKE2B 7e5651b8b92ab3afdcc9f966962c15954af681fc5d6b4e4d2ea4b26351a7724976236e34ff73cb8feec03f7d1bbabecccc1a81a1e884a33cd2720f3dea2ef40d SHA512 d23159caec48d994ad835ae608399fb9ceede825e99080604c58182ebc06923329d5cca18cb9b72b04a9819b86a9a4fb344d6def8ffb9fd0a10a26f54e61c497
diff --git a/dev-python/elasticsearch/elasticsearch-9.1.0.ebuild b/dev-python/elasticsearch/elasticsearch-9.1.0.ebuild
new file mode 100644
index 000000000000..4aa7ee0ea0dd
--- /dev/null
+++ b/dev-python/elasticsearch/elasticsearch-9.1.0.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1
+
+MY_P="elasticsearch-py-${PV}"
+DESCRIPTION="Official Elasticsearch client library for Python"
+HOMEPAGE="
+ https://ela.st/es-python
+ https://github.com/elastic/elasticsearch-py/
+ https://pypi.org/project/elasticsearch/
+"
+SRC_URI="
+ https://github.com/elastic/elasticsearch-py/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="0/$(ver_cut 1)"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+RDEPEND="
+ <dev-python/aiohttp-4[${PYTHON_USEDEP}]
+ >=dev-python/aiohttp-3[${PYTHON_USEDEP}]
+ <dev-python/elastic-transport-10[${PYTHON_USEDEP}]
+ >=dev-python/elastic-transport-9.1.0[${PYTHON_USEDEP}]
+ >=dev-python/orjson-3[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ <dev-python/requests-3[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.4[${PYTHON_USEDEP}]
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ ${RDEPEND}
+ dev-python/mapbox-vector-tile[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/opentelemetry-api[${PYTHON_USEDEP}]
+ dev-python/opentelemetry-sdk[${PYTHON_USEDEP}]
+ dev-python/pandas[${PYTHON_USEDEP}]
+ dev-python/pyarrow[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-5.4[${PYTHON_USEDEP}]
+ dev-python/unasync[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_sphinx docs/sphinx \
+ dev-python/sphinx-autodoc-typehints \
+ dev-python/sphinx-rtd-theme
+
+EPYTEST_PLUGINS=( pytest-asyncio )
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # REST api tests are a black hole for effort. It downloads the tests
+ # so its an ever moving target. It also requires effort to blacklist
+ # tests for apis which are license restricted.
+ "test_elasticsearch/test_server/test_rest_api_spec.py"
+ # Counting deprecation warnings from python is bound to fail even
+ # if all are fixed in this package. Not worth it.
+ "test_elasticsearch/test_client/test_deprecated_options.py"
+ # Running daemon for tests is finicky and upstream CI fails at it
+ # as well.
+ "test_elasticsearch/test_server/"
+ "test_elasticsearch/test_async/test_server/"
+ "test_elasticsearch/test_dsl/test_integration/"
+ "test_elasticsearch/test_dsl/_async/test_esql.py"
+ "test_elasticsearch/test_dsl/_sync/test_esql.py"
+ # require nltk
+ "test_elasticsearch/test_dsl/test_integration/test_examples/_async/test_vectors.py"
+ "test_elasticsearch/test_dsl/test_integration/test_examples/_sync/test_vectors.py"
+ )
+
+ local -x TEST_WITH_OTEL=1
+ epytest -o addopts=
+}
diff --git a/dev-python/ensurepip-pip/Manifest b/dev-python/ensurepip-pip/Manifest
index 3622d339ccda..1a6092202975 100644
--- a/dev-python/ensurepip-pip/Manifest
+++ b/dev-python/ensurepip-pip/Manifest
@@ -1,2 +1,3 @@
DIST pip-25.1.1-py3-none-any.whl 1825227 BLAKE2B 13170fa08dd26edced5e5fe8d89b38f5b3b63882489d2a951a7238f950a332ce0df11109482840595984bca187960d8fe2b7aeabfcbdaf94e5586631cc1de4e3 SHA512 e0c56f04a306cba9e13ed87f7460ad5a3bda7d6c37e05098082c58acb1f7493c8061e48df279f2c476e75d12df12d0f1a74d82e00e6fc2badffe484d281c56fc
DIST pip-25.1.1.gh.tar.gz 9219969 BLAKE2B eb443451deeb71888c2fc56ac5c8cb2d0515ec0efff975fab98cfa65d1fc5e66948243b3acebf1f4b0446e46082abb9fd350816579a4f5af1292c160490ce930 SHA512 ce61c9861265139b3c5ea9be9dc246097cd75c21687cf8301f80a377d02420c4524f0d6307d2ca0232ff8715b1105343bcfdb9cac6b69503780ab2c4645558dc
+DIST pip-25.2.gh.tar.gz 9121715 BLAKE2B 3bfe61d6d0d6f3a79c3fd801f5cb40b203fd12085d925ae7cde53adca3c5ee523fdfd9449546e1bc8ca719b3e8766cfef3162919e13a77f7adc0d20a951d11c7 SHA512 5cc65c9091fdda7905e26ce32ddaa3a1c2fd287d69fd3da67c814ba7e8e5be59301d8327c06cdca78c1b95f4a5b5f75c87f36a549022408cc0e8f9411c0db11e
diff --git a/dev-python/ensurepip-pip/ensurepip-pip-25.2.ebuild b/dev-python/ensurepip-pip/ensurepip-pip-25.2.ebuild
new file mode 100644
index 000000000000..2634af07bd5a
--- /dev/null
+++ b/dev-python/ensurepip-pip/ensurepip-pip-25.2.ebuild
@@ -0,0 +1,181 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+# PYTHON_COMPAT is used only for testing
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_REQ_USE="ssl(+),threads(+)"
+
+inherit distutils-r1
+
+MY_P=${P#ensurepip-}
+DESCRIPTION="Shared pip wheel for ensurepip Python module"
+HOMEPAGE="
+ https://pip.pypa.io/en/stable/
+ https://pypi.org/project/pip/
+ https://github.com/pypa/pip/
+"
+SRC_URI="
+ https://github.com/pypa/pip/archive/${PV}.tar.gz -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="test test-rust"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ <dev-python/ensurepip-setuptools-80
+ dev-python/ensurepip-wheel
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/scripttest[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ )
+ dev-vcs/git
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+declare -A VENDOR_LICENSES=(
+ [cachecontrol]=Apache-2.0
+ [certifi]=MPL-2.0
+ [dependency_groups]=MIT
+ [distlib]=PSF-2
+ [distro]=Apache-2.0
+ [idna]=BSD
+ [msgpack]=Apache-2.0
+ [packaging]="|| ( Apache-2.0 MIT )"
+ [pkg_resources]=MIT
+ [platformdirs]=MIT
+ [pygments]=BSD-2
+ [pyproject_hooks]=MIT
+ [requests]=Apache-2.0
+ [resolvelib]=ISC
+ [rich]=MIT
+ [tomli]=MIT
+ [tomli_w]=MIT
+ [truststore]=MIT
+ [urllib3]=MIT
+)
+LICENSE+=" ${VENDOR_LICENSES[*]}"
+
+python_prepare_all() {
+ local PATCHES=(
+ # remove coverage & pytest-subket wheel expectation from test suite
+ # (from dev-python/pip)
+ "${FILESDIR}/pip-25.2-test-wheels.patch"
+ )
+
+ distutils-r1_python_prepare_all
+
+ if use test; then
+ local wheels=(
+ "${BROOT}"/usr/lib/python/ensurepip/{setuptools,wheel}-*.whl
+ )
+ mkdir tests/data/common_wheels/ || die
+ cp "${wheels[@]}" tests/data/common_wheels/ || die
+ fi
+
+ # Verify that we've covered licenses for all vendored packages
+ cd src/pip/_vendor || die
+ local packages=( */ )
+ local pkg missing=()
+ for pkg in "${packages[@]%/}"; do
+ if [[ ! -v "VENDOR_LICENSES[${pkg}]" ]]; then
+ missing+=( "${pkg}" )
+ else
+ unset "VENDOR_LICENSES[${pkg}]"
+ fi
+ done
+
+ if [[ ${missing[@]} || ${VENDOR_LICENSES[@]} ]]; then
+ [[ ${missing[@]} ]] &&
+ eerror "License missing for packages: ${missing[*]}"
+ [[ ${VENDOR_LICENSES[@]} ]] &&
+ eerror "Vendored packages removed: ${!VENDOR_LICENSES[*]}"
+ die "VENDOR_LICENSES outdated"
+ fi
+
+ local upstream_count=$(wc -l < vendor.txt || die)
+ if [[ ${#packages[@]} -ne ${upstream_count} ]]; then
+ eerror "VENDOR_LICENSES: ${#packages[@]}"
+ eerror "vendor.txt: ${upstream_count}"
+ die "Not all vendored packages matched"
+ fi
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ tests/functional/test_inspect.py::test_inspect_basic
+ # Internet
+ tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist
+ tests/functional/test_install.py::test_double_install_fail
+ tests/functional/test_install.py::test_install_sdist_links
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ tests/functional/test_lock.py::test_lock_archive
+ tests/functional/test_lock.py::test_lock_vcs
+ # broken by system site-packages use
+ tests/functional/test_freeze.py::test_freeze_with_setuptools
+ tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip
+ tests/functional/test_uninstall.py::test_basic_uninstall_distutils
+ tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers
+ )
+ local EPYTEST_IGNORE=(
+ # from upstream options
+ src/pip/_vendor
+ tests/tests_cache
+ # requires proxy.py
+ tests/functional/test_proxy.py
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # unexpected tempfiles?
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ )
+ ;;
+ esac
+
+ if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/functional/test_install.py::test_install_sends_client_cert
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ )
+ fi
+
+ local -x PIP_DISABLE_PIP_VERSION_CHECK=1
+ # rerunfailures because test suite breaks if packages are installed
+ # in parallel
+ epytest -m "not network" -o addopts= -o tmp_path_retention_policy=all \
+ --use-venv
+}
+
+src_install() {
+ if [[ ${DISTUTILS_WHEEL_PATH} != *py3-none-any.whl ]]; then
+ die "Non-pure wheel produced?! ${DISTUTILS_WHEEL_PATH}"
+ fi
+ # TODO: compress it?
+ insinto /usr/lib/python/ensurepip
+ doins "${DISTUTILS_WHEEL_PATH}"
+}
diff --git a/dev-python/ensurepip-pip/files/pip-25.2-test-wheels.patch b/dev-python/ensurepip-pip/files/pip-25.2-test-wheels.patch
new file mode 100644
index 000000000000..c99af85681d3
--- /dev/null
+++ b/dev-python/ensurepip-pip/files/pip-25.2-test-wheels.patch
@@ -0,0 +1,74 @@
+From f172db76c62cf8e00fb547828c43cd8bf78a31ef Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 31 Jul 2025 05:10:08 +0200
+Subject: [PATCH] Disable coverage & socket plugins inside test venvs
+
+---
+ tests/conftest.py | 33 ---------------------------------
+ 1 file changed, 33 deletions(-)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index c98b87117..f4ef35a7e 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -444,25 +444,6 @@ def wheel_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -
+ return _common_wheel_editable_install(tmpdir_factory, common_wheels, "wheel")
+
+
+-@pytest.fixture(scope="session")
+-def coverage_install(
+- tmpdir_factory: pytest.TempPathFactory, common_wheels: Path
+-) -> Path:
+- return _common_wheel_editable_install(tmpdir_factory, common_wheels, "coverage")
+-
+-
+-@pytest.fixture(scope="session")
+-def socket_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -> Path:
+- lib_dir = _common_wheel_editable_install(
+- tmpdir_factory, common_wheels, "pytest_subket"
+- )
+- # pytest-subket is only included so it can intercept and block unexpected
+- # network requests. It should NOT be visible to the pip under test.
+- dist_info = next(lib_dir.glob("*.dist-info"))
+- shutil.rmtree(dist_info)
+- return lib_dir
+-
+-
+ def install_pth_link(
+ venv: VirtualEnvironment, project_name: str, lib_dir: Path
+ ) -> None:
+@@ -479,8 +460,6 @@ def virtualenv_template(
+ pip_editable_parts: tuple[Path, ...],
+ setuptools_install: Path,
+ wheel_install: Path,
+- coverage_install: Path,
+- socket_install: Path,
+ ) -> VirtualEnvironment:
+ venv_type: VirtualEnvironmentType
+ if request.config.getoption("--use-venv"):
+@@ -494,11 +473,7 @@ def virtualenv_template(
+
+ # Install setuptools, wheel, pytest-subket, and pip.
+ install_pth_link(venv, "setuptools", setuptools_install)
+ install_pth_link(venv, "wheel", wheel_install)
+- install_pth_link(venv, "pytest_subket", socket_install)
+- # Also copy pytest-subket's .pth file so it can intercept socket calls.
+- with open(venv.site / "pytest_socket.pth", "w") as f:
+- f.write(socket_install.joinpath("pytest_socket.pth").read_text())
+
+ pth, dist_info = pip_editable_parts
+
+@@ -511,13 +485,6 @@ def virtualenv_template(
+ # detects changed files.
+ venv.site.joinpath("easy-install.pth").touch()
+
+- # Install coverage and pth file for executing it in any spawned processes
+- # in this virtual environment.
+- install_pth_link(venv, "coverage", coverage_install)
+- # zz prefix ensures the file is after easy-install.pth.
+- with open(venv.site / "zz-coverage-helper.pth", "a") as f:
+- f.write("import coverage; coverage.process_startup()")
+-
+ # Drop (non-relocatable) launchers.
+ for exe in os.listdir(venv.bin):
+ if not exe.startswith(("python", "libpy")): # Don't remove libpypy-c.so...
diff --git a/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch b/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch
new file mode 100644
index 000000000000..21737aaf0362
--- /dev/null
+++ b/dev-python/greenlet/files/greenlet-3.2.3-py312-assert.patch
@@ -0,0 +1,71 @@
+From 739cc559ac42f41f6ccbc7d556d730fd424f3be8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Wed, 30 Jul 2025 12:17:47 +0200
+Subject: [PATCH] Fix py312+ crash test skips to correctly check for assertions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix the skips for `test_trace_events_multiple_greenlets_switching*`
+to correctly detect assertions being enabled independently of
+`--with-pydebug`. Gentoo builds Python `--without-pydebug` but
+`--with-assertions`, in order to benefit from assertion-implied safety
+checks without the full cost of PyDEBUG. For the purpose of detecting
+it, check for `-DNDEBUG` in optimization flags, as implied by disabling
+assertions. Leave the existing code as a fallback for when build flags
+are unavailable, e.g. in Windows packages.
+
+Signed-off-by: Michał Górny <mgorny@gentoo.org>
+---
+ src/greenlet/tests/test_tracing.py | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/src/greenlet/tests/test_tracing.py b/src/greenlet/tests/test_tracing.py
+index c044d4b6..235fbcd6 100644
+--- a/src/greenlet/tests/test_tracing.py
++++ b/src/greenlet/tests/test_tracing.py
+@@ -1,5 +1,6 @@
+ from __future__ import print_function
+ import sys
++import sysconfig
+ import greenlet
+ import unittest
+
+@@ -7,9 +8,16 @@
+ from . import PY312
+
+ # https://discuss.python.org/t/cpython-3-12-greenlet-and-tracing-profiling-how-to-not-crash-and-get-correct-results/33144/2
+-DEBUG_BUILD_PY312 = (
+- PY312 and hasattr(sys, 'gettotalrefcount'),
+- "Broken on debug builds of Python 3.12"
++# When build variables are available, OPT is the best way of detecting
++# the build with assertions enabled. Otherwise, fallback to detecting PyDEBUG
++# build.
++ASSERTION_BUILD_PY312 = (
++ PY312 and (
++ "-DNDEBUG" not in sysconfig.get_config_var("OPT").split()
++ if sysconfig.get_config_var("OPT") is not None
++ else hasattr(sys, 'gettotalrefcount')
++ ),
++ "Broken on assertion-enabled builds of Python 3.12"
+ )
+
+ class SomeError(Exception):
+@@ -198,7 +206,7 @@ def run(self):
+
+ self._check_trace_events_from_greenlet_sets_profiler(X(), tracer)
+
+- @unittest.skipIf(*DEBUG_BUILD_PY312)
++ @unittest.skipIf(*ASSERTION_BUILD_PY312)
+ def test_trace_events_multiple_greenlets_switching(self):
+ tracer = PythonTracer()
+
+@@ -236,7 +244,7 @@ def g2_run():
+ ('c_call', '__exit__'),
+ ])
+
+- @unittest.skipIf(*DEBUG_BUILD_PY312)
++ @unittest.skipIf(*ASSERTION_BUILD_PY312)
+ def test_trace_events_multiple_greenlets_switching_siblings(self):
+ # Like the first version, but get both greenlets running first
+ # as "siblings" and then establish the tracing.
diff --git a/dev-python/greenlet/files/greenlet-3.2.3-skip-leak-tests.patch b/dev-python/greenlet/files/greenlet-3.2.3-skip-leak-tests.patch
new file mode 100644
index 000000000000..3e7ea3a55f27
--- /dev/null
+++ b/dev-python/greenlet/files/greenlet-3.2.3-skip-leak-tests.patch
@@ -0,0 +1,51 @@
+From cfb846272ab94a79c2f936da13dc3f5213f48912 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 31 Jul 2025 18:16:00 +0200
+Subject: [PATCH] Skip `TestLeaks` when `GREENLET_SKIP_LEAKCHECKS` is used
+
+When `GREENLET_SKIP_LEAKCHECKS` is used, we do not want to check for
+leaks, and therefore it makes no sense to run tests explicitly checking
+for leaks. Since the conditional is also true for MANYLINUX builds,
+remove the redundant condition.
+---
+ src/greenlet/tests/test_leaks.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/greenlet/tests/test_leaks.py b/src/greenlet/tests/test_leaks.py
+index 99da4eb..fe60fa2 100644
+--- a/src/greenlet/tests/test_leaks.py
++++ b/src/greenlet/tests/test_leaks.py
+@@ -10,6 +10,7 @@
+ import time
+ import weakref
+ import threading
++import unittest
+
+
+ import greenlet
+@@ -17,7 +18,7 @@
+ from . import PY314
+ from .leakcheck import fails_leakcheck
+ from .leakcheck import ignores_leakcheck
+-from .leakcheck import RUNNING_ON_MANYLINUX
++from .leakcheck import SKIP_LEAKCHECKS
+
+ # pylint:disable=protected-access
+
+@@ -39,6 +40,7 @@ def reset(cls):
+ cls.EXTANT_INSTANCES.clear()
+
+
++@unittest.skipIf(SKIP_LEAKCHECKS, "Leak checks disabled")
+ class TestLeaks(TestCase):
+
+ def test_arg_refs(self):
+@@ -313,8 +315,6 @@ def _only_test_some_versions(self):
+ assert sys.version_info[0] >= 3
+ if sys.version_info[:2] < (3, 8):
+ self.skipTest('Only observed on 3.11')
+- if RUNNING_ON_MANYLINUX:
+- self.skipTest("Slow and not worth repeating here")
+
+ @ignores_leakcheck
+ # Because we're just trying to track raw memory, not objects, and running
diff --git a/dev-python/greenlet/greenlet-3.2.3.ebuild b/dev-python/greenlet/greenlet-3.2.3.ebuild
index 2fe55a3209cb..e649f248417c 100644
--- a/dev-python/greenlet/greenlet-3.2.3.ebuild
+++ b/dev-python/greenlet/greenlet-3.2.3.ebuild
@@ -6,7 +6,7 @@ EAPI=8
DISTUTILS_EXT=1
DISTUTILS_USE_PEP517=setuptools
# Note: greenlet is built-in in pypy
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1 pypi
@@ -35,16 +35,20 @@ distutils_enable_sphinx docs \
distutils_enable_tests unittest
src_prepare() {
+ local PATCHES=(
+ # https://github.com/python-greenlet/greenlet/pull/457
+ "${FILESDIR}/${P}-py312-assert.patch"
+ # https://github.com/python-greenlet/greenlet/pull/461
+ "${FILESDIR}/${P}-skip-leak-tests.patch"
+ )
+
distutils-r1_src_prepare
# patch cflag manipulations out
sed -i -e 's:global_compile_args[.]append.*:pass:' setup.py || die
- # broken assertions on py3.12+
- # https://github.com/python-greenlet/greenlet/issues/368
- sed -e 's:test_trace_events_multiple_greenlets_switching:_&: ' \
- -i src/greenlet/tests/test_tracing.py || die
}
python_test() {
+ local -x GREENLET_SKIP_LEAKCHECKS=1
eunittest greenlet.tests
}
diff --git a/dev-python/langdetect/Manifest b/dev-python/langdetect/Manifest
index a11d7c268c91..d12ab8aeaca8 100644
--- a/dev-python/langdetect/Manifest
+++ b/dev-python/langdetect/Manifest
@@ -1 +1,3 @@
DIST langdetect-1.0.9.tar.gz 981474 BLAKE2B ea8a9c3f16a2987c080742473bff4f2c1503f53fb3c2b40b0b1d6212bb6133ea22dce7864ffcfb8968c3a46b157d45cb3e2cf6f84bdbed0266cc716a853b032c SHA512 7558d674c47b080c79e43a00a25d2c7f77188cf60bea2cecb3bebb803d75e1aa42b43c74bd26ea1b541f4cb927421908882cbec01a91f0913984217e71ccc8db
+EBUILD langdetect-1.0.9.ebuild 494 BLAKE2B 9cd8a2a93a8d45bf51fe2324402b175d641762ea591fcb99459427f977a95eccffa6ca4777ca4df39814eea6eac62711567faa654456d32f79023a4685804504 SHA512 d973b85ba1a44389a4275f02a779a93a005f7c2e096467b94b072862e4984d5b42cf33f9821ac68aa5b85b12c98983a90b96049989d8c84497969174b6bb838e
+MISC metadata.xml 457 BLAKE2B 630128a3e982b6d60cc7b9f74c79fcb5ee47a71a02c73a50af9da8cedb6fad8e20a7f74b881e5b25c6483b92c9edbd56552cd38b2d9cbfa8b3eb4530facea969 SHA512 674f4f5cd809c6c77bc14e0f5687fa972bef14bdfa0b3343c5d66b7163eef1906eb87d060c8288732f825de71dce291ad0b841a5f2f0dd230f957b5687e45d45
diff --git a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch b/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
deleted file mode 100644
index 637368d2f237..000000000000
--- a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Fix "Package 'langdetect.profiles' is absent from the `packages` configuration."
-
---- a/setup.py
-+++ b/setup.py
-@@ -18,7 +18,7 @@ setup(
- author_email='michal.danilak@gmail.com',
- url='https://github.com/Mimino666/langdetect',
- keywords='language detection library',
-- packages=['langdetect', 'langdetect.utils', 'langdetect.tests'],
-+ packages=['langdetect', 'langdetect.utils', 'langdetect.tests', 'langdetect.profiles'],
- include_package_data=True,
- install_requires=['six'],
- license='MIT',
diff --git a/dev-python/langdetect/langdetect-1.0.9.ebuild b/dev-python/langdetect/langdetect-1.0.9.ebuild
index 99577c43fc3e..56733bbffc48 100644
--- a/dev-python/langdetect/langdetect-1.0.9.ebuild
+++ b/dev-python/langdetect/langdetect-1.0.9.ebuild
@@ -1,9 +1,9 @@
-# Copyright 2022-2024 Gentoo Authors
+# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
DISTUTILS_USE_PEP517=setuptools
inherit distutils-r1 pypi
@@ -19,6 +19,4 @@ KEYWORDS="~amd64"
RDEPEND="dev-python/six[${PYTHON_USEDEP}]"
-PATCHES=( "${FILESDIR}/${P}-explicit-config.patch" )
-
distutils_enable_tests unittest
diff --git a/dev-python/langdetect/metadata.xml b/dev-python/langdetect/metadata.xml
index c0f74ac187e2..020e07f2a3dd 100644
--- a/dev-python/langdetect/metadata.xml
+++ b/dev-python/langdetect/metadata.xml
@@ -2,9 +2,11 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
- <email>pastalian46@gmail.com</email>
- <name>Takuya Wakazono</name>
+ <email>marcin.deranek@slonko.net</email>
+ <name>Marcin Deranek</name>
</maintainer>
-
- <origin>gentoo-guru-overlay</origin>
+ <upstream>
+ <bugs-to>https://github.com/Mimino666/langdetect/issues</bugs-to>
+ </upstream>
+ <origin>slonko-overlay</origin>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/neovim-remote/neovim-remote-2.5.1.ebuild b/dev-python/neovim-remote/neovim-remote-2.5.1.ebuild
index f60d9f5f702c..ec8a8dd9a0af 100644
--- a/dev-python/neovim-remote/neovim-remote-2.5.1.ebuild
+++ b/dev-python/neovim-remote/neovim-remote-2.5.1.ebuild
@@ -4,7 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1
diff --git a/dev-python/neovim-remote/neovim-remote-9999.ebuild b/dev-python/neovim-remote/neovim-remote-9999.ebuild
index 1a070cce0910..27da86238d67 100644
--- a/dev-python/neovim-remote/neovim-remote-9999.ebuild
+++ b/dev-python/neovim-remote/neovim-remote-9999.ebuild
@@ -4,7 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1
diff --git a/dev-python/pip/Manifest b/dev-python/pip/Manifest
index 08cbb3a739a5..86f564765d0f 100644
--- a/dev-python/pip/Manifest
+++ b/dev-python/pip/Manifest
@@ -1 +1,2 @@
DIST pip-25.1.1.gh.tar.gz 9219969 BLAKE2B eb443451deeb71888c2fc56ac5c8cb2d0515ec0efff975fab98cfa65d1fc5e66948243b3acebf1f4b0446e46082abb9fd350816579a4f5af1292c160490ce930 SHA512 ce61c9861265139b3c5ea9be9dc246097cd75c21687cf8301f80a377d02420c4524f0d6307d2ca0232ff8715b1105343bcfdb9cac6b69503780ab2c4645558dc
+DIST pip-25.2.gh.tar.gz 9121715 BLAKE2B 3bfe61d6d0d6f3a79c3fd801f5cb40b203fd12085d925ae7cde53adca3c5ee523fdfd9449546e1bc8ca719b3e8766cfef3162919e13a77f7adc0d20a951d11c7 SHA512 5cc65c9091fdda7905e26ce32ddaa3a1c2fd287d69fd3da67c814ba7e8e5be59301d8327c06cdca78c1b95f4a5b5f75c87f36a549022408cc0e8f9411c0db11e
diff --git a/dev-python/pip/files/pip-25.2-test-wheels.patch b/dev-python/pip/files/pip-25.2-test-wheels.patch
new file mode 100644
index 000000000000..c99af85681d3
--- /dev/null
+++ b/dev-python/pip/files/pip-25.2-test-wheels.patch
@@ -0,0 +1,74 @@
+From f172db76c62cf8e00fb547828c43cd8bf78a31ef Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 31 Jul 2025 05:10:08 +0200
+Subject: [PATCH] Disable coverage & socket plugins inside test venvs
+
+---
+ tests/conftest.py | 33 ---------------------------------
+ 1 file changed, 33 deletions(-)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index c98b87117..f4ef35a7e 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -444,25 +444,6 @@ def wheel_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -
+ return _common_wheel_editable_install(tmpdir_factory, common_wheels, "wheel")
+
+
+-@pytest.fixture(scope="session")
+-def coverage_install(
+- tmpdir_factory: pytest.TempPathFactory, common_wheels: Path
+-) -> Path:
+- return _common_wheel_editable_install(tmpdir_factory, common_wheels, "coverage")
+-
+-
+-@pytest.fixture(scope="session")
+-def socket_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -> Path:
+- lib_dir = _common_wheel_editable_install(
+- tmpdir_factory, common_wheels, "pytest_subket"
+- )
+- # pytest-subket is only included so it can intercept and block unexpected
+- # network requests. It should NOT be visible to the pip under test.
+- dist_info = next(lib_dir.glob("*.dist-info"))
+- shutil.rmtree(dist_info)
+- return lib_dir
+-
+-
+ def install_pth_link(
+ venv: VirtualEnvironment, project_name: str, lib_dir: Path
+ ) -> None:
+@@ -479,8 +460,6 @@ def virtualenv_template(
+ pip_editable_parts: tuple[Path, ...],
+ setuptools_install: Path,
+ wheel_install: Path,
+- coverage_install: Path,
+- socket_install: Path,
+ ) -> VirtualEnvironment:
+ venv_type: VirtualEnvironmentType
+ if request.config.getoption("--use-venv"):
+@@ -494,11 +473,7 @@ def virtualenv_template(
+
+ # Install setuptools, wheel, pytest-subket, and pip.
+ install_pth_link(venv, "setuptools", setuptools_install)
+ install_pth_link(venv, "wheel", wheel_install)
+- install_pth_link(venv, "pytest_subket", socket_install)
+- # Also copy pytest-subket's .pth file so it can intercept socket calls.
+- with open(venv.site / "pytest_socket.pth", "w") as f:
+- f.write(socket_install.joinpath("pytest_socket.pth").read_text())
+
+ pth, dist_info = pip_editable_parts
+
+@@ -511,13 +485,6 @@ def virtualenv_template(
+ # detects changed files.
+ venv.site.joinpath("easy-install.pth").touch()
+
+- # Install coverage and pth file for executing it in any spawned processes
+- # in this virtual environment.
+- install_pth_link(venv, "coverage", coverage_install)
+- # zz prefix ensures the file is after easy-install.pth.
+- with open(venv.site / "zz-coverage-helper.pth", "a") as f:
+- f.write("import coverage; coverage.process_startup()")
+-
+ # Drop (non-relocatable) launchers.
+ for exe in os.listdir(venv.bin):
+ if not exe.startswith(("python", "libpy")): # Don't remove libpypy-c.so...
diff --git a/dev-python/pip/pip-25.2.ebuild b/dev-python/pip/pip-25.2.ebuild
new file mode 100644
index 000000000000..30952dc2877a
--- /dev/null
+++ b/dev-python/pip/pip-25.2.ebuild
@@ -0,0 +1,191 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# please bump dev-python/ensurepip-pip along with this package!
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_TESTED=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+PYTHON_REQ_USE="ssl(+),threads(+)"
+
+inherit distutils-r1 shell-completion
+
+DESCRIPTION="The PyPA recommended tool for installing Python packages"
+HOMEPAGE="
+ https://pip.pypa.io/en/stable/
+ https://pypi.org/project/pip/
+ https://github.com/pypa/pip/
+"
+SRC_URI="
+ https://github.com/pypa/pip/archive/${PV}.tar.gz -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="test test-rust"
+RESTRICT="!test? ( test )"
+
+# see src/pip/_vendor/vendor.txt
+RDEPEND="
+ >=dev-python/cachecontrol-0.14.3[${PYTHON_USEDEP}]
+ >=dev-python/dependency-groups-1.3.0[${PYTHON_USEDEP}]
+ >=dev-python/distlib-0.4.0[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.9.0[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.1.1[${PYTHON_USEDEP}]
+ >=dev-python/packaging-25.0[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-4.3.8[${PYTHON_USEDEP}]
+ >=dev-python/pyproject-hooks-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.32.4[${PYTHON_USEDEP}]
+ >=dev-python/rich-14.1.0[${PYTHON_USEDEP}]
+ >=dev-python/resolvelib-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-70.3.0[${PYTHON_USEDEP}]
+ >=dev-python/tomli-w-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/truststore-0.10.1[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.13.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/ensurepip-setuptools
+ dev-python/ensurepip-wheel
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/scripttest[${PYTHON_USEDEP}]
+ <dev-python/setuptools-80[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-python/werkzeug[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ )
+ dev-vcs/git
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+python_prepare_all() {
+ local PATCHES=(
+ # remove coverage & pytest-subket wheel expectation from test suite
+ "${FILESDIR}/pip-25.2-test-wheels.patch"
+ # prepare to unbundle dependencies
+ "${FILESDIR}/pip-25.0.1-unbundle.patch"
+ )
+
+ distutils-r1_python_prepare_all
+
+ # unbundle dependencies
+ rm -r src/pip/_vendor || die
+ find -name '*.py' -exec sed -i \
+ -e 's:from pip\._vendor import:import:g' \
+ -e 's:from pip\._vendor\.:from :g' \
+ {} + || die
+
+ if use test; then
+ local wheels=(
+ "${BROOT}"/usr/lib/python/ensurepip/{setuptools,wheel}-*.whl
+ )
+ mkdir tests/data/common_wheels/ || die
+ cp "${wheels[@]}" tests/data/common_wheels/ || die
+ fi
+}
+
+python_configure() {
+ if use test && has_version "dev-python/pip[${PYTHON_USEDEP}]"; then
+ "${EPYTHON}" -m pip check ||
+ die "${EPYTHON} -m pip check failed, tests will fail"
+ fi
+}
+
+python_compile_all() {
+ # 'pip completion' command embeds full $0 into completion script, which confuses
+ # 'complete' and causes QA warning when running as "${PYTHON} -m pip".
+ # This trick sets correct $0 while still calling just installed pip.
+ local pipcmd='if True:
+ import sys
+ sys.argv[0] = "pip"
+ __file__ = ""
+ from pip._internal.cli.main import main
+ sys.exit(main())
+ '
+ "${EPYTHON}" -c "${pipcmd}" completion --bash > completion.bash || die
+ "${EPYTHON}" -c "${pipcmd}" completion --zsh > completion.zsh || die
+}
+
+python_test() {
+ if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
+ einfo "Skipping tests on ${EPYTHON}"
+ return 0
+ fi
+
+ local EPYTEST_DESELECT=(
+ tests/functional/test_inspect.py::test_inspect_basic
+ # Internet
+ tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist
+ tests/functional/test_install.py::test_double_install_fail
+ tests/functional/test_install.py::test_install_sdist_links
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ tests/functional/test_lock.py::test_lock_archive
+ tests/functional/test_lock.py::test_lock_vcs
+ # broken by system site-packages use
+ tests/functional/test_freeze.py::test_freeze_with_setuptools
+ tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip
+ tests/functional/test_uninstall.py::test_basic_uninstall_distutils
+ tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup
+ tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers
+ # broken by unbundling
+ "tests/functional/test_debug.py::test_debug[vendored library versions:]"
+ tests/functional/test_debug.py::test_debug__library_versions
+ tests/functional/test_python_option.py::test_python_interpreter
+ tests/functional/test_uninstall.py::test_uninstall_non_local_distutils
+ )
+ local EPYTEST_IGNORE=(
+ # from upstream options
+ tests/tests_cache
+ # requires proxy.py
+ tests/functional/test_proxy.py
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # unexpected tempfiles?
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ )
+ ;;
+ esac
+
+ if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/functional/test_install.py::test_install_sends_client_cert
+ tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_authentication
+ tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
+ )
+ fi
+
+ local -x PIP_DISABLE_PIP_VERSION_CHECK=1
+ local EPYTEST_PLUGINS=()
+ # rerunfailures because test suite breaks if packages are installed
+ # to system site-packages while it's running
+ local EPYTEST_RERUNS=5
+ local EPYTEST_XDIST=1
+ epytest -m "not network" -o addopts= -o tmp_path_retention_policy=all \
+ --use-venv
+}
+
+python_install_all() {
+ local DOCS=( AUTHORS.txt docs/html/**/*.rst )
+ distutils-r1_python_install_all
+
+ newbashcomp completion.bash pip
+ newzshcomp completion.zsh _pip
+}
diff --git a/dev-python/pygdbmi/pygdbmi-0.11.0.0.ebuild b/dev-python/pygdbmi/pygdbmi-0.11.0.0.ebuild
index d0e2631339ef..4435d109ccb1 100644
--- a/dev-python/pygdbmi/pygdbmi-0.11.0.0.ebuild
+++ b/dev-python/pygdbmi/pygdbmi-0.11.0.0.ebuild
@@ -28,4 +28,5 @@ RDEPEND="
>=dev-debug/gdb-9.6
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
diff --git a/dev-python/pyrate-limiter/pyrate-limiter-3.9.0.ebuild b/dev-python/pyrate-limiter/pyrate-limiter-3.9.0.ebuild
index fa4889d71cb5..347df98b58db 100644
--- a/dev-python/pyrate-limiter/pyrate-limiter-3.9.0.ebuild
+++ b/dev-python/pyrate-limiter/pyrate-limiter-3.9.0.ebuild
@@ -36,6 +36,7 @@ EPYTEST_DESELECT=(
)
EPYTEST_PLUGINS=( pytest-{asyncio,rerunfailures} )
EPYTEST_RERUNS=5
+: "${EPYTEST_TIMEOUT:=60}"
EPYTEST_XDIST=1
distutils_enable_sphinx docs \
diff --git a/dev-python/pyroute2/Manifest b/dev-python/pyroute2/Manifest
index a2cfbe26e8c9..21b992c6c8ab 100644
--- a/dev-python/pyroute2/Manifest
+++ b/dev-python/pyroute2/Manifest
@@ -1,2 +1,3 @@
DIST pyroute2-0.9.2.tar.gz 470901 BLAKE2B 64cf2fd568b95914cef50c0c77dc0e4fd72a9ab766fca357204b82ca68a37e544c58cd53835bfa95415e8677c61ec8db2561d02d48bff7ea2a39e5dc1058ac66 SHA512 b6012f4ab20bed3630a90bcd1672f9f5a467b0ddb6ea180d8bd11868ac2361898e2fa33fafcda857026384fde5952a03b5b7b9d1f2672b963019fd7b2a83a6c3
DIST pyroute2-0.9.3.tar.gz 463940 BLAKE2B 650bb3dd206f8b8a92ec83201e480e2aeb1dbf7babf55ba82f60b1efc2574110df529d075af9d5ff53c521a8d42e677d87b6b02451f8a0490adb0df68d49047f SHA512 f892cd77f9c7480fc774580bdb36fb0cf21b095a14a603667493b1281e14ee1ee2cd4578ec95d03365e7efacc42be33de4bf5b6380a50414cdd45b2922efddeb
+DIST pyroute2-0.9.4.tar.gz 463980 BLAKE2B 6557bf74a20b56295868cc1a8c0e31c0e052665edf0adbf534b281c0ec958a0cfc101d3dfce4d29b1314499d71fd05901636e028d6f11413ba85cd609132cedc SHA512 77f1023622730ed45f1e1bda81f5e31c5de10afc0821856152564c1663bc60659411f6695c2826239cd8137edb5831578393a746a5a6dc1afe129bc1dc55eb02
diff --git a/dev-python/pyroute2/pyroute2-0.9.4.ebuild b/dev-python/pyroute2/pyroute2-0.9.4.ebuild
new file mode 100644
index 000000000000..339212774a9d
--- /dev/null
+++ b/dev-python/pyroute2/pyroute2-0.9.4.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..14} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A pure Python netlink and Linux network configuration library"
+HOMEPAGE="
+ https://github.com/svinota/pyroute2/
+ https://pypi.org/project/pyroute2/
+"
+
+LICENSE="|| ( GPL-2+ Apache-2.0 )"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+# tests need root access
+RESTRICT="test"
+
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+"
diff --git a/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild b/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
index c99716e018e5..47da4df878fc 100644
--- a/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
+++ b/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
@@ -3,6 +3,8 @@
EAPI=8
+# mgorny: py3.14 fails on hypothesis tests for me (inside crash)
+# I suppose we can skip them but let's test a revdep first
PYTHON_COMPAT=( python3_{9,10,11,12,13} )
DISTUTILS_USE_PEP517=setuptools
diff --git a/dev-python/respx/respx-0.22.0-r1.ebuild b/dev-python/respx/respx-0.22.0-r1.ebuild
index decde3e63df0..a8ebbda4a03d 100644
--- a/dev-python/respx/respx-0.22.0-r1.ebuild
+++ b/dev-python/respx/respx-0.22.0-r1.ebuild
@@ -31,14 +31,14 @@ BDEPEND="
test? (
dev-python/flask[${PYTHON_USEDEP}]
dev-python/httpcore[${PYTHON_USEDEP}]
- dev-python/pytest-asyncio[${PYTHON_USEDEP}]
dev-python/starlette[${PYTHON_USEDEP}]
dev-python/trio[${PYTHON_USEDEP}]
)
"
+EPYTEST_PLUGINS=( pytest-asyncio )
distutils_enable_tests pytest
python_test() {
- epytest -p 'no:*' -p asyncio -o addopts=
+ epytest -o addopts=
}
diff --git a/dev-python/unasync/unasync-0.6.0-r1.ebuild b/dev-python/unasync/unasync-0.6.0-r1.ebuild
index ad82d39f53d4..15ca9f860d00 100644
--- a/dev-python/unasync/unasync-0.6.0-r1.ebuild
+++ b/dev-python/unasync/unasync-0.6.0-r1.ebuild
@@ -1,10 +1,10 @@
-# Copyright 2021-2024 Gentoo Authors
+# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1
@@ -22,13 +22,14 @@ LICENSE="|| ( Apache-2.0 MIT )"
SLOT="0"
KEYWORDS="amd64 arm64 x86"
+RDEPEND="
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/tokenize-rt[${PYTHON_USEDEP}]
+"
+
distutils_enable_sphinx docs/source \
dev-python/sphinxcontrib-trio \
dev-python/sphinx-rtd-theme
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
-
-RDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- dev-python/tokenize-rt[${PYTHON_USEDEP}]
-"
diff --git a/dev-python/virtualenvwrapper/virtualenvwrapper-6.1.1.ebuild b/dev-python/virtualenvwrapper/virtualenvwrapper-6.1.1.ebuild
index fb826b102525..8c009acc182e 100644
--- a/dev-python/virtualenvwrapper/virtualenvwrapper-6.1.1.ebuild
+++ b/dev-python/virtualenvwrapper/virtualenvwrapper-6.1.1.ebuild
@@ -5,7 +5,7 @@ EAPI=8
DISTUTILS_SINGLE_IMPL=1
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1 pypi