summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/aniso8601/aniso8601-10.0.1.ebuild2
-rw-r--r--dev-python/ansible-pylibssh/ansible-pylibssh-1.4.0.ebuild4
-rw-r--r--dev-python/apipkg/apipkg-3.0.2.ebuild8
-rw-r--r--dev-python/apipkg/files/apipkg-3.0.2-pytest-9.patch27
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.43.41.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.43.41.ebuild67
-rw-r--r--dev-python/build/build-1.5.0.ebuild2
-rw-r--r--dev-python/cffi/Manifest1
-rw-r--r--dev-python/cffi/cffi-2.1.0.ebuild72
-rw-r--r--dev-python/charset-normalizer/Manifest2
-rw-r--r--dev-python/charset-normalizer/charset-normalizer-3.4.8.ebuild45
-rw-r--r--dev-python/deprecation/deprecation-2.1.0-r1.ebuild2
-rw-r--r--dev-python/dulwich/Manifest6
-rw-r--r--dev-python/dulwich/dulwich-1.2.10.ebuild127
-rw-r--r--dev-python/elastic-transport/Manifest2
-rw-r--r--dev-python/elastic-transport/elastic-transport-9.2.1.ebuild67
-rw-r--r--dev-python/elastic-transport/elastic-transport-9.4.1.ebuild68
-rw-r--r--dev-python/elasticsearch/Manifest1
-rw-r--r--dev-python/elasticsearch/elasticsearch-9.3.0.ebuild89
-rw-r--r--dev-python/ensurepip-pip/ensurepip-pip-26.1.2.ebuild16
-rw-r--r--dev-python/ffmpeg-python/ffmpeg-python-0.2.0_p20220711-r1.ebuild8
-rw-r--r--dev-python/filelock/Manifest2
-rw-r--r--dev-python/filelock/filelock-3.29.6.ebuild31
-rw-r--r--dev-python/genson/Manifest1
-rw-r--r--dev-python/genson/genson-1.4.0.ebuild29
-rw-r--r--dev-python/grpcio-status/Manifest1
-rw-r--r--dev-python/grpcio-status/grpcio-status-1.82.0.ebuild46
-rw-r--r--dev-python/grpcio/Manifest3
-rw-r--r--dev-python/grpcio/grpcio-1.82.0.ebuild137
-rw-r--r--dev-python/hashin/hashin-1.0.5.ebuild2
-rw-r--r--dev-python/ijson/Manifest1
-rw-r--r--dev-python/ijson/ijson-3.5.1.ebuild37
-rw-r--r--dev-python/mando/mando-0.8.2.ebuild3
-rw-r--r--dev-python/musicbrainzngs/musicbrainzngs-0.7.1-r1.ebuild2
-rw-r--r--dev-python/mypy-extensions/mypy-extensions-1.1.0.ebuild2
-rw-r--r--dev-python/nuitka/nuitka-4.1.2.ebuild2
-rw-r--r--dev-python/nuitka/nuitka-4.1.3.ebuild2
-rw-r--r--dev-python/parso/Manifest1
-rw-r--r--dev-python/parso/parso-0.8.6.ebuild37
-rw-r--r--dev-python/pip/files/pip-26.1.2-py315.patch49
-rw-r--r--dev-python/pip/files/pip-26.1.2-unbundle-r1.patch240
-rw-r--r--dev-python/pip/pip-26.1.2-r1.ebuild191
-rw-r--r--dev-python/pkginfo/pkginfo-1.12.1.2.ebuild2
-rw-r--r--dev-python/pluginbase/pluginbase-1.0.1-r1.ebuild3
-rw-r--r--dev-python/plyvel/plyvel-1.5.1.ebuild3
-rw-r--r--dev-python/polib/polib-1.2.0.ebuild2
-rw-r--r--dev-python/pyocr/pyocr-0.8.5.ebuild2
-rw-r--r--dev-python/pypillowfight/pypillowfight-0.3.1.ebuild4
-rw-r--r--dev-python/pypresence/pypresence-4.6.1.ebuild2
-rw-r--r--dev-python/pyspf/pyspf-2.0.14-r3.ebuild2
-rw-r--r--dev-python/pytest-bdd/pytest-bdd-8.1.0-r1.ebuild5
-rw-r--r--dev-python/pytest-order/Manifest2
-rw-r--r--dev-python/pytest-order/pytest-order-1.4.0.ebuild37
-rw-r--r--dev-python/pytest-ordering/pytest-ordering-0.6-r1.ebuild4
-rw-r--r--dev-python/pytest-recording/Manifest1
-rw-r--r--dev-python/pytest-recording/pytest-recording-0.13.3.ebuild46
-rw-r--r--dev-python/pytest-recording/pytest-recording-0.13.4.ebuild21
-rw-r--r--dev-python/python-mpd2/python-mpd2-3.1.1.ebuild2
-rw-r--r--dev-python/python-xmp-toolkit/python-xmp-toolkit-2.1.0.ebuild2
-rw-r--r--dev-python/pyzbar/pyzbar-0.1.9.ebuild2
-rw-r--r--dev-python/qrcode/qrcode-8.2.ebuild3
-rw-r--r--dev-python/recommonmark/recommonmark-0.7.1-r1.ebuild3
-rw-r--r--dev-python/rply/rply-0.7.8-r1.ebuild3
-rw-r--r--dev-python/scikit-build-core/Manifest2
-rw-r--r--dev-python/scikit-build-core/scikit-build-core-1.0.0.ebuild52
-rw-r--r--dev-python/sigstore/Manifest1
-rw-r--r--dev-python/sigstore/sigstore-4.4.0.ebuild62
-rw-r--r--dev-python/snakeoil/snakeoil-0.11.1.ebuild2
-rw-r--r--dev-python/sphinx-bootstrap-theme/sphinx-bootstrap-theme-0.8.1.ebuild2
-rw-r--r--dev-python/sphinx-multiversion/sphinx-multiversion-0.2.4-r1.ebuild7
-rw-r--r--dev-python/sphinx-pytest/sphinx-pytest-0.3.0.ebuild2
-rw-r--r--dev-python/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.ebuild5
-rw-r--r--dev-python/svg-path/svg-path-7.0.ebuild2
-rw-r--r--dev-python/truststore/truststore-0.10.4.ebuild1
-rw-r--r--dev-python/types-setuptools/Manifest1
-rw-r--r--dev-python/types-setuptools/types-setuptools-83.0.0.20260706.ebuild20
-rw-r--r--dev-python/uv-build/Manifest1
-rw-r--r--dev-python/uv-build/uv-build-0.11.27.ebuild99
-rw-r--r--dev-python/uv/Manifest2
-rw-r--r--dev-python/uv/uv-0.11.27.ebuild163
-rw-r--r--dev-python/uvicorn/Manifest2
-rw-r--r--dev-python/uvicorn/uvicorn-0.50.2.ebuild70
-rw-r--r--dev-python/verboselogs/verboselogs-1.7-r1.ebuild3
-rw-r--r--dev-python/virtualenv/Manifest2
-rw-r--r--dev-python/virtualenv/virtualenv-21.6.0.ebuild117
-rw-r--r--dev-python/whenever/Manifest2
-rw-r--r--dev-python/whenever/whenever-0.10.2.ebuild147
-rw-r--r--dev-python/wtforms/Manifest1
-rw-r--r--dev-python/wtforms/wtforms-3.2.1.ebuild36
-rw-r--r--dev-python/xxhash/Manifest2
-rw-r--r--dev-python/xxhash/xxhash-3.8.1.ebuild39
-rw-r--r--dev-python/yapsy/yapsy-1.12.2-r2.ebuild2
94 files changed, 2023 insertions, 465 deletions
diff --git a/dev-python/aniso8601/aniso8601-10.0.1.ebuild b/dev-python/aniso8601/aniso8601-10.0.1.ebuild
index 861d69bdaaa8..f4c01b303a21 100644
--- a/dev-python/aniso8601/aniso8601-10.0.1.ebuild
+++ b/dev-python/aniso8601/aniso8601-10.0.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/ansible-pylibssh/ansible-pylibssh-1.4.0.ebuild b/dev-python/ansible-pylibssh/ansible-pylibssh-1.4.0.ebuild
index f62122803dea..d01c3bf5d2b9 100644
--- a/dev-python/ansible-pylibssh/ansible-pylibssh-1.4.0.ebuild
+++ b/dev-python/ansible-pylibssh/ansible-pylibssh-1.4.0.ebuild
@@ -46,12 +46,12 @@ python_test() {
# They would work by spawning sshd with PermitEmptyPasswords and then ssh'in in with the current user.
# "portage" and every other portage installable user is nologin.
# Adding a user that allows logging in does not seem reasonable.
- EPYTEST_IGNORE=(
+ local EPYTEST_IGNORE=(
tests/unit/scp_test.py
tests/unit/sftp_test.py
tests/unit/channel_test.py
)
- EPYTEST_DESELECT=(
+ local EPYTEST_DESELECT=(
tests/integration/sshd_test.py::test_sshd_addr_fixture_port
)
# pytest.ini adds alls sorts of stuff like pytest-cov
diff --git a/dev-python/apipkg/apipkg-3.0.2.ebuild b/dev-python/apipkg/apipkg-3.0.2.ebuild
index 3364f96849c2..751a17d59826 100644
--- a/dev-python/apipkg/apipkg-3.0.2.ebuild
+++ b/dev-python/apipkg/apipkg-3.0.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -27,6 +27,12 @@ BDEPEND="
dev-python/hatch-vcs[${PYTHON_USEDEP}]
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
export SETUPTOOLS_SCM_PRETEND_VERSION=${PV}
+
+PATCHES=(
+ # https://github.com/pytest-dev/apipkg/pull/58
+ "${FILESDIR}/${P}-pytest-9.patch"
+)
diff --git a/dev-python/apipkg/files/apipkg-3.0.2-pytest-9.patch b/dev-python/apipkg/files/apipkg-3.0.2-pytest-9.patch
new file mode 100644
index 000000000000..fcff58dab675
--- /dev/null
+++ b/dev-python/apipkg/files/apipkg-3.0.2-pytest-9.patch
@@ -0,0 +1,27 @@
+From ca5adbb0b918f63b33c60040104bb0ab6ede7e9d Mon Sep 17 00:00:00 2001
+From: Steve Kowalik <steven@wedontsleep.org>
+Date: Thu, 27 Nov 2025 16:48:00 +1100
+Subject: [PATCH] Support pytest 9
+
+Change the function specification of pytest_report_header to not use any
+arguments.
+
+Closes #55
+---
+ .github/workflows/pythonapp.yml | 2 +-
+ conftest.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/conftest.py b/conftest.py
+index 795c06b..7d2ef32 100644
+--- a/conftest.py
++++ b/conftest.py
+@@ -6,7 +6,7 @@
+ INSTALL_TYPE = "editable" if apipkg.__file__ == LOCAL_APIPKG else "full"
+
+
+-def pytest_report_header(startdir):
++def pytest_report_header():
+ return "apipkg {install_type} install version={version}".format(
+ install_type=INSTALL_TYPE, version=apipkg.__version__
+ )
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index 406389bbdae0..0f2f96b4d7ed 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -3,3 +3,4 @@ DIST boto3-1.43.24.gh.tar.gz 1156465 BLAKE2B 52937853e047217550a0cad9ee09e61f8d5
DIST boto3-1.43.29.gh.tar.gz 1161648 BLAKE2B 3f0a040019fd8ea2a42a82c75bf31e563ef1e74745e3848f59fd8e1eb9946c5470cce0ece81d602cdd104e1d1a0cce68460a0ad993b47cb9d25b40fa3963b9e0 SHA512 c52a78f22daf6b79d772f5661cb56a4c1c35a7ad0001742d84d1c3f308c10534377ade5618bb5a3f95d0c7b4aacc82f42c10a30e521b31d41b9a403adbee1560
DIST boto3-1.43.36.gh.tar.gz 1169288 BLAKE2B c316bf8bc804c7c7a70eed0b01a66d7cf8ffdd0662e3bdb54864a9c78d3baa1d092c99fd43dd2df93314fc4795738a6ad432cad6a333f0a5535e13b9c6765fca SHA512 bd9f623a67508741cd45b239a4e575bf5688146d38bdb4f3af0b294f17898205e23b57d04bf6ed9584b92088515be1fd6f11922fdba5cd19bcf3ea4340d16f55
DIST boto3-1.43.40.gh.tar.gz 1175361 BLAKE2B cb24a2dd76debf1b3b2d759d020b2cf17248db20044b06e0c191821170644f4762997a527b8e5c401305f5b0c725d1269d610c9cb1aa2bb776d894f70b09f3ac SHA512 eb7d0218051abddd74e544d8eaa4e83cdd2e9ef305d059c165c926ade12a795ae196eefbaa2b64176fe26a1bf20419d775670fccc4fda485c93197d10efcbcf1
+DIST boto3-1.43.41.gh.tar.gz 1176299 BLAKE2B 25ddfdcf9b0e5fdb96ad5af8d78bef74d7e8ed41a506bfc13f257fb5dfd725c7fe40e5bead8f20b760c110cac72363161be1cf03ec64d8b3107b0251e32a6362 SHA512 11efe41cf581d7fd94c8f12a7456408a8965789bad044a7c79c44661dd109238c2ec9a6632537c3331c759150324de7280c3771ce506f44b26a7cce92e6c867f
diff --git a/dev-python/boto3/boto3-1.43.41.ebuild b/dev-python/boto3/boto3-1.43.41.ebuild
new file mode 100644
index 000000000000..93fbbe6dd59b
--- /dev/null
+++ b/dev-python/boto3/boto3-1.43.41.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="The AWS SDK for Python"
+HOMEPAGE="
+ https://github.com/boto/boto3/
+ https://pypi.org/project/boto3/
+"
+SRC_URI="
+ https://github.com/boto/boto3/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/botocore-${PV}[${PYTHON_USEDEP}]
+ >=dev-python/jmespath-0.7.1[${PYTHON_USEDEP}]
+ >=dev-python/s3transfer-0.19.0[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ # don't lock versions to narrow ranges
+ sed -e '/botocore/ d' \
+ -e '/jmespath/ d' \
+ -e '/s3transfer/ d' \
+ -i setup.py || die
+
+ # do not rely on bundled deps in botocore (sic!)
+ find -name '*.py' -exec sed -i \
+ -e 's:from botocore[.]vendored import:import:' \
+ -e 's:from botocore[.]vendored[.]:from :' \
+ {} + || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/botocore/Manifest b/dev-python/botocore/Manifest
index dd4376dcdb29..46db7acb6e1d 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -3,3 +3,4 @@ DIST botocore-1.43.24.gh.tar.gz 16430918 BLAKE2B 526fc9ab71c37cbae5a6b23a0c0bb7e
DIST botocore-1.43.29.gh.tar.gz 16476072 BLAKE2B 2525545c2425568e8765100bad446e2ddb7c4ea80f78d52827456a368a4da68ad5e86c60ef6af5611a342e2c8b44c8a057d341941db31d6b1c6cd01506b912b3 SHA512 6d37f50ec4ace4252e7d303e9ddaac8571e28695beadf3d7c23f3d1f413bcc06734e88be6f834d8ef82b3583954b8acc7da325630ae4cce7371684957f3547ae
DIST botocore-1.43.36.gh.tar.gz 16601718 BLAKE2B b4643995a2c173c9df865923d6912e2c804da45b3bcfaf2e73e941366df02c23f4cb05408550992e9747aaacf1acaaced06dc497625e5e3dd5d8dc1eafc881b9 SHA512 02754b7766b91b569fa9aa3f83797c4b01834914415b535d690308e373583cafadf0b35846309aabbc0c66413d7adec05db0132e441eae273c4b9b78327570a8
DIST botocore-1.43.40.gh.tar.gz 16621912 BLAKE2B 87339ac693df7e8753b8a7463a93aea57f24005c48c6d5b0276307928704893f315e1b7c671d9a91340899bd8bff8846f7afa23eca4dbfaa03f54a3f07b2fa43 SHA512 49257c431950a63d34c137b2b3ed1bb642cfbdc98351dab2cb2dfdaae6f6e88ecb11c74d89d9ec52ad6b558e9d94fa6bc5da13c5a0e67ad441decf1df516e888
+DIST botocore-1.43.41.gh.tar.gz 16629580 BLAKE2B d8e01dbfbf2e3e890b44b9197e1959500256a5863d63b2c04a675f0dfd6ede3a3a961998f5f4dea62d868b11189f52e708f22680a74f3bb716a598a0c53e0dc2 SHA512 672411cc3030b95a98d9e3b0110a276e81fe3b1f0762213ededa8da93dd486bd2d15a9aec3ae76b9c2fbcea118a6512e49ac15f11a7367ad781ab29fa1eb68e4
diff --git a/dev-python/botocore/botocore-1.43.41.ebuild b/dev-python/botocore/botocore-1.43.41.ebuild
new file mode 100644
index 000000000000..a3a161f78545
--- /dev/null
+++ b/dev-python/botocore/botocore-1.43.41.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="Low-level, data-driven core of boto 3"
+HOMEPAGE="
+ https://github.com/boto/botocore/
+ https://pypi.org/project/botocore/
+"
+SRC_URI="
+ https://github.com/boto/botocore/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+ <dev-python/jmespath-2[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ >=dev-python/urllib3-1.25.4[${PYTHON_USEDEP}]
+"
+# unbundled packages
+RDEPEND+="
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/six[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ # unpin deps
+ sed -i -e "s:>=.*':':" setup.py || die
+
+ # unbundle deps
+ rm -r botocore/vendored || die
+ find -name '*.py' -exec sed -i \
+ -e 's:from botocore[.]vendored import:import:' \
+ -e 's:from botocore[.]vendored[.]:from :' \
+ {} + || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # rely on bundled six
+ tests/functional/test_six_imports.py::test_no_bare_six_imports
+ tests/functional/test_six_threading.py::test_six_thread_safety
+ )
+
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/build/build-1.5.0.ebuild b/dev-python/build/build-1.5.0.ebuild
index c2f3378b3fd1..2168111bbf5e 100644
--- a/dev-python/build/build-1.5.0.ebuild
+++ b/dev-python/build/build-1.5.0.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-DISTUTILS_USE_PEP517=flit
+DISTUTILS_USE_PEP517=flit-core
PYTHON_TESTED=( python3_{13..14} )
PYTHON_COMPAT=( python3_{13..14} )
diff --git a/dev-python/cffi/Manifest b/dev-python/cffi/Manifest
index 71dbc6b8cdfb..66e9b74065af 100644
--- a/dev-python/cffi/Manifest
+++ b/dev-python/cffi/Manifest
@@ -1 +1,2 @@
DIST cffi-2.0.0.tar.gz 523588 BLAKE2B 2038eb1eeb89b1015ea40202cc5dc0da62989288a41cccf75baeea86051a085e28798e75ce0a74316c2f5bd94e83e0b89d3df6b97ee0f4f61dac301e239bb3e9 SHA512 a8bf705e626f6b5858cc20e9044a23fd653d155e2a2d4cb59f1eed00ef13ebd92d5a2f07738c66b361cb24d863786d4379dcd9c176250b546fbd45758e51d4f4
+DIST cffi-2.1.0.tar.gz 531036 BLAKE2B 1df5a789895b405d7f842008c49bf0551887d578796c6b3ecffbc8a6b3a8b60f3dcd4417a805f62dfc4deea7ed0119384d9edbb619d22468d3acae1ff1f264b1 SHA512 44c5e434580ba5ff1f2c23bbabe959d49e77a8823648eaab631c46f175c2b4ff3b96d5976b66ef33b93537674a1ba01e355cf836d40de7e2c0557a51f5fc7959
diff --git a/dev-python/cffi/cffi-2.1.0.ebuild b/dev-python/cffi/cffi-2.1.0.ebuild
new file mode 100644
index 000000000000..3a1eb2549cd3
--- /dev/null
+++ b/dev-python/cffi/cffi-2.1.0.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# please keep this ebuild at EAPI 8 -- sys-apps/portage dep
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+# DO NOT ADD pypy to PYTHON_COMPAT
+# pypy bundles a modified version of cffi. Use python_gen_cond_dep instead.
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 toolchain-funcs pypi
+
+DESCRIPTION="Foreign Function Interface for Python calling C code"
+HOMEPAGE="
+ https://cffi.readthedocs.io/
+ https://pypi.org/project/cffi/
+"
+
+LICENSE="MIT-0"
+SLOT="0/${PV}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+
+# Needs recent libffi for HPPA fixes
+DEPEND="
+ >=dev-libs/libffi-3.4.4-r1:=
+"
+# setuptools as a modern distutils provider
+RDEPEND="
+ ${DEPEND}
+ dev-python/pycparser[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ virtual/pkgconfig
+ test? (
+ dev-python/py[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_sphinx doc/source
+EPYTEST_PLUGINS=()
+# xdist fails to collect the tests
+distutils_enable_tests pytest
+
+PATCHES=(
+ "${FILESDIR}"/cffi-1.14.0-darwin-no-brew.patch
+)
+
+src_prepare() {
+ if [[ ${CHOST} == *darwin* ]] ; then
+ # Don't obsessively try to find libffi
+ sed -i -e "s/.*\-iwithsysroot\/usr\/include\/ffi.*/\tpass/" setup.py || die
+ fi
+ distutils-r1_src_prepare
+}
+
+src_configure() {
+ tc-export PKG_CONFIG
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # these tests call pip
+ testing/cffi0/test_zintegration.py
+ )
+
+ "${EPYTHON}" -c "import _cffi_backend as backend" || die
+ epytest src/c testing
+}
diff --git a/dev-python/charset-normalizer/Manifest b/dev-python/charset-normalizer/Manifest
index 93e0ebfcf721..621b8f7fb7f4 100644
--- a/dev-python/charset-normalizer/Manifest
+++ b/dev-python/charset-normalizer/Manifest
@@ -1,2 +1,4 @@
DIST charset_normalizer-3.4.7.tar.gz 144271 BLAKE2B 46baf0eb8691da293f19206eaa9006b46c365291f57ed8a51d1d97771134cf6a280d25d0ef31712d2526d2013f71645c9906c0ac540c0ffea572f3ea502b375c SHA512 e0682214fc75b5e2a2ce5284ead57ca2883f4151c1dbdfd8399c38ca14251fa53b6f598f87408b1d6dbd5636bf627eec481b582dfe3f314cad761b5d63433250
DIST charset_normalizer-3.4.7.tar.gz.provenance 9402 BLAKE2B 9e3905ea5aa0fb8577b5ccfb2684eb3afc6ab59a45fef0d07167ee0b78f1ee5136548c46ba023e928145b52abc7ac79178117c323e2f7b98deefc0cac616b417 SHA512 d90705ed0ab90ef4502984712ee01ffc859fcbceb0b28201f8e53525a7290f64ffbc9bbe27d784663e92cde592216ce9ed8a8b7ab2e14ab6b89eac293e1b2494
+DIST charset_normalizer-3.4.8.tar.gz 151790 BLAKE2B 607925c91394c5e03735cf1add2a15e059753a33b64e7c8abc1f55b08b41226840f6c88d7509b00552a1d7cd276895185f95c2f2ce83831cf1f10a82aad02c68 SHA512 f47223d0eeab4b8269534eed44af523947c3dd64584612c31fd2dbcd36c552f5235b3b01df3a93fbd80c60472f86fc4b2e21c0fbf135f9967ece9c3df5e21d43
+DIST charset_normalizer-3.4.8.tar.gz.provenance 9599 BLAKE2B 58bf5b4c6eee69142c25857d6f43bc253b0d0fbab9e65e4232f8be1bf19f81d605e70e8a498764bfcc5f4e9eed0df4494374d2c4af6a6ff044f1242305aa4992 SHA512 a9cff1e15a502584998c1be71585fbacf7262312a0187cac5fa97383a0a2b2c52689759ead800289be581b27de24f16a7f4f4109676d384da9a1bbbe342e63e1
diff --git a/dev-python/charset-normalizer/charset-normalizer-3.4.8.ebuild b/dev-python/charset-normalizer/charset-normalizer-3.4.8.ebuild
new file mode 100644
index 000000000000..32b0e1128157
--- /dev/null
+++ b/dev-python/charset-normalizer/charset-normalizer-3.4.8.ebuild
@@ -0,0 +1,45 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# please keep this ebuild at EAPI 8 -- sys-apps/portage dep
+EAPI=8
+
+DISTUTILS_USE_PEP517=standalone
+DISTUTILS_EXT=1
+PYPI_VERIFY_REPO=https://github.com/jawah/charset_normalizer
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="The Real First Universal Charset Detector"
+HOMEPAGE="
+ https://pypi.org/project/charset-normalizer/
+ https://github.com/jawah/charset_normalizer/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+IUSE="+native-extensions"
+
+BDEPEND="
+ native-extensions? (
+ $(python_gen_cond_dep '
+ dev-python/mypy[${PYTHON_USEDEP}]
+ ' python3.{11..14})
+ )
+ dev-python/setuptools[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_compile() {
+ local -x CHARSET_NORMALIZER_USE_MYPYC=$(usex native-extensions 1 0)
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ epytest -o addopts=
+}
diff --git a/dev-python/deprecation/deprecation-2.1.0-r1.ebuild b/dev-python/deprecation/deprecation-2.1.0-r1.ebuild
index 275a64f66f77..589dcd309b01 100644
--- a/dev-python/deprecation/deprecation-2.1.0-r1.ebuild
+++ b/dev-python/deprecation/deprecation-2.1.0-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/dulwich/Manifest b/dev-python/dulwich/Manifest
index 1e5293f1244f..b199c9d77e1e 100644
--- a/dev-python/dulwich/Manifest
+++ b/dev-python/dulwich/Manifest
@@ -1,4 +1,7 @@
DIST bstr-1.12.1.crate 354916 BLAKE2B 07b8e047c7a115d7d722ef57a37c5ac1e7ddba080e35b4eed78c3104cd92f08af5e67609faaa7a480ae15031f54c3f5d88784e23c96e659a7f4800c42dad45c3 SHA512 63a1e62d43c4dce00f287421b1ec76accbbab7f0897c8df26227f533af325896c0c8921a873f4125381e7b89fbb69a4358a96698ec6ee61191955464ff1c84ac
+DIST bstr-1.12.3.crate 355150 BLAKE2B 7f600e90529e64fbcab3dbd736e9db5fe79da5908040a09216ff2f5a21f8e6a5bd79c9860c3bc0c4fa44669c0d5a1c58ac85db57fdc4816ca57c808fb647ba56 SHA512 5093e7fc678c31684468d7b779a6f129db6b3d87fe7e05b86950ff1ee1afdf1bf6ae2586144667c8ee798de37f5fd089be0f7318401565484fbd7de07f7c0330
+DIST dulwich-1.2.10.tar.gz 1310282 BLAKE2B f5e30c631299220c7879c9b9b47cac476856f8ff90e8520cfe4d7cd75debbcaef438a5f46a66ac7436df910860d6c1d6a722865b49083e70c0dd4d1d8d2466f2 SHA512 cad8667471c2a97eb224c130a57cb6c6c2d8e5c77a290d4dcd3e0cb60d190e6932ffba848ee8945940b0a84c482aea87dd0c363bb7e83042e9e2364b169c3dc2
+DIST dulwich-1.2.10.tar.gz.provenance 9957 BLAKE2B fcf20c4734f2ee38e97cda50075064a3d631715c42a8bf8dd337c2183c2c91452b81fe6692fd93692b534b26ff5a38b4bd06eb8c8c6e8510b8fc8c57eb7c367b SHA512 ac2a9b8ba116ac1acad87e1918a60ba8679ef0a26597e95b8c1697d7d507f886310dffdb5219e667766389269f7f8b793859acbcf32f6dc69b55cb157559f7ed
DIST dulwich-1.2.6.tar.gz 1257895 BLAKE2B 73362d94f9d4823ec36fe30e956c96d7de7504cdd4db61fbf43f283d3ae97abe2c2c40ec68693d87e4b06d02717733ac24d6a61b22fa5e577f233df32432459e SHA512 5be90b5fa1d806970e6fd3c5a70749e48c9639d614b199b25afd5f3725d8fe201b43cfd69a8f45840bf883df3f0e4f5db1bf54ebf3b6dab3caf1373e265eab7d
DIST dulwich-1.2.6.tar.gz.provenance 9894 BLAKE2B 0e3dc11b5dd2dd1c7de37b5d19da9927d1fc6ef7dfda8ee2256e3d74871de03c9ead52bbab472833e5f34f50c509df116c4e2c591bc2263363144e8e9839e535 SHA512 f8148280fcc34d2730fe3783043592dd78b710cca3898c13180dea306c81b342e447a1fda5a4a8d360224dbe21f059e622f7c50b39ced72870f34cb1a4fe1323
DIST dulwich-1.2.7.tar.gz 1284735 BLAKE2B 7799fece3b87c2c53f7bdd28d3854754035fd971e0191302821ad57d572bc89699a66b8b34219834a92f50f120e936e0cb230c7026a945783dd8932e6c7f3bcc SHA512 57ebe0e682b7e01a2ee452f8378be6228ebfa8d35549c7f1d7d2c24263972649def0bf5c57e911ba859f61d7d26df9b6053c7b2222e858076f9a9272d8fed660
@@ -7,6 +10,7 @@ DIST dulwich-1.2.8.tar.gz 1301174 BLAKE2B 482a1b7c7690fa76c6e177ea6058b7c2c61d38
DIST dulwich-1.2.8.tar.gz.provenance 9941 BLAKE2B bcd66b51766a99af1960221802e54f2854c4eed9eda1e216ea0059496d4178fc928257138415c14a827b2365e5520dcaef0e93a2a6b4a1abb350e4ca18bc710b SHA512 61e3d9f117e1be82bb2a018dcd9ac3246984a87126a3d9da7850712be269db755a9c6865738c0e14cd62a5f65a6f52b3ba342fc9855524b0cd69455aa743c7f8
DIST heck-0.5.0.crate 11517 BLAKE2B 5365ec43b2239a76b33a174f1a4292ece4147f9d382a68c6c60db78fdc8bad0afb1d51a65bcb25e96675372faa4ea37c318265030b0546ba51942f7c929e1835 SHA512 f044fc9c3d22466629fd8f772ec0555350fd611c0cfadca51d99a3d2f10e155f77c1091916c8a95a6b9b499f366c2e99a5fbf45b010f988bfb9b2501bf9f6a76
DIST libc-0.2.185.crate 821775 BLAKE2B e0e93466a29c9d19f7d9ab3581b491908d06873a9c57a96b0cae2eed0f0d1cb184ebe80bc61e36d5ab316ab35dca529a322b29e6895f7f339e72c79cca7f8ca2 SHA512 c8dbcaaf2e5d8377a4d1003af4a7210fbfe4f9b1e8497f07d88a231a8d5c9f67014e650a5e18e913e7b4d6a1835c4cbc9c31ce0cd224ea28acbdbb39034a300e
+DIST libc-0.2.186.crate 821883 BLAKE2B ebe7aac5f8937a8064c64a0d4dc72e5fc794080e09b96c6d245bdec0fd9a19d49ab38e25306e22e47564764cf5dcde45855237cffc70230a143eca2626bd5c3c SHA512 6a58e671ec6811dff9a0d7d4db8f37d38bcbca9efff20dad4706190e5cdb77b426567754bcf0ef0f2d0c31d6506401f724f3ca500b9bed57bb8605b1141ed690
DIST memchr-2.8.0.crate 97780 BLAKE2B 228ce0b6fe8b168f5c31031690a5eb44466609b64c5c221e0b3f56fe331b4f25c0124d613c94ef030b225000978953641f5b07458d530c1d50eec3e1d54e4274 SHA512 8089238153493a0ff6adf980efd1ea2ba10eeff9f33fff200268692662d24152a8c14a4dac37fbc6a55dca741701fd256174f10a9838ca66f038f08e090de12f
DIST memchr-2.8.1.crate 98743 BLAKE2B 04182c5492975f5b5f609c1a00e2ce04ec1001a1126143a41084b467e185a02b8f0acd85635ffd8f180c51b97832e7558785dedbe1598b538ce222b9f4603ea0 SHA512 a11ff12e2e2fda7ee6e45dcc39bba289d0c2605e996263782d7039c3922781a51fdbe6e0b0455a0075e126b9ff2369a5935d9162e6d5903110120c12886322e1
DIST memchr-2.8.2.crate 99069 BLAKE2B 1a9567e9e05fd357df8ff8ef835316b3692e2df6e8a2a8783ddb2fa7596ac7bca88159b800a2b8ae070cb1ca09d8c48abea658b884cc091a6a12e40b5d35bd6e SHA512 011574c7b8519b19298e553d170c1defc5fd06698d4c00684715802de57b235562c8849ca7bc0ad2b77a05eb2f94af1f49289285803d4461460469248319a15e
@@ -24,11 +28,13 @@ DIST pyo3-macros-0.29.0.crate 8915 BLAKE2B c12d23753d5aba7333183d4b41f16c8da1d42
DIST pyo3-macros-backend-0.28.3.crate 88063 BLAKE2B a484b12bbab3031838f61149ab9f08b9e460a2bd02089e08e58dac2cb747afbc0cdfe64018ed4c8cb0bbbd1d22e3eb05a6a72b020da6b71a584ec51ca8d24292 SHA512 45ce31ed64ee4fd0249736d480c9840a756bc45934d6803ae11e0680057ecf4cc74c71b47ccf9241fc3ab5c1e0b9c758426f08bd523d1ace92fc308302ea3c84
DIST pyo3-macros-backend-0.29.0.crate 91943 BLAKE2B 7c2977dd9c80f3dd1f5375b0c65492b46048ca02e6355ad746bc8430cf92eaf25c701f416469eb69724fde5220651b1095c09eb9e3ff860176f862d7c7287407 SHA512 13a7af3958c09969637827d97ab9bbc664c407dda9e4283afaf495757798cf6f84932468bc092160fa75211ce0aafe6efc657f3a390234d77a67362cfb31fe0f
DIST quote-1.0.45.crate 31564 BLAKE2B 1b2c2c3e6ebabfe10affa4c43ca0bfd1f52d8fd49e1df463e13e63a82de41272089c8e09e4c02e8a33cfee768ace26d4d42a50752de8fb5a776c59806139ad5d SHA512 df96ede01ebd0ed642b758bf1d0862d0e116fc2b3343e14edb657ce5438ccabe743dec4a0a40de4dee98c134d169af9aba459faadf9c7a832b26377e755d49b0
+DIST quote-1.0.46.crate 31628 BLAKE2B b004131fc9942e278d3a89e9a68ea76098b94a488a4e5577074f59983809d92bb4803f759c47426a683191cc23bbe9783bbebbcbcaed6488d45a0e01b787cd36 SHA512 f51e65743b9f15b491d20bb6c3a0df921cfec29df8bafca36c9dde034b5117fe3f4eedcc258126c6cb1729be1ffde5fcf7e5b0fb0c3de4a618f46ab3cd803e77
DIST serde-1.0.228.crate 83652 BLAKE2B d1909d671ea6d5c2eb4ce34ee4493ecaf665d416111b4cac754b5d33b85f916296110bae7aa961efd987a2ceb4a31ba645752ce99dd28dedb9f1eecdd4d7b1b2 SHA512 9b645d6214203533b303fc5e88ad4f7686c22df084878d18a0209a92304a340fcb62fdde88a7080cf7a7348d47b9b363885c4e1da90dba08cc99ff620f375e97
DIST serde_core-1.0.228.crate 63111 BLAKE2B 8a64e4627ad21a3d16dd37d53fb809d11171bf337ec16bb1223075cbf81b6b85cd1c8d19abadf42460d0fbea323e2f351eeb6ef823389d519121b74e68edb215 SHA512 43897e3a7ebdc85d81d1cb30cda8f0a11610f6f551529c8a21462c24fb83110652b462846aa3e1bed5fbf8b5d7927018845a524ee9e079e2c8acf2c687efd6c4
DIST serde_derive-1.0.228.crate 59605 BLAKE2B 166ee2f9ff9f7a0928d0a65a72db3d9226c377bca2a1771956e8ecd9c7faf0544673c9c21be2a5553e621b55c74c7b958052592a1cf6eb6427a2d4f3e3dc6bb8 SHA512 8bfdfeee10ee7ef0670972aa963ef63b13e8eb2c8a09b9e0b717f92551aa89b3dd2a0dcbae6ccf20a1caece07e6adb18f0db56fdac020e4e0281b0d24e376003
DIST similar-3.1.0.crate 78442 BLAKE2B a68f2682af0876871cea3b0978a43285b07ea1050e01f0604e2aa1c016149f2619637ec4c34b9e0c8ee237b08449caa3b79f449cb6161d3f677ad3d25b71b110 SHA512 7c8d5f0a3ba376f1c4dd891772a0c87bed52027b8bcbaadfe30f0c79540e9058e68a706f6388dfc6a55f0970cdc8ef0b887eb924463d49a735e10b01bda0e727
DIST similar-3.1.1.crate 79833 BLAKE2B 7e8ae0e74b88ce0014cfd924ca6d8b2e807ab4709610dc82363358dc051cb1121e16c41f6a271e67483c0005d3e15e32d66600311393fc69e54872bf8e82b19a SHA512 f197b2dbca2c9a09314042ddd6d413410f952f284cf12b8d86b7a6a2584ba61efb4a29e8d3bc954fdde79265711a97fe1a3e94ef82e8ade9379a5981c7bb793e
DIST syn-2.0.117.crate 306011 BLAKE2B bbaec02c4322f522bdfc87caa4ce6fd1e09bbf8f4a102d9ed8728efacdd843a2750f616dce5b2d3a3e46bbb7d57439fbd10e328bc1d4a01e980986cd815798af SHA512 035c2e63542592b6a4058a2a82d4c2c1f5793f84fb1b04cbd393337a26fcf661a1f3bea439ce98a1fe943b1c4d36d2bda16df3bbc3fa6ca35e1548d530dc8416
+DIST syn-2.0.118.crate 305533 BLAKE2B f0ba994123a9ade5ea94e72f91d836c5af769ccca4c8c8d9ba8ae8c2bf2c7cfc88d4b068efa886e3c25c5635b2759b1bbf6b7b4afea6b66fc5084ad744272ba8 SHA512 24cbedce5f751fb5fab46ce27b9772fb59692e5520039a4d66a9f4d8d8b381d2af5c5be5eebd1e24cdba49fcb40a90b38f61477dd5dc96d8f272823f9a93b61d
DIST target-lexicon-0.13.5.crate 26928 BLAKE2B f8c62cb91f68a635e6ce3fc254df9ce378b5e8f62c1147404c967484b9ed97fb33d7993b4671611db76566063e999d658d201f856f70196ec678d72cc758cf6d SHA512 956df27c01e1186c5356117ffd07810fc0b62fb919d5bfd215955ba85be00ef675212a3c0dc36679986be7b825442fec5c93c7643b7e1e19c04572e6463546fc
DIST unicode-ident-1.0.24.crate 49298 BLAKE2B 34ba2906a3ebc06f52a4ba77dff96a8f3fb977718d260886fa9e051c5830765641b65a63977110f3a79f31fa177b385f81b01d56c80f6a0324d36eae72e2ebf0 SHA512 7be712d8d0075ac9341790180e312f66264d3e0255c91b38df0951baa5e446dec24551bb2125a66a1cb9b6ca2f1ea37c0cc15fa3dd74f398ecf4d5302c7dc259
diff --git a/dev-python/dulwich/dulwich-1.2.10.ebuild b/dev-python/dulwich/dulwich-1.2.10.ebuild
new file mode 100644
index 000000000000..1152ac733506
--- /dev/null
+++ b/dev-python/dulwich/dulwich-1.2.10.ebuild
@@ -0,0 +1,127 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=1
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYPI_VERIFY_REPO=https://github.com/jelmer/dulwich
+PYTHON_COMPAT=( python3_{13..14} )
+
+RUST_MIN_VER="1.85.0"
+CRATES="
+ bstr@1.12.3
+ heck@0.5.0
+ libc@0.2.186
+ memchr@2.8.2
+ once_cell@1.21.4
+ portable-atomic@1.13.1
+ proc-macro2@1.0.106
+ pyo3-build-config@0.29.0
+ pyo3-ffi@0.29.0
+ pyo3-macros-backend@0.29.0
+ pyo3-macros@0.29.0
+ pyo3@0.29.0
+ quote@1.0.46
+ serde_core@1.0.228
+ serde_derive@1.0.228
+ similar@3.1.1
+ syn@2.0.118
+ target-lexicon@0.13.5
+ unicode-ident@1.0.24
+"
+
+inherit cargo distutils-r1 pypi
+
+DESCRIPTION="Pure-Python implementation of the Git file formats and protocols"
+HOMEPAGE="
+ https://github.com/jelmer/dulwich/
+ https://pypi.org/project/dulwich/
+"
+SRC_URI+="
+ native-extensions? (
+ ${CARGO_CRATE_URIS}
+ )
+"
+
+LICENSE="GPL-2+ Apache-2.0"
+LICENSE+=" native-extensions? ("
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions Unicode-3.0
+ || ( MIT Unlicense )
+"
+LICENSE+=" )"
+
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+IUSE="doc examples +native-extensions test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/urllib3-2.2.2[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ >=dev-python/typing-extensions-4.0[${PYTHON_USEDEP}]
+ ' 3.11)
+"
+BDEPEND="
+ native-extensions? (
+ ${RUST_DEPEND}
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ )
+ test? (
+ ${RDEPEND}
+ dev-python/fastimport[${PYTHON_USEDEP}]
+ dev-python/gpgmepy[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-6[${PYTHON_USEDEP}]
+ dev-python/merge3[${PYTHON_USEDEP}]
+ dev-python/paramiko[${PYTHON_USEDEP},server(+)]
+ )
+"
+
+distutils_enable_sphinx docs
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/dulwich/_.*.so"
+
+pkg_setup() {
+ # avoid rust_pkg_setup which will die when there's no Rust found
+ if use native-extensions ; then
+ rust_pkg_setup # implicitly inherited through cargo
+ fi
+}
+
+src_unpack() {
+ pypi_src_unpack
+ cargo_src_unpack
+}
+
+python_compile() {
+ # make extension build errors fatal
+ local -x CIBUILDWHEEL=1
+ unset PURE
+ if ! use native-extensions; then
+ local -x PURE=1
+ fi
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ # remove interference from the tests that do stuff like user.name
+ unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
+ unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE
+ unset EMAIL
+ # Do not use make check which rebuilds the extension and uses -Werror,
+ # causing unexpected failures.
+ "${EPYTHON}" -m unittest -v tests.test_suite ||
+ die "tests failed with ${EPYTHON}"
+}
+
+python_install_all() {
+ if use examples; then
+ docompress -x "/usr/share/doc/${PF}/examples"
+ dodoc -r examples
+ fi
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/elastic-transport/Manifest b/dev-python/elastic-transport/Manifest
index 7ad0a62636d9..c2fec15e71a0 100644
--- a/dev-python/elastic-transport/Manifest
+++ b/dev-python/elastic-transport/Manifest
@@ -1,3 +1 @@
-DIST elastic-transport-python-9.2.1.gh.tar.gz 78272 BLAKE2B d469e4caa01f741dac083e30fd06b8770739060ae4eee5e4b6b5de1c043bbaf4a5267b3bac3bae63513416d0ddde2981b7c4867cd8a14dd53ea16e14e5187b4f SHA512 5de5929b01e213f61891c6e535da2d4a6197f31a8bc68b372622ce128141a1521fe2c20a92c83afdd0fd65487c9c753755bc0f08716e252fbc3e8ed1906305a6
-DIST elastic-transport-python-9.4.1.gh.tar.gz 79921 BLAKE2B 34813c01b8988e98ea54699f979f4689a6a15c00ed72c6358b3efee27c40f348de9aadc690c732242ef74f06428d9a64973d462f324997c3b2d899610ccd5309 SHA512 f7aa92bad0455d82de01329905bd561b3a3159d5cb711df9dd962f16f4a45557d486b38128c190dfe27e9f073592cb650e3ecd6165c4330f5c0e5b07922d9c8e
DIST elastic-transport-python-9.4.2.gh.tar.gz 80044 BLAKE2B fde26b2d8f2adff6156ada512f4a36a09cc99fb3c85d4a72b7002e3f08e73d015df29e67db97adbc304576cf499f758987a0320a250f14c184d4bb958286a80d SHA512 4bd9115de209eb0c978b274dcb242a3068ab7c870a3217fd65b67dac3f000743abd2f0cff22da376dcf77d85f80b2aee9f0a7fbaac6801a164757f9d752f0c5f
diff --git a/dev-python/elastic-transport/elastic-transport-9.2.1.ebuild b/dev-python/elastic-transport/elastic-transport-9.2.1.ebuild
deleted file mode 100644
index 09031325cc68..000000000000
--- a/dev-python/elastic-transport/elastic-transport-9.2.1.ebuild
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright 2023-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1
-
-MY_P=elastic-transport-python-${PV}
-DESCRIPTION="Transport classes and utilities shared among Python Elastic client libraries"
-HOMEPAGE="
- https://github.com/elastic/elastic-transport-python/
- https://pypi.org/project/elastic-transport/
-"
-SRC_URI="
- https://github.com/elastic/elastic-transport-python/archive/v${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="amd64 arm64 x86"
-PROPERTIES="test_network"
-RESTRICT="test"
-
-RDEPEND="
- dev-python/certifi[${PYTHON_USEDEP}]
- dev-python/sniffio[${PYTHON_USEDEP}]
- >=dev-python/urllib3-1.26.2[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- dev-python/aiohttp[${PYTHON_USEDEP}]
- dev-python/httpx[${PYTHON_USEDEP}]
- dev-python/opentelemetry-api[${PYTHON_USEDEP}]
- dev-python/opentelemetry-sdk[${PYTHON_USEDEP}]
- dev-python/orjson[${PYTHON_USEDEP}]
- dev-python/requests[${PYTHON_USEDEP}]
- dev-python/respx[${PYTHON_USEDEP}]
- dev-python/trustme[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_sphinx docs/sphinx \
- dev-python/furo \
- dev-python/sphinx-autodoc-typehints
-EPYTEST_PLUGINS=( anyio pytest-asyncio pytest-httpbin pytest-httpserver )
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-EPYTEST_DESELECT=(
- # fragile to random warnings
- tests/node/test_http_aiohttp.py::TestAiohttpHttpNode::test_uses_https_if_verify_certs_is_off
- tests/node/test_http_aiohttp.py::test_ssl_assert_fingerprint
- tests/node/test_urllib3_chain_certs.py::test_assert_fingerprint_in_cert_chain
- # hardcodes supported Accept-Encoding
- # https://github.com/elastic/elastic-transport-python/issues/269
- tests/async_/test_async_transport.py::test_async_transport_httpbin
- tests/async_/test_httpbin.py::test_node
-)
-
-python_test() {
- epytest -o addopts= # avoid coverage
-}
diff --git a/dev-python/elastic-transport/elastic-transport-9.4.1.ebuild b/dev-python/elastic-transport/elastic-transport-9.4.1.ebuild
deleted file mode 100644
index 60eb4adb4105..000000000000
--- a/dev-python/elastic-transport/elastic-transport-9.4.1.ebuild
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2023-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1
-
-MY_P=elastic-transport-python-${PV}
-DESCRIPTION="Transport classes and utilities shared among Python Elastic client libraries"
-HOMEPAGE="
- https://github.com/elastic/elastic-transport-python/
- https://pypi.org/project/elastic-transport/
-"
-SRC_URI="
- https://github.com/elastic/elastic-transport-python/archive/v${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~x86"
-PROPERTIES="test_network"
-RESTRICT="test"
-
-RDEPEND="
- dev-python/certifi[${PYTHON_USEDEP}]
- dev-python/sniffio[${PYTHON_USEDEP}]
- >=dev-python/urllib3-2[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- dev-python/aiohttp[${PYTHON_USEDEP}]
- dev-python/httpx[${PYTHON_USEDEP}]
- dev-python/opentelemetry-api[${PYTHON_USEDEP}]
- dev-python/opentelemetry-sdk[${PYTHON_USEDEP}]
- dev-python/orjson[${PYTHON_USEDEP}]
- dev-python/requests[${PYTHON_USEDEP}]
- dev-python/respx[${PYTHON_USEDEP}]
- dev-python/trustme[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_sphinx docs/sphinx \
- dev-python/furo \
- dev-python/sphinx-autodoc-typehints
-EPYTEST_PLUGINS=( anyio pytest-asyncio pytest-httpbin pytest-httpserver )
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-EPYTEST_DESELECT=(
- # fragile to random warnings
- tests/node/test_http_aiohttp.py::TestAiohttpHttpNode::test_uses_https_if_verify_certs_is_off
- tests/node/test_http_aiohttp.py::test_ssl_assert_fingerprint
- tests/node/test_urllib3_chain_certs.py::test_assert_fingerprint_in_cert_chain
- # hardcodes supported Accept-Encoding
- # https://github.com/elastic/elastic-transport-python/issues/269
- tests/async_/test_async_transport.py::test_async_transport_httpbin
- tests/async_/test_httpbin.py::test_node
- tests/test_httpbin.py::test_node
-)
-
-python_test() {
- epytest -o addopts= # avoid coverage
-}
diff --git a/dev-python/elasticsearch/Manifest b/dev-python/elasticsearch/Manifest
index d1f2baca8724..b71d53fdd622 100644
--- a/dev-python/elasticsearch/Manifest
+++ b/dev-python/elasticsearch/Manifest
@@ -1,2 +1 @@
-DIST elasticsearch-py-9.3.0.gh.tar.gz 2522110 BLAKE2B c0ff3ea253156aa8eeb264bca5f9a088a7c20fb93267b0c49e113b5865a3c5745203c4f7285a4f10da02e29db469cbac8d8e7de5b478a022e019d34080ec28bf SHA512 1398bea065f48dbf87b42801a2e19d91a27a5b13bbc158535657b49b40a4b914b9ddc610cc88cfab5b56d69106f530eb472e6a1222f26b7c792db844091bbad8
DIST elasticsearch-py-9.4.1.gh.tar.gz 2556895 BLAKE2B 56563f06057450c071cd2c3a70d96d457d7b03ee5a6e421721cbd2b684a1667b5d4d41e079cfc54105da338f6985c5526a30599817fdb8da9b3e7d83dc8d2d89 SHA512 a8513c2340bb596b1f648509fccbc9855644e8bee3b9aa3f655a85e0ce1a037a07c47ce5e24fe07ed8bd33069806953535c46c52d0e0c05224ab2126c424cbed
diff --git a/dev-python/elasticsearch/elasticsearch-9.3.0.ebuild b/dev-python/elasticsearch/elasticsearch-9.3.0.ebuild
deleted file mode 100644
index 601c70f9906f..000000000000
--- a/dev-python/elasticsearch/elasticsearch-9.3.0.ebuild
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{13..14} )
-
-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/anyio[${PYTHON_USEDEP}]
- <dev-python/elastic-transport-10[${PYTHON_USEDEP}]
- >=dev-python/elastic-transport-9.2.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/sniffio[${PYTHON_USEDEP}]
- dev-python/typing-extensions[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- ${RDEPEND}
- dev-python/httpx[${PYTHON_USEDEP}]
- 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/pydantic[${PYTHON_USEDEP}]
- dev-python/python-dateutil[${PYTHON_USEDEP}]
- >=dev-python/pyyaml-5.4[${PYTHON_USEDEP}]
- dev-python/trio[${PYTHON_USEDEP}]
- dev-python/unasync[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_sphinx docs/sphinx \
- dev-python/sphinx-autodoc-typehints \
- dev-python/sphinx-rtd-theme
-
-EPYTEST_PLUGINS=( anyio 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/ensurepip-pip-26.1.2.ebuild b/dev-python/ensurepip-pip/ensurepip-pip-26.1.2.ebuild
index cad5d582800c..4b46891eaaab 100644
--- a/dev-python/ensurepip-pip/ensurepip-pip-26.1.2.ebuild
+++ b/dev-python/ensurepip-pip/ensurepip-pip-26.1.2.ebuild
@@ -154,22 +154,6 @@ python_test() {
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
- # wrong path
- tests/functional/test_install.py::test_install_editable_with_prefix_setup_py
- # wrong exception assumptions
- tests/unit/test_utils_datetime.py::test_parse_iso_datetime_invalid
- # TODO
- tests/functional/test_install.py::test_install_warns_on_unexpected_post_install_import
- )
- ;;
- esac
-
if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
EPYTEST_DESELECT+=(
tests/functional/test_install.py::test_install_sends_client_cert
diff --git a/dev-python/ffmpeg-python/ffmpeg-python-0.2.0_p20220711-r1.ebuild b/dev-python/ffmpeg-python/ffmpeg-python-0.2.0_p20220711-r1.ebuild
index 169a8d8ce751..661cc8783507 100644
--- a/dev-python/ffmpeg-python/ffmpeg-python-0.2.0_p20220711-r1.ebuild
+++ b/dev-python/ffmpeg-python/ffmpeg-python-0.2.0_p20220711-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -32,11 +32,6 @@ RDEPEND="
dev-python/numpy[${PYTHON_USEDEP}]
media-video/ffmpeg
"
-BDEPEND="
- test? (
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- )
-"
PATCHES=(
"${FILESDIR}/${PN}-0.2.0-no-future-795.patch"
@@ -48,5 +43,6 @@ EPYTEST_DESELECT=(
ffmpeg/tests/test_ffmpeg.py::test_pipe
)
+EPYTEST_PLUGINS=( pytest-mock )
distutils_enable_tests pytest
distutils_enable_sphinx doc/src
diff --git a/dev-python/filelock/Manifest b/dev-python/filelock/Manifest
index 99b72d5c4529..91cf009a8922 100644
--- a/dev-python/filelock/Manifest
+++ b/dev-python/filelock/Manifest
@@ -6,3 +6,5 @@ DIST filelock-3.29.4.tar.gz 63028 BLAKE2B 9e918f65b3f7e4126a42864c5bdb8734b09e12
DIST filelock-3.29.4.tar.gz.provenance 9479 BLAKE2B d6541ac68521d0d58b6e2acebb0d9812a47a81d83ea29dfd66c4b782bc89a25aeb6402a2430d8ef2aed24358d79b9f5235262f6e82b9d84a8bfa5c0268632a0f SHA512 3a46b418d4ad473e7973a0eb5da831970ea21d662aaf764b626eff514c59829b224b0e8f0df5e7540f8ea6b027a6990dcc4425d7e1a71d7249f4b5bd44d92731
DIST filelock-3.29.5.tar.gz 68927 BLAKE2B 7f54bcaade7048e6cb41528752ede9b3978c27553e693cecb26f62b8bac5ee5634b9dcc6fa40a15e75c1f9537c597858fe69beb321fa635fd4afed13dd70009a SHA512 da590940023c63584f6eef35fa63a0628a4e182a80a51aca155bec11439571a551e72e6f9f23a0dd16b35e1d4d821417e2d1ce0bf1c3526fc48c6fc301185b1c
DIST filelock-3.29.5.tar.gz.provenance 9914 BLAKE2B 5c6fc5c65a8af3abc7fb41db3c1b2e88bef64d9e855054dd78c65e0ae3638692585dd4ceccd2ba1e35f4b090eda47443fdd8510f0a5adc087fc3badfbacbfeb9 SHA512 fd223248bc0a61ef49313d1cb6e9c08cef5ff7ad39345da7b51a1b4ddf387ba09e8e3e7a08ad941bd7c96ac46d705c98704bc7f88adb81fd95e24aad0b46e698
+DIST filelock-3.29.6.tar.gz 70301 BLAKE2B f789d28c298e00cd8ecbb6dbb86b146b26f4c917b6e0e19b67f58800eeb981e388886627809428e7d70a7d106dd21264daacb12488bff3ff4fa0c32cf9a18499 SHA512 08205a6c1b235e0e7588b2f7fa1c9f7f9d43dc2728d3abe17513d07e65f839ec55bc7b90935d4af5d33a4384667d3b70c7897f18d79967c2b7db961d14de908a
+DIST filelock-3.29.6.tar.gz.provenance 9714 BLAKE2B fb55c35105da0badc79f989c808fb1c38e3e69ceeac430454e13c9fdfc1140d2051eed26936286fdb9338304a1de682c553812fe47ffe826dbdf0067d9bb52de SHA512 afa45949c59ef3d5cfdbf64ff6710e20a16c2fbd492e623cd6f97972b3e7808b5d7269e227226028ec2762c6f34c9beaf33149fd78e31f4f4fc901fbcb9d91c1
diff --git a/dev-python/filelock/filelock-3.29.6.ebuild b/dev-python/filelock/filelock-3.29.6.ebuild
new file mode 100644
index 000000000000..1f38026c0588
--- /dev/null
+++ b/dev-python/filelock/filelock-3.29.6.ebuild
@@ -0,0 +1,31 @@
+# Copyright 2018-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYPI_VERIFY_REPO=https://github.com/tox-dev/filelock
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A platform independent file lock for Python"
+HOMEPAGE="
+ https://github.com/tox-dev/filelock/
+ https://pypi.org/project/filelock/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{asyncio,mock,timeout} )
+EPYTEST_RERUNS=5
+distutils_enable_tests pytest
diff --git a/dev-python/genson/Manifest b/dev-python/genson/Manifest
index 5ba0a074e738..f1b4a0690a8c 100644
--- a/dev-python/genson/Manifest
+++ b/dev-python/genson/Manifest
@@ -1 +1,2 @@
DIST genson-1.3.0.tar.gz 34919 BLAKE2B 1aef0dd4ef0e6be9b9ac8adeaa58bf092dc8668842c5b8b48a3bdf0675cc1337ea6b265ade80f8f153368f81ae52573294f1c00add471b50fbb51b830fd17258 SHA512 1d5a5c98927e1fd36bedec8ba2479c5562a34af75239a93076d6012e82d9f33332533faef2d99e2481d30434abe710ccbfdea3640bd6d340cffe4c754e917794
+DIST genson-1.4.0.tar.gz 47908 BLAKE2B 4894be124c947e02bde9b9eb2649152d3442352655b020e7a7029c3fe1a4981bec5b66840df3a3bc9d23836ccadaa31536242f32ae29dd3c298ee8ac22acd0e1 SHA512 1f608abbbb6dfb21bef233775b87298dcfe938afb20007701290a3495cd9eab301c52f01d181d5a62cca1ea4045c528e1e2dfd8baf4cc0fae7a9dcd5c18f4e16
diff --git a/dev-python/genson/genson-1.4.0.ebuild b/dev-python/genson/genson-1.4.0.ebuild
new file mode 100644
index 000000000000..89c277fb548d
--- /dev/null
+++ b/dev-python/genson/genson-1.4.0.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="GenSON is a powerful, user-friendly JSON Schema generator built in Python"
+HOMEPAGE="
+ https://github.com/wolverdude/GenSON/
+ https://pypi.org/project/genson/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ test? (
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests unittest
diff --git a/dev-python/grpcio-status/Manifest b/dev-python/grpcio-status/Manifest
index 43fc3f666f76..c760c481a09e 100644
--- a/dev-python/grpcio-status/Manifest
+++ b/dev-python/grpcio-status/Manifest
@@ -1,3 +1,4 @@
DIST grpc-1.80.0.gh.tar.gz 15772645 BLAKE2B 48f3acc5c3268f651dc865ce3095c306ad3fa0a4eacf6e6eea499d961c0e001e2ab43fe8f0d53713d19998f28ce0184045ad2a8ef4cdc41aee31e2fe70e2b53e SHA512 5ef6ec2277dcb2257f8ac7546057e9a3da6668676a3a4ff64e08e66abb465b5705103c4aa0b41955535ee437d4feef5b811aa3e31636c4cb76bf68c52caaccf7
DIST grpc-1.81.0.gh.tar.gz 15840050 BLAKE2B 01defbe7386b8f7752b4abe9b3081fc09801a0d4cbccc083ac45dea63b3d32a6c4c7b87b57de9a33f7d82d3bc7ee173e0e291742a8b09aaf3a70bfef033c2473 SHA512 38966090a498392b727ea7d8149b59fbcb2fe630a8cada1a78d57e54359d125ca9b5e6d528efcdff05392f01c8418f25798fe823c900d480a3b768943c17a621
DIST grpc-1.81.1.gh.tar.gz 15840192 BLAKE2B 900ca16869e1295428054c2bb4c4363ec855878faef2705cdd81249d46596958c25983dbbd87358d942caae6d5910a781d45da71f8e2a4b714affba02aba0dd5 SHA512 2fcc219bf91de49607ed1f74243c2d43c0fb0def4944e48fbd4b382033d648f0e0b8551426993d04db49b9cae8d8b9efe20a817f6985ed3c72f086bf8ea2e26e
+DIST grpc-1.82.0.gh.tar.gz 16053357 BLAKE2B 334e965c30b9d055c6a16020624cdc68e1d503c23c5c6ddec784478c19e8b6e4c5eaa6c77df3008fd93c79d37f90bdba3b4db5b2f1f17b90f9276a2e62a07165 SHA512 8fe04eab34a2dbf1be198366f9d82d99b2fdb46bec78385e97041d0fa03dc635374b8600eb522b0b022ebe9f32263a9d4d202849581b896555395561c2735fdc
diff --git a/dev-python/grpcio-status/grpcio-status-1.82.0.ebuild b/dev-python/grpcio-status/grpcio-status-1.82.0.ebuild
new file mode 100644
index 000000000000..daa9f2d13263
--- /dev/null
+++ b/dev-python/grpcio-status/grpcio-status-1.82.0.ebuild
@@ -0,0 +1,46 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1
+
+MY_P=grpc-${PV}
+DESCRIPTION="Reference package for GRPC Python status proto mapping"
+HOMEPAGE="
+ https://grpc.io/
+ https://github.com/grpc/grpc/
+ https://pypi.org/project/grpcio-status/
+"
+SRC_URI="
+ https://github.com/grpc/grpc/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}/src/python/grpcio_status
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+RDEPEND="
+ >=dev-python/grpcio-${PV}[${PYTHON_USEDEP}]
+ >=dev-python/googleapis-common-protos-1.5.5[${PYTHON_USEDEP}]
+ <dev-python/protobuf-8[${PYTHON_USEDEP}]
+ >=dev-python/protobuf-6.33.5[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/coverage[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ cd "${WORKDIR}/${MY_P}/src/python/grpcio_tests" || die
+ epytest tests{,_aio}/status
+}
diff --git a/dev-python/grpcio/Manifest b/dev-python/grpcio/Manifest
index e0cd81323c01..b56d70d47b44 100644
--- a/dev-python/grpcio/Manifest
+++ b/dev-python/grpcio/Manifest
@@ -1,9 +1,12 @@
DIST grpc-1.80.0.gh.tar.gz 15772645 BLAKE2B 48f3acc5c3268f651dc865ce3095c306ad3fa0a4eacf6e6eea499d961c0e001e2ab43fe8f0d53713d19998f28ce0184045ad2a8ef4cdc41aee31e2fe70e2b53e SHA512 5ef6ec2277dcb2257f8ac7546057e9a3da6668676a3a4ff64e08e66abb465b5705103c4aa0b41955535ee437d4feef5b811aa3e31636c4cb76bf68c52caaccf7
DIST grpc-1.81.0.gh.tar.gz 15840050 BLAKE2B 01defbe7386b8f7752b4abe9b3081fc09801a0d4cbccc083ac45dea63b3d32a6c4c7b87b57de9a33f7d82d3bc7ee173e0e291742a8b09aaf3a70bfef033c2473 SHA512 38966090a498392b727ea7d8149b59fbcb2fe630a8cada1a78d57e54359d125ca9b5e6d528efcdff05392f01c8418f25798fe823c900d480a3b768943c17a621
DIST grpc-1.81.1.gh.tar.gz 15840192 BLAKE2B 900ca16869e1295428054c2bb4c4363ec855878faef2705cdd81249d46596958c25983dbbd87358d942caae6d5910a781d45da71f8e2a4b714affba02aba0dd5 SHA512 2fcc219bf91de49607ed1f74243c2d43c0fb0def4944e48fbd4b382033d648f0e0b8551426993d04db49b9cae8d8b9efe20a817f6985ed3c72f086bf8ea2e26e
+DIST grpc-1.82.0.gh.tar.gz 16053357 BLAKE2B 334e965c30b9d055c6a16020624cdc68e1d503c23c5c6ddec784478c19e8b6e4c5eaa6c77df3008fd93c79d37f90bdba3b4db5b2f1f17b90f9276a2e62a07165 SHA512 8fe04eab34a2dbf1be198366f9d82d99b2fdb46bec78385e97041d0fa03dc635374b8600eb522b0b022ebe9f32263a9d4d202849581b896555395561c2735fdc
DIST grpcio-1.80.0.tar.gz 12978905 BLAKE2B 2583bbdfcb05aaced115b4a4ab7d26b95efbe35bf7c2bd7989d9791d50553e05ba3e6323ce8b52c78459b34b5daeb1566ffd1e2b17c14208a13e4a06f0a2a6d5 SHA512 04ef676d6847f3d2820998c07d9f80585c105dc43e3f754b517566e86a92af94328ecdecba0b772e0abe2a53eb49102a12db93099b50d5bee576ac69cb928db5
DIST grpcio-1.81.0.tar.gz 13032272 BLAKE2B 55ecfd288602cbdc44b11b9ac4afb90b79d8feae773bfd5bb7df1057e4af9b5657d6151b71f8e73e028c92e07f7e105859b8814e781ca3afdf05e4b7eca699b3 SHA512 f57e7c370455028b91574804c511181919c6de23e4213ef35d798c310734f41ab30eabbef00b183cbc2085e22b05b9616109eff8c49443c03932a5b6f8339502
DIST grpcio-1.81.1.tar.gz 13026582 BLAKE2B 8aa2754b7232a211c23852da22e7aa1c73ed630a2ccfceaf99ad80b23ed5845aeacdb87ec34d748357c6573b436bee38bed148c65d54cc438f3badeeb977435d SHA512 7b34b02a5ea487ef98fb6c1017ddc0127f292f54968d71c08ff5cbf9efa016c49a562f67165564d1a6ff219f24be1b2a6a525f12c251699893c8772d226baa41
+DIST grpcio-1.82.0.tar.gz 13184479 BLAKE2B 057a039b768a6a686ab67e8d4d6c49de54b2bd329ddd7c785cdf1718ebeb815eb63e4ae622927fd55224077fadf1bcbbf4ab69d9a189f5f1c85721c56b53e4ec SHA512 a9dd795501e0f49db3db79fc00341d0c0b974b0150dad376ec6e162c2c8f022fa8fb94a11bdbbd4a0e6123b15480afe09d403312952f8f2b47026946c5e1b8b6
DIST grpcio_tools-1.80.0.tar.gz 6133212 BLAKE2B 9bf051314482ff946aa6edd4f8b517dec63c1188914d76a2b4d130b68408ee5ec3ec3b5a2075b7ec2257e92ee9dbad37c18c425a2b947b81640f67cadd284df6 SHA512 7d9e17cee024af6731a8b75da6de0c26b554f2c50d75acfefc7708545935af4ab8f60fe0e16550c4c2943eb6c3414c49c38dc1a71df948c87c6c743ee72fff68
DIST grpcio_tools-1.81.0.tar.gz 6235718 BLAKE2B 08cd6c49329349fbfa9e26efe4b3894095801319e41bafda9907f98ae823bf5f4de17db6f02780c31aef9a781d2b0463c88825dae073e5d0617b346c1c39dbca SHA512 0925b13fa8b00483d124ef6c2b6e3ebe6e4116a11fe5c306d158edd9a2f5d4743257bcd2ae04c1f29dd1e562e44f1e76c0d1168a07e4fd2f87ae31066ab2555b
DIST grpcio_tools-1.81.1.tar.gz 6236155 BLAKE2B e95db929827c7f465473e0640d2fd53df1d9e6f6ee80f1f3b49709e496f678d248c78c37e90b6f96cd2348fb903bd6e8047b3490353f1c436fe0e0781a26069c SHA512 ca68845b4beef98cd83d4dbdb9d12449ee9289dcf81ca4723617a35a1c576bc937fbbcac12ab0e304d2b7f49993a8a8fbcb00b7021ea141a71196c2a93fb8cdf
+DIST grpcio_tools-1.82.0.tar.gz 6399122 BLAKE2B a5a8cf5a3e78bbe25718f4b679462f3851124ac7c69e8b635999fec19e904e2f03b7d1ae9c9b177087c1f25eab24abdad26c285d53470a7c9cca4b220b514ccb SHA512 6a3acadbb12b27b4bc9a22cdf2bd1accf36fd96eda862e8c4d2b7915be409d77d770dcd36a7bf0a7ea279f2b56a917923d45988425f361cbef2a90cc95246426
diff --git a/dev-python/grpcio/grpcio-1.82.0.ebuild b/dev-python/grpcio/grpcio-1.82.0.ebuild
new file mode 100644
index 000000000000..6e9fb2ecc763
--- /dev/null
+++ b/dev-python/grpcio/grpcio-1.82.0.ebuild
@@ -0,0 +1,137 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 flag-o-matic multiprocessing pypi
+
+MY_P=grpc-${PV}
+DESCRIPTION="HTTP/2-based RPC framework"
+HOMEPAGE="
+ https://grpc.io/
+ https://github.com/grpc/grpc/
+ https://pypi.org/project/grpcio/
+"
+# Tests need other packages from the source tree, so use a GitHub
+# archive. sdist provides bundled library sources (git submodules).
+SRC_URI+="
+ test? (
+ https://github.com/grpc/grpc/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+ $(pypi_sdist_url grpcio_tools)
+ )
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+DEPEND="
+ dev-libs/openssl:=
+ net-dns/c-ares:=
+ virtual/zlib:=
+"
+RDEPEND="
+ ${DEPEND}
+ >=dev-python/typing-extensions-4.12.2[${PYTHON_USEDEP}]
+"
+# TODO: try to remove coverage dep
+BDEPEND="
+ >=dev-python/cython-3.1.1[${PYTHON_USEDEP}]
+ test? (
+ dev-python/coverage[${PYTHON_USEDEP}]
+ >=dev-python/protobuf-6.33.5[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+# signal handling tests hang often
+EPYTEST_RERUNS=5
+: ${EPYTEST_TIMEOUT=15}
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ sed -i -e '/INSTALL_REQUIRES/s:~=:>=:' setup.py || die
+}
+
+src_configure() {
+ # -Werror=odr -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/856775
+ # https://github.com/grpc/grpc/issues/36158
+ filter-lto
+
+ export GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS="$(makeopts_jobs)"
+ # system abseil-cpp crashes with USE=-debug, sigh
+ # https://bugs.gentoo.org/942021
+ #export GRPC_PYTHON_BUILD_SYSTEM_ABSL=1
+ export GRPC_PYTHON_BUILD_SYSTEM_CARES=1
+ export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
+ # re2 needs to be built against the same abseil-cpp version
+ #export GRPC_PYTHON_BUILD_SYSTEM_RE2=1
+ export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
+ export GRPC_PYTHON_BUILD_WITH_CYTHON=1
+
+ # copied from setup.py, except for removed -std= that does not apply
+ # to C code and causes warnings
+ export GRPC_PYTHON_CFLAGS="-fvisibility=hidden -fno-wrapv -fno-exceptions"
+ # required by abseil-cpp
+ append-cxxflags -std=c++17
+ # silence a lot of harmless noise from bad quality code
+ append-cxxflags -Wno-attributes
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # Internet
+ tests/unit/_dns_resolver_test.py::DNSResolverTest::test_connect_loopback
+ # not a test
+ tests/unit/_compression_test.py::test_compression
+ tests_aio/unit/channel_argument_test.py::test_if_reuse_port_enabled
+ # expects grpcio-admin
+ tests/unit/test_all_modules_installed.py::TestAllModulesInstalled::test_import_all_modules
+ # TODO
+ tests_py3_only/unit/_simple_stubs_test.py::SimpleStubsTest::test_default_ssl
+ tests/unit/_cython/_channel_test.py::ChannelTest::test_multiple_channels_lonely_connectivity
+ tests/unit/_cython/_channel_test.py::ChannelTest::test_single_channel_lonely_connectivity
+ )
+ local EPYTEST_IGNORE=(
+ # not a test
+ tests/unit/test_common.py
+ # requires oauth2client
+ tests/unit/beta/_implementations_test.py
+ )
+
+ cp -a "${BUILD_DIR}"/{install,test} || die
+ local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH}
+
+ # grpcio proper builds against system libs
+ # grpcio_tools supports bundled libs only, and requires different
+ # flags
+ unset GRPC_PYTHON_CFLAGS
+ cd "${WORKDIR}/grpcio_tools-${PV}" || die
+ distutils_pep517_install "${BUILD_DIR}"/test
+
+ cd "${WORKDIR}/${MY_P}" || die
+ local protodir=src/proto/grpc/testing
+ local testdir=src/python/grpcio_tests
+ "${EPYTHON}" -m grpc_tools.protoc -I. --python_out="${testdir}" \
+ "${protodir}"/{empty,messages}.proto || die
+ "${EPYTHON}" -m grpc_tools.protoc -I. --grpc_python_out="${testdir}" \
+ "${protodir}"/test.proto || die
+
+ cd "${testdir}" || die
+ "${EPYTHON}" -m grpc_tools.protoc -I. --python_out=. \
+ tests/testing/proto/{requests,services}.proto || die
+ "${EPYTHON}" -m grpc_tools.protoc -I. --grpc_python_out=. \
+ tests/testing/proto/services.proto || die
+
+ # TODO: aio tests are failing randomly, so we're skipping them entirely
+ epytest tests{_py3_only,}/unit
+}
diff --git a/dev-python/hashin/hashin-1.0.5.ebuild b/dev-python/hashin/hashin-1.0.5.ebuild
index 5ad8054f46e0..88839dffd789 100644
--- a/dev-python/hashin/hashin-1.0.5.ebuild
+++ b/dev-python/hashin/hashin-1.0.5.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/ijson/Manifest b/dev-python/ijson/Manifest
index 775c6b53ea4b..e4bd81e3fd27 100644
--- a/dev-python/ijson/Manifest
+++ b/dev-python/ijson/Manifest
@@ -1 +1,2 @@
DIST ijson-3.5.0.tar.gz 68658 BLAKE2B 5ab77cdc9f45b1e87a0ee5d56d19505b927da71fae0c7017fb44f2a5be47a4ccb1f8ba74590bd4adec89eef3ec4cb8e02ae137891f23088ab0df36fff9dc5454 SHA512 2a50ce4837ced0dc026c477c1efccb021795839b26b1d2bebfafafba8109d424a1aac3b374f6c122f116b3f419cab77c22c5a5fa5ffeacf4281ae9677cd46a41
+DIST ijson-3.5.1.tar.gz 69913 BLAKE2B 94d0f7d791b7b4f13da43bfffa39052a2c9297efeaea1721d91b2fb94c188a52df6cccf9dbec1dd1a471a4b9a3f74c959e1b3189242b5120c3df9524e8f1cb36 SHA512 5eaa1699a29ebc3659be7ddc36779b0994d59fa0c02b4581ac213b2d85cae36b0c868ae9137e5004ccd6f5018696dbbb7c34d6a6910dc49b9423975ca2af7921
diff --git a/dev-python/ijson/ijson-3.5.1.ebuild b/dev-python/ijson/ijson-3.5.1.ebuild
new file mode 100644
index 000000000000..972cbe0a60be
--- /dev/null
+++ b/dev-python/ijson/ijson-3.5.1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Iterative JSON parser with a Pythonic interface"
+HOMEPAGE="
+ https://github.com/ICRAR/ijson/
+ https://pypi.org/project/ijson/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+
+DEPEND="
+ dev-libs/yajl:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+export IJSON_BUILD_YAJL2C=1
+
+python_test() {
+ rm -rf ijson || die
+ epytest
+}
diff --git a/dev-python/mando/mando-0.8.2.ebuild b/dev-python/mando/mando-0.8.2.ebuild
index 4a1a93fee6a1..761391386236 100644
--- a/dev-python/mando/mando-0.8.2.ebuild
+++ b/dev-python/mando/mando-0.8.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -25,6 +25,7 @@ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~s390 ~sparc x86"
IUSE="examples"
distutils_enable_sphinx docs
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
python_install_all() {
diff --git a/dev-python/musicbrainzngs/musicbrainzngs-0.7.1-r1.ebuild b/dev-python/musicbrainzngs/musicbrainzngs-0.7.1-r1.ebuild
index 0e11b047b81c..93082e957a21 100644
--- a/dev-python/musicbrainzngs/musicbrainzngs-0.7.1-r1.ebuild
+++ b/dev-python/musicbrainzngs/musicbrainzngs-0.7.1-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2019-2025 Gentoo Authors
+# Copyright 2019-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/mypy-extensions/mypy-extensions-1.1.0.ebuild b/dev-python/mypy-extensions/mypy-extensions-1.1.0.ebuild
index c48203d8da87..b18805319348 100644
--- a/dev-python/mypy-extensions/mypy-extensions-1.1.0.ebuild
+++ b/dev-python/mypy-extensions/mypy-extensions-1.1.0.ebuild
@@ -30,7 +30,7 @@ distutils_enable_tests pytest
python_test() {
local EPYTEST_DESELECT=()
case ${EPYTHON} in
- python3.14)
+ python3.1[45]*)
EPYTEST_DESELECT+=(
tests/testextensions.py::TypedDictTests::test_py36_class_syntax_usage
)
diff --git a/dev-python/nuitka/nuitka-4.1.2.ebuild b/dev-python/nuitka/nuitka-4.1.2.ebuild
index 541234567ed4..ecd8abb6c459 100644
--- a/dev-python/nuitka/nuitka-4.1.2.ebuild
+++ b/dev-python/nuitka/nuitka-4.1.2.ebuild
@@ -18,7 +18,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~loong ~x86"
+KEYWORDS="~amd64 ~x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-python/nuitka/nuitka-4.1.3.ebuild b/dev-python/nuitka/nuitka-4.1.3.ebuild
index 541234567ed4..ecd8abb6c459 100644
--- a/dev-python/nuitka/nuitka-4.1.3.ebuild
+++ b/dev-python/nuitka/nuitka-4.1.3.ebuild
@@ -18,7 +18,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~loong ~x86"
+KEYWORDS="~amd64 ~x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-python/parso/Manifest b/dev-python/parso/Manifest
index e27933fde571..1ed30d4e82fa 100644
--- a/dev-python/parso/Manifest
+++ b/dev-python/parso/Manifest
@@ -1,2 +1 @@
-DIST parso-0.8.6.gh.tar.gz 399847 BLAKE2B fc60c16cbb282e4db91a3bfc03b1397c28c90d8bae095310b6b7bd76102c21645d1fd6fb5e69a59a39a37e556b11140197b499a9ae9bb50fc79111910235e967 SHA512 f1468c17f1e64f4c6b7e1c6703f254c5cb93edb0905d31e5687b992726399bf1e62a101af6a80f10393573f930c91d00a07fca05e78104edee56e6b6fca6baee
DIST parso-0.8.7.gh.tar.gz 400286 BLAKE2B bfc85cbe48c68dd3fc5a8a3298746d1fb938423d74cb8d13922bc99a29bc42bacd35ebf6e7955501cb8611d84b750c5cdff9045990233b05527e094fb662a3ae SHA512 8031415aed2f7e52a10e0de84d9e88eae3849bae3725206f3797d5b3e094191f71fc9a47a99211d5d9af46d5c8be6d4cf93b5c8c5b2483ed5775ed8593992713
diff --git a/dev-python/parso/parso-0.8.6.ebuild b/dev-python/parso/parso-0.8.6.ebuild
deleted file mode 100644
index dd350105e607..000000000000
--- a/dev-python/parso/parso-0.8.6.ebuild
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1
-
-DESCRIPTION="A python parser that supports error recovery and round-trip parsing"
-HOMEPAGE="
- https://github.com/davidhalter/parso/
- https://pypi.org/project/parso/
-"
-SRC_URI="
- https://github.com/davidhalter/${PN}/archive/v${PV}.tar.gz
- -> ${P}.gh.tar.gz
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos"
-
-distutils_enable_sphinx docs
-
-EPYTEST_PLUGINS=()
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-EPYTEST_DESELECT=(
- # py3.10 changed exception messages
- test/test_python_errors.py::test_python_exception_matches
- # With python3.11 this additional file is run by pytest,
- # but it is not actually a test and thus fails
- parso/python/token.py::parso.python.token.PythonTokenTypes
-)
diff --git a/dev-python/pip/files/pip-26.1.2-py315.patch b/dev-python/pip/files/pip-26.1.2-py315.patch
new file mode 100644
index 000000000000..c36368cc0a73
--- /dev/null
+++ b/dev-python/pip/files/pip-26.1.2-py315.patch
@@ -0,0 +1,49 @@
+diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py
+index 1a42a9d41..7639dabca 100644
+--- a/src/pip/_internal/build_env.py
++++ b/src/pip/_internal/build_env.py
+@@ -468,15 +468,19 @@ class BuildEnvironment:
+ """
+ import os, site, sys
+
+- # First, drop system-sites related paths.
++ # First, discover all system-sites related paths.
+ original_sys_path = sys.path[:]
++ # Clear sys.path so addsitedir() will add system site paths and paths
++ # added by contained .pth files to sys.path reliably. This is necessary
++ # since Python 3.15, which notably no longer re-executes .pth files for
++ # known paths.
++ sys.path = []
+ known_paths = set()
+ for path in {system_sites!r}:
+ site.addsitedir(path, known_paths=known_paths)
+- system_paths = set(
+- os.path.normcase(path)
+- for path in sys.path[len(original_sys_path):]
+- )
++ system_paths = set(os.path.normcase(path) for path in sys.path)
++
++ # Drop discovered system-sites related paths.
+ original_sys_path = [
+ path for path in original_sys_path
+ if os.path.normcase(path) not in system_paths
+diff --git a/tests/lib/venv.py b/tests/lib/venv.py
+index 67b01d9f3..4e86b92b3 100644
+--- a/tests/lib/venv.py
++++ b/tests/lib/venv.py
+@@ -174,11 +174,13 @@ class VirtualEnvironment:
+ site.ENABLE_USER_SITE = {self._user_site_packages}
+ # First, drop system-sites related paths.
+ original_sys_path = sys.path[:]
++ # To discover system-sites related paths, clear sys.path
++ # and build a new one with only system paths.
++ sys.path = []
+ known_paths = set()
+ for path in site.getsitepackages():
+ site.addsitedir(path, known_paths=known_paths)
+- system_paths = sys.path[len(original_sys_path):]
+- for path in system_paths:
++ for path in sys.path:
+ if path in original_sys_path:
+ original_sys_path.remove(path)
+ sys.path = original_sys_path
diff --git a/dev-python/pip/files/pip-26.1.2-unbundle-r1.patch b/dev-python/pip/files/pip-26.1.2-unbundle-r1.patch
new file mode 100644
index 000000000000..a24aca59f09b
--- /dev/null
+++ b/dev-python/pip/files/pip-26.1.2-unbundle-r1.patch
@@ -0,0 +1,240 @@
+diff --git a/src/pip/_internal/cli/main_parser.py b/src/pip/_internal/cli/main_parser.py
+index 136852466..ffec75192 100644
+--- a/src/pip/_internal/cli/main_parser.py
++++ b/src/pip/_internal/cli/main_parser.py
+@@ -82,6 +82,11 @@ def parse_command(args: list[str]) -> tuple[str, list[str]]:
+
+ # --python
+ if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
++ raise CommandError(
++ "--python option is not supported on Gentoo, as it requires bundled "
++ "dependencies that have been removed to improve security"
++ )
++
+ # Re-invoke pip using the specified Python interpreter
+ interpreter = identify_python_interpreter(general_options.python)
+ if interpreter is None:
+diff --git a/src/pip/_internal/commands/debug.py b/src/pip/_internal/commands/debug.py
+index 25bc05d0e..a73d6c358 100644
+--- a/src/pip/_internal/commands/debug.py
++++ b/src/pip/_internal/commands/debug.py
+@@ -8,7 +8,6 @@ from optparse import Values
+ from types import ModuleType
+ from typing import Any
+
+-import pip._vendor
+ from pip._vendor.certifi import where
+ from pip._vendor.packaging.version import parse as parse_version
+
+@@ -187,9 +186,7 @@ class DebugCommand(Command):
+ show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE"))
+ show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE"))
+ show_value("pip._vendor.certifi.where()", where())
+- show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED)
+-
+- show_vendor_versions()
++ show_value("pip._vendor.DEBUNDLED", True)
+
+ show_tags(options)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index f8da34376..a98dffdda 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -473,9 +473,6 @@ def virtualenv_template(
+ tmpdir_factory: pytest.TempPathFactory,
+ pip_src: Path,
+ pip_editable_parts: tuple[Path, ...],
+- setuptools_install: Path,
+- coverage_install: Path,
+- socket_install: Path,
+ ) -> VirtualEnvironment:
+ venv_type: VirtualEnvironmentType
+ if request.config.getoption("--use-venv"):
+@@ -487,13 +484,6 @@ def virtualenv_template(
+ tmpdir = tmpdir_factory.mktemp("virtualenv")
+ venv = VirtualEnvironment(tmpdir.joinpath("venv_orig"), venv_type=venv_type)
+
+- # Install setuptools, pytest-subket, and pip.
+- install_pth_link(venv, "setuptools", setuptools_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
+
+ shutil.copy(pth, venv.site)
+@@ -505,14 +495,6 @@ def virtualenv_template(
+ # detects changed files.
+ venv.site.joinpath("easy-install.pth").touch()
+
+- if request.config.getoption("--cov"):
+- # 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/tests/functional/test_check.py b/tests/functional/test_check.py
+index acf99bc13..5425002e7 100644
+--- a/tests/functional/test_check.py
++++ b/tests/functional/test_check.py
+@@ -10,10 +10,8 @@ from tests.lib import (
+ def matches_expected_lines(string: str, expected_lines: Collection[str]) -> bool:
+ # Ignore empty lines
+ output_lines = list(filter(None, string.splitlines()))
+- # We'll match the last n lines, given n lines to match.
+- last_few_output_lines = output_lines[-len(expected_lines) :]
+ # And order does not matter
+- return set(last_few_output_lines) == set(expected_lines)
++ return set(expected_lines).issubset(set(output_lines))
+
+
+ def test_basic_check_clean(script: PipTestEnvironment) -> None:
+diff --git a/tests/functional/test_freeze.py b/tests/functional/test_freeze.py
+index 4e9ae927f..597c33dc2 100644
+--- a/tests/functional/test_freeze.py
++++ b/tests/functional/test_freeze.py
+@@ -80,8 +80,8 @@ def test_basic_freeze(script: PipTestEnvironment) -> None:
+ result = script.pip("freeze", expect_stderr=True)
+ expected = textwrap.dedent(
+ """\
+- ...simple==2.0
+- simple2==3.0...
++ ...simple==2.0...
++ ...simple2==3.0...
+ <BLANKLINE>"""
+ )
+ _check_output(result.stdout, expected)
+@@ -998,7 +998,7 @@ def test_freeze_skip_work_dir_pkg(script: PipTestEnvironment) -> None:
+
+ # Freeze should not include package simple when run from package directory
+ result = script.pip("freeze", cwd=pkg_path)
+- assert "simple" not in result.stdout
++ assert "\nsimple==" not in result.stdout
+
+
+ def test_freeze_include_work_dir_pkg(script: PipTestEnvironment) -> None:
+diff --git a/tests/functional/test_install_check.py b/tests/functional/test_install_check.py
+index cb8312b53..174bb8f66 100644
+--- a/tests/functional/test_install_check.py
++++ b/tests/functional/test_install_check.py
+@@ -61,6 +61,7 @@ def test_check_install_canonicalization(script: PipTestEnvironment) -> None:
+ )
+ assert "requires" not in result.stderr
+ assert result.returncode == 0
++ return
+
+ # Double check that all errors are resolved in the end
+ result = script.pip("check")
+diff --git a/tests/functional/test_list.py b/tests/functional/test_list.py
+index b70be2dbb..89bbfce18 100644
+--- a/tests/functional/test_list.py
++++ b/tests/functional/test_list.py
+@@ -1,5 +1,6 @@
+ import json
+ import os
++import re
+ from pathlib import Path
+
+ import pytest
+@@ -41,8 +42,8 @@ def test_basic_list(simple_script: PipTestEnvironment) -> None:
+
+ """
+ result = simple_script.pip("list")
+- assert "simple 1.0" in result.stdout, str(result)
+- assert "simple2 3.0" in result.stdout, str(result)
++ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
++ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
+
+
+ def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
+@@ -54,8 +55,8 @@ def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
+ assert "Version" in result.stdout, str(result)
+ assert "Location" in result.stdout, str(result)
+ assert "Installer" in result.stdout, str(result)
+- assert "simple 1.0" in result.stdout, str(result)
+- assert "simple2 3.0" in result.stdout, str(result)
++ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
++ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
+
+
+ def test_columns_flag(simple_script: PipTestEnvironment) -> None:
+@@ -66,8 +67,8 @@ def test_columns_flag(simple_script: PipTestEnvironment) -> None:
+ assert "Package" in result.stdout, str(result)
+ assert "Version" in result.stdout, str(result)
+ assert "simple (1.0)" not in result.stdout, str(result)
+- assert "simple 1.0" in result.stdout, str(result)
+- assert "simple2 3.0" in result.stdout, str(result)
++ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
++ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
+
+
+ def test_format_priority(simple_script: PipTestEnvironment) -> None:
+@@ -79,16 +80,16 @@ def test_format_priority(simple_script: PipTestEnvironment) -> None:
+ )
+ assert "simple==1.0" in result.stdout, str(result)
+ assert "simple2==3.0" in result.stdout, str(result)
+- assert "simple 1.0" not in result.stdout, str(result)
+- assert "simple2 3.0" not in result.stdout, str(result)
++ assert not re.search(r"simple\s+1\.0", result.stdout), str(result)
++ assert not re.search(r"simple2\s+3\.0", result.stdout), str(result)
+
+ result = simple_script.pip("list", "--format=freeze", "--format=columns")
+ assert "Package" in result.stdout, str(result)
+ assert "Version" in result.stdout, str(result)
+ assert "simple==1.0" not in result.stdout, str(result)
+ assert "simple2==3.0" not in result.stdout, str(result)
+- assert "simple 1.0" in result.stdout, str(result)
+- assert "simple2 3.0" in result.stdout, str(result)
++ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
++ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
+
+
+ def test_local_flag(simple_script: PipTestEnvironment) -> None:
+@@ -124,8 +125,8 @@ def test_multiple_exclude_and_normalization(
+ assert "Normalizable_Name" in result.stdout
+ assert "pip" in result.stdout
+ result = script.pip("list", "--exclude", "normalizablE-namE", "--exclude", "pIp")
+- assert "Normalizable_Name" not in result.stdout
+- assert "pip" not in result.stdout
++ assert "Normalizable_Name " not in result.stdout
++ assert "pip " not in result.stdout
+
+
+ @pytest.mark.usefixtures("enable_user_site")
+diff --git a/tests/lib/venv.py b/tests/lib/venv.py
+index 67b01d9f3..3caa016a0 100644
+--- a/tests/lib/venv.py
++++ b/tests/lib/venv.py
+@@ -11,6 +11,7 @@ import venv as _venv
+ from pathlib import Path
+ from typing import Literal
+
++import pytest
+ import virtualenv as _virtualenv
+
+ VirtualEnvironmentType = Literal["virtualenv", "venv"]
+@@ -37,7 +38,7 @@ class VirtualEnvironment:
+ self._venv_type = venv_type
+ else:
+ self._venv_type = "virtualenv"
+- self._user_site_packages = False
++ self._user_site_packages = True
+ self._template = template
+ self._sitecustomize: str | None = None
+ self._update_paths()
+@@ -235,6 +236,8 @@ class VirtualEnvironment:
+
+ @user_site_packages.setter
+ def user_site_packages(self, value: bool) -> None:
++ if not value:
++ pytest.skip("Gentoo: skipping due to lack of system site-packages")
+ self._user_site_packages = value
+ if self._legacy_virtualenv:
+ marker = self.lib / "no-global-site-packages.txt"
diff --git a/dev-python/pip/pip-26.1.2-r1.ebuild b/dev-python/pip/pip-26.1.2-r1.ebuild
new file mode 100644
index 000000000000..1b5d955547c5
--- /dev/null
+++ b/dev-python/pip/pip-26.1.2-r1.ebuild
@@ -0,0 +1,191 @@
+# Copyright 1999-2026 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=flit-core
+PYTHON_TESTED=( python3_{13..14} )
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ssl(+),threads(+)"
+
+inherit distutils-r1 pypi shell-completion
+FLIT_CORE_PV=3.12.0
+
+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
+ test? (
+ $(pypi_wheel_url flit-core "${FLIT_CORE_PV}")
+ )
+"
+
+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-26.2[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-4.3.8[${PYTHON_USEDEP}]
+ >=dev-python/pyproject-hooks-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.33.1[${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/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}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ )
+ dev-vcs/git
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+python_prepare_all() {
+ local PATCHES=(
+ # prepare to unbundle dependencies and remove redundant test wheels
+ "${FILESDIR}/pip-26.1.2-unbundle-r1.patch"
+ # https://github.com/pypa/pip/pull/14033
+ # + https://github.com/pypa/pip/commit/4c6d7471dec62fb004a47a7c2164b6b5b089ac06
+ "${FILESDIR}/pip-26.1.2-py315.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
+ sed -i -e '/_vendor.*\(COPYING\|LICENSE\)/d' pyproject.toml || die
+
+ if use test; then
+ local wheels=(
+ "${BROOT}"/usr/lib/python/ensurepip/setuptools-*.whl
+ "${DISTDIR}/$(pypi_wheel_name flit-core "${FLIT_CORE_PV}")"
+ )
+ 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_install.py::test_install_subprocess_output_handling
+ 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_freeze.py::test_freeze_multiple_exclude_with_all
+ tests/functional/test_install.py::test_install_package_with_same_name_in_curdir
+ tests/functional/test_pep517.py::test_nested_builds
+ tests/functional/test_python_option.py::test_python_interpreter
+ tests/functional/test_uninstall.py::test_basic_uninstall
+ 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
+ )
+
+ 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/pkginfo/pkginfo-1.12.1.2.ebuild b/dev-python/pkginfo/pkginfo-1.12.1.2.ebuild
index 994896dafbb2..e939123bc2b6 100644
--- a/dev-python/pkginfo/pkginfo-1.12.1.2.ebuild
+++ b/dev-python/pkginfo/pkginfo-1.12.1.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/pluginbase/pluginbase-1.0.1-r1.ebuild b/dev-python/pluginbase/pluginbase-1.0.1-r1.ebuild
index d8185a533a1c..544da5687b29 100644
--- a/dev-python/pluginbase/pluginbase-1.0.1-r1.ebuild
+++ b/dev-python/pluginbase/pluginbase-1.0.1-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -19,6 +19,7 @@ SLOT="0"
KEYWORDS="amd64 ~x86"
distutils_enable_sphinx docs
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
src_test() {
diff --git a/dev-python/plyvel/plyvel-1.5.1.ebuild b/dev-python/plyvel/plyvel-1.5.1.ebuild
index 5376b3bd4f35..6d9b11b0a955 100644
--- a/dev-python/plyvel/plyvel-1.5.1.ebuild
+++ b/dev-python/plyvel/plyvel-1.5.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -32,6 +32,7 @@ BDEPEND="
"
distutils_enable_sphinx doc
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
src_configure() {
diff --git a/dev-python/polib/polib-1.2.0.ebuild b/dev-python/polib/polib-1.2.0.ebuild
index a286f9568691..a7aca042991d 100644
--- a/dev-python/polib/polib-1.2.0.ebuild
+++ b/dev-python/polib/polib-1.2.0.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/pyocr/pyocr-0.8.5.ebuild b/dev-python/pyocr/pyocr-0.8.5.ebuild
index df555b39d337..f67c3816d32d 100644
--- a/dev-python/pyocr/pyocr-0.8.5.ebuild
+++ b/dev-python/pyocr/pyocr-0.8.5.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/pypillowfight/pypillowfight-0.3.1.ebuild b/dev-python/pypillowfight/pypillowfight-0.3.1.ebuild
index f919e250a536..a41e11ecf6fb 100644
--- a/dev-python/pypillowfight/pypillowfight-0.3.1.ebuild
+++ b/dev-python/pypillowfight/pypillowfight-0.3.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -28,10 +28,10 @@ RDEPEND="
dev-python/pillow[${PYTHON_USEDEP}]
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
python_prepare_all() {
- sed -e "/'nose>=1.0'/d" -i setup.py || die
cat > src/pillowfight/_version.h <<- EOF || die
#define INTERNAL_PILLOWFIGHT_VERSION "$(ver_cut 1-3)"
EOF
diff --git a/dev-python/pypresence/pypresence-4.6.1.ebuild b/dev-python/pypresence/pypresence-4.6.1.ebuild
index 371c2df373b0..c1f31b129300 100644
--- a/dev-python/pypresence/pypresence-4.6.1.ebuild
+++ b/dev-python/pypresence/pypresence-4.6.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/pyspf/pyspf-2.0.14-r3.ebuild b/dev-python/pyspf/pyspf-2.0.14-r3.ebuild
index 7be5221fc004..17d7399d9ab5 100644
--- a/dev-python/pyspf/pyspf-2.0.14-r3.ebuild
+++ b/dev-python/pyspf/pyspf-2.0.14-r3.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/pytest-bdd/pytest-bdd-8.1.0-r1.ebuild b/dev-python/pytest-bdd/pytest-bdd-8.1.0-r1.ebuild
index 8bc9fb0f5127..bd5b1f6e1add 100644
--- a/dev-python/pytest-bdd/pytest-bdd-8.1.0-r1.ebuild
+++ b/dev-python/pytest-bdd/pytest-bdd-8.1.0-r1.ebuild
@@ -1,10 +1,11 @@
-# Copyright 2021-2025 Gentoo Authors
+# Copyright 2021-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-DISTUTILS_USE_PEP517=poetry
+DISTUTILS_USE_PEP517=poetry-core
PYTHON_COMPAT=( python3_{13..14} )
+
inherit distutils-r1
DESCRIPTION="BDD library for the pytest runner"
diff --git a/dev-python/pytest-order/Manifest b/dev-python/pytest-order/Manifest
index 0b8450f3238e..b344ccdc27c0 100644
--- a/dev-python/pytest-order/Manifest
+++ b/dev-python/pytest-order/Manifest
@@ -1,4 +1,2 @@
-DIST pytest_order-1.4.0.tar.gz 49891 BLAKE2B 8cd9b4586ba5093b96ea96a777717a736e64d6dc0502b6919feaab6c694a4d01d3a5e57dc80879aee767d193e9bbb307abc0dbcb4d5c6022fb3c0ea47518c266 SHA512 11213fd825a5092d273a3a3508816097f5f376ea9457cd445be796bdeb2a672bfaedd8acbd278f3012152faf0cb5ec8de647fe86499745e541409a32bb888ec0
-DIST pytest_order-1.4.0.tar.gz.provenance 9826 BLAKE2B f5a825ad31ed44d024e334fe4f2a6d00c22932c61b7ff622ae16a64bbf8c176601eee95f4ba27149ddf63bffbd3c80f62c59d2da87d034794d4f2c645a93f554 SHA512 6b7ae442c1de7df9e17cb336bdac232fb3688d64df7a98323cfc649fe23595bef8f95ccd6158a718e3fdf34bcdf326e0610ee40486193d1cfeb08fe5eeffe19a
DIST pytest_order-1.5.0.tar.gz 54136 BLAKE2B 8cd121c94eb85187c44cbfd7bce359979cf75c1cc0f363cdb23d9f05c93dcfb029b17f4b6cb81bb1a899c08f06e3bcd34ed3b7ad27f2bf3d528315017f9f931e SHA512 cfee7cd4c9153eee4d25e59991d905680950265d8c64efc40304e32b8eaaf631017f9f27ebf8491bc8b9e07bad027927ae9091abf5394a21e9904ef5d2ed73f7
DIST pytest_order-1.5.0.tar.gz.provenance 10023 BLAKE2B 897aed897e6055c3cb85fe41c751450e6f14aa9bb6625b7609c5966f04a1204335d53adfc51d2f6232a89975feb4ce6e5b209211ba9adf6f4f7fbac13ca13097 SHA512 23ba9315244650d00b041bfd93382c29247887524e018eb6b078034b14acf6bfdc6fae2f29e222f2932773bca4de16168af181ec20d48e8d1bc91e2be026d013
diff --git a/dev-python/pytest-order/pytest-order-1.4.0.ebuild b/dev-python/pytest-order/pytest-order-1.4.0.ebuild
deleted file mode 100644
index 9447e07196dd..000000000000
--- a/dev-python/pytest-order/pytest-order-1.4.0.ebuild
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYPI_VERIFY_REPO=https://github.com/pytest-dev/pytest-order
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="pytest plugin to run your tests in a specific order"
-HOMEPAGE="
- https://github.com/pytest-dev/pytest-order/
- https://pypi.org/project/pytest-order/
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~x86"
-
-RDEPEND="
- >=dev-python/pytest-7.4[${PYTHON_USEDEP}]
-"
-
-EPYTEST_PLUGINS=( "${PN}" pytest-{mock,xdist} )
-EPYTEST_PLUGIN_LOAD_VIA_ENV=1
-distutils_enable_tests pytest
-distutils_enable_sphinx docs/source
-
-EPYTEST_DESELECT=(
- # these require pytest-dependency
- tests/test_dependency.py::test_order_dependencies_no_auto_mark
- tests/test_dependency.py::test_order_dependencies_auto_mark
- tests/test_order_group_scope_dep.py::test_class_group_scope_module_scope
- tests/test_order_group_scope_named_dep.py::test_class_group_scope_module_scope
-)
diff --git a/dev-python/pytest-ordering/pytest-ordering-0.6-r1.ebuild b/dev-python/pytest-ordering/pytest-ordering-0.6-r1.ebuild
index 741502792cdc..2c10081052e9 100644
--- a/dev-python/pytest-ordering/pytest-ordering-0.6-r1.ebuild
+++ b/dev-python/pytest-ordering/pytest-ordering-0.6-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -31,5 +31,7 @@ PATCHES=(
"${FILESDIR}/${P}-marks.patch"
)
+EPYTEST_PLUGINS=( "${PN}" )
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
distutils_enable_tests pytest
distutils_enable_sphinx docs/source
diff --git a/dev-python/pytest-recording/Manifest b/dev-python/pytest-recording/Manifest
index 0cbd1e399774..5dbcdfea62b5 100644
--- a/dev-python/pytest-recording/Manifest
+++ b/dev-python/pytest-recording/Manifest
@@ -1,2 +1 @@
-DIST pytest_recording-0.13.3.tar.gz 26228 BLAKE2B 96ebdda1e6efb551f0d878c90f144359db3eb72c08a25b4d4ce5acaf4c664d06d787521935290731032be0076f9258af554a321ddab99b82d9747eee579a4db5 SHA512 32eda1e7066ed0e85344c36bc22856a0baeb74138c2bf026915a2dbe2e3e65f43b1154c097f1f183244e83f0aee5ee0bdd3ee563eb2014d41fb5ade3c10c9baf
DIST pytest_recording-0.13.4.tar.gz 26576 BLAKE2B edb64ed12dfe6d7d2709b43daf76626b7adc2d96b5980f81f38a358cc465bf7342e2b1ac78e6418b4bd4ee20d17f50b83f83568fb8c6c2225fb7337aeb3bd996 SHA512 b4bf67b60272945c64ad11d6fcfc0184cd4e8a336131e34cf9581e0a214532013c8882ebf88651d89cc91481456a7419549229d234e0e38e8025bba563dafffc
diff --git a/dev-python/pytest-recording/pytest-recording-0.13.3.ebuild b/dev-python/pytest-recording/pytest-recording-0.13.3.ebuild
deleted file mode 100644
index b49e98bff964..000000000000
--- a/dev-python/pytest-recording/pytest-recording-0.13.3.ebuild
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2023-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="A pytest plugin to record network interactions via VCR.py"
-HOMEPAGE="
- https://pypi.org/project/pytest-recording/
- https://github.com/kiwicom/pytest-recording/
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64"
-
-RDEPEND="
- >=dev-python/pytest-3.5.0[${PYTHON_USEDEP}]
- >=dev-python/vcrpy-2.0.1[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- dev-python/pytest-httpbin[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- dev-python/requests[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-python_test () {
- local EPYTEST_DESELECT=(
- # Internet
- # https://github.com/kiwicom/pytest-recording/issues/131
- tests/test_blocking_network.py::test_block_network_with_allowed_hosts
- )
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_recording.plugin
- PYTEST_PLUGINS+=,pytest_httpbin.plugin,pytest_mock
- epytest
-}
diff --git a/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild b/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild
index f880fb788e57..c7e0769bc49c 100644
--- a/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild
+++ b/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild
@@ -24,23 +24,16 @@ RDEPEND="
"
BDEPEND="
test? (
- dev-python/pytest-httpbin[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
dev-python/requests[${PYTHON_USEDEP}]
)
"
+EPYTEST_PLUGINS=( "${PN}" pytest-{httpbin,mock} )
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
distutils_enable_tests pytest
-python_test () {
- local EPYTEST_DESELECT=(
- # Internet
- # https://github.com/kiwicom/pytest-recording/issues/131
- tests/test_blocking_network.py::test_block_network_with_allowed_hosts
- )
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_recording.plugin
- PYTEST_PLUGINS+=,pytest_httpbin.plugin,pytest_mock
- epytest
-}
+EPYTEST_DESELECT=(
+ # Internet
+ # https://github.com/kiwicom/pytest-recording/issues/131
+ tests/test_blocking_network.py::test_block_network_with_allowed_hosts
+)
diff --git a/dev-python/python-mpd2/python-mpd2-3.1.1.ebuild b/dev-python/python-mpd2/python-mpd2-3.1.1.ebuild
index 2f0083c47005..b0186cd27682 100644
--- a/dev-python/python-mpd2/python-mpd2-3.1.1.ebuild
+++ b/dev-python/python-mpd2/python-mpd2-3.1.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/python-xmp-toolkit/python-xmp-toolkit-2.1.0.ebuild b/dev-python/python-xmp-toolkit/python-xmp-toolkit-2.1.0.ebuild
index ff1ae6112213..83717ae4946b 100644
--- a/dev-python/python-xmp-toolkit/python-xmp-toolkit-2.1.0.ebuild
+++ b/dev-python/python-xmp-toolkit/python-xmp-toolkit-2.1.0.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-DISTUTILS_USE_PEP517=flit
+DISTUTILS_USE_PEP517=flit-core
PYTHON_COMPAT=( python3_{13..14} )
inherit distutils-r1
diff --git a/dev-python/pyzbar/pyzbar-0.1.9.ebuild b/dev-python/pyzbar/pyzbar-0.1.9.ebuild
index aa81d661a6cd..e239c3276b67 100644
--- a/dev-python/pyzbar/pyzbar-0.1.9.ebuild
+++ b/dev-python/pyzbar/pyzbar-0.1.9.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/qrcode/qrcode-8.2.ebuild b/dev-python/qrcode/qrcode-8.2.ebuild
index 1dc3dd6963d8..a6907626528d 100644
--- a/dev-python/qrcode/qrcode-8.2.ebuild
+++ b/dev-python/qrcode/qrcode-8.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -26,6 +26,7 @@ RDEPEND="
dev-python/pypng[${PYTHON_USEDEP}]
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
EPYTEST_DESELECT=(
diff --git a/dev-python/recommonmark/recommonmark-0.7.1-r1.ebuild b/dev-python/recommonmark/recommonmark-0.7.1-r1.ebuild
index 6b080e5280a8..0d4766e4a133 100644
--- a/dev-python/recommonmark/recommonmark-0.7.1-r1.ebuild
+++ b/dev-python/recommonmark/recommonmark-0.7.1-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -41,4 +41,5 @@ EPYTEST_DESELECT=(
"tests/test_sphinx.py::CustomExtensionTests::test_integration"
)
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
diff --git a/dev-python/rply/rply-0.7.8-r1.ebuild b/dev-python/rply/rply-0.7.8-r1.ebuild
index e2dc179282a7..2d24e0533fa3 100644
--- a/dev-python/rply/rply-0.7.8-r1.ebuild
+++ b/dev-python/rply/rply-0.7.8-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -31,5 +31,6 @@ BDEPEND="
)
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
distutils_enable_sphinx docs
diff --git a/dev-python/scikit-build-core/Manifest b/dev-python/scikit-build-core/Manifest
index 229cbbd15641..2683011d0eea 100644
--- a/dev-python/scikit-build-core/Manifest
+++ b/dev-python/scikit-build-core/Manifest
@@ -1,2 +1,4 @@
DIST scikit_build_core-0.12.2.tar.gz 303553 BLAKE2B 536a22d66ac50b3ab2f4d5110c506892ed2dec2688a091c4d3cf18530b98f66ff82f16cc1c0c6e7a9b623f710325b28d5759203832ac2bebfc0f4471f41e85b3 SHA512 8dfec47cdd9c0066c99ebb240703e3d5c7bd21eddb403f1d4452728019090562e255ea6bb9719e89d3ead288b5aa7c356fc0b829affa719533ea67d14481497f
DIST scikit_build_core-0.12.2.tar.gz.provenance 9733 BLAKE2B 78d399a1b1ccfaf6bbfead583e22e704ebb7add238f330e6a1ad4aebb7ab18a0f73f5fe5e9aca2060a8db2a9475d5cf8c014b693b6b7da7703ade89479f507e0 SHA512 9d780076dac7df65d75e2d8f8e90b8b017a74d61f770450b0c65043bfa26a4149d0f99f87588796ccff9711ee6723179c174bff3d49c75d223de6cb78ed42811
+DIST scikit_build_core-1.0.0.tar.gz 466325 BLAKE2B 96436dc6b37ef6cbaf979e5ef5b387a6b832910ebf306b47f49cbeae524a776f751982805e73ae903aed953397db1e888c9f51dcc6511fcf1bf3983dd698a85a SHA512 67b71d2a37a3fa987e26d9c7c1c169260c6c5bfd1439fcbe23ab5831454f12ff1570c397ff8e8ba684083654e1769f0c141b165102c9e347d6d5cca620583d7c
+DIST scikit_build_core-1.0.0.tar.gz.provenance 10105 BLAKE2B 6c00ce6d5944529cce68c0513608096d1c2411a66bcb86192215ee244f5a2100e7257ee248c7e85f4d2a329ab3e6f7f45b4c8211b767bfc66b01e89a8ed0b39f SHA512 d44767f3b547e856a45ac66d227db7a1b6b8bcb038028da3b5a52f4bf6059cffb9117c3a9876d7dfc3e97e9e73e351edce7a3ec26fcc7800ad25dde421ef929d
diff --git a/dev-python/scikit-build-core/scikit-build-core-1.0.0.ebuild b/dev-python/scikit-build-core/scikit-build-core-1.0.0.ebuild
new file mode 100644
index 000000000000..96f33014caf2
--- /dev/null
+++ b/dev-python/scikit-build-core/scikit-build-core-1.0.0.ebuild
@@ -0,0 +1,52 @@
+# Copyright 2023-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYPI_VERIFY_REPO=https://github.com/scikit-build/scikit-build-core
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Build backend for CMake based projects"
+HOMEPAGE="
+ https://github.com/scikit-build/scikit-build-core/
+ https://pypi.org/project/scikit-build-core/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+
+# we always want [pyproject] extra
+RDEPEND="
+ app-alternatives/ninja
+ dev-build/cmake
+ >=dev-python/packaging-23.2[${PYTHON_USEDEP}]
+ >=dev-python/pathspec-0.12.0[${PYTHON_USEDEP}]
+ >=dev-python/pyproject-metadata-0.5[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ dev-python/build[${PYTHON_USEDEP}]
+ >=dev-python/cattrs-22.2.0[${PYTHON_USEDEP}]
+ dev-python/fastjsonschema[${PYTHON_USEDEP}]
+ dev-python/pybind11[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-subprocess )
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # needs unpackaged validate_pyproject
+ tests/test_schema.py
+ )
+
+ epytest -m "not isolated and not network"
+}
diff --git a/dev-python/sigstore/Manifest b/dev-python/sigstore/Manifest
index fe15d5cec057..122aebd0d6ed 100644
--- a/dev-python/sigstore/Manifest
+++ b/dev-python/sigstore/Manifest
@@ -1 +1,2 @@
DIST sigstore-python-4.3.0.gh.tar.gz 415515 BLAKE2B 7916adfa7b64ed0acc2ab1689584e3ced8df7587a5579538b9b5d2dc46cccb316e9d348312dfc075a00fc33e3d8b99a38fe8792e95544c5d2bae4845cf99a2d1 SHA512 6211ba78c2d608881ed46870597cf3273af89dc8313499a40a344bce1d6821f23b990cde63d27d6a2c5c1aa1b3d359bbbd368c6e1c11abdb6457d610eb3db580
+DIST sigstore-python-4.4.0.gh.tar.gz 416489 BLAKE2B 918bfb9fd7361eef97db6249c4984edc5c4e832d1103bef5f19a49e379178be7c36204436ce5df4232a6f36cc96a6931433a7d9604adadf071544e549bb42d96 SHA512 c79f484f997e3d1cbfee2891696a4bc5ec3c665a1887dc01269403a1de56fb1a09a2379325a4bbcb0250451dc6d52728d47c43ef6796fd2eeb7775f78511bbe0
diff --git a/dev-python/sigstore/sigstore-4.4.0.ebuild b/dev-python/sigstore/sigstore-4.4.0.ebuild
new file mode 100644
index 000000000000..01ac8e214e6f
--- /dev/null
+++ b/dev-python/sigstore/sigstore-4.4.0.ebuild
@@ -0,0 +1,62 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit-core
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1
+
+MY_P=sigstore-python-${PV}
+DESCRIPTION="A tool for signing Python package distributions"
+HOMEPAGE="
+ https://github.com/sigstore/sigstore-python/
+ https://pypi.org/project/sigstore/
+"
+# no tests in sdist, as of 3.3.0
+SRC_URI="
+ https://github.com/sigstore/sigstore-python/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
+
+RDEPEND="
+ >=dev-python/cryptography-42[${PYTHON_USEDEP}]
+ >=dev-python/id-1.1.0[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-4.2[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-23.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pyasn1-0.6[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-2[${PYTHON_USEDEP}]
+ >=dev-python/pyjwt-2.1[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ ~dev-python/rfc3161-client-1.0.3[${PYTHON_USEDEP}]
+ >=dev-python/rfc8785-0.1.2[${PYTHON_USEDEP}]
+ >=dev-python/rich-13[${PYTHON_USEDEP}]
+ ~dev-python/sigstore-models-0.0.6[${PYTHON_USEDEP}]
+ ~dev-python/sigstore-rekor-types-0.0.18[${PYTHON_USEDEP}]
+ >=dev-python/tuf-6.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/pretend[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # unpin deps
+ sed -r -i -e 's:~=:>=:' -e 's:, ?< ?[0-9.]*::' pyproject.toml || die
+}
+
+python_test() {
+ epytest test/unit --skip-online
+}
diff --git a/dev-python/snakeoil/snakeoil-0.11.1.ebuild b/dev-python/snakeoil/snakeoil-0.11.1.ebuild
index c5ca9f45078f..d1dfe54ed083 100644
--- a/dev-python/snakeoil/snakeoil-0.11.1.ebuild
+++ b/dev-python/snakeoil/snakeoil-0.11.1.ebuild
@@ -15,7 +15,7 @@ if [[ ${PV} == *9999 ]] ; then
https://github.com/pkgcore/snakeoil.git"
inherit git-r3
else
- KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos"
inherit pypi
fi
diff --git a/dev-python/sphinx-bootstrap-theme/sphinx-bootstrap-theme-0.8.1.ebuild b/dev-python/sphinx-bootstrap-theme/sphinx-bootstrap-theme-0.8.1.ebuild
index a3a3234df6d7..0b45e712b649 100644
--- a/dev-python/sphinx-bootstrap-theme/sphinx-bootstrap-theme-0.8.1.ebuild
+++ b/dev-python/sphinx-bootstrap-theme/sphinx-bootstrap-theme-0.8.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/sphinx-multiversion/sphinx-multiversion-0.2.4-r1.ebuild b/dev-python/sphinx-multiversion/sphinx-multiversion-0.2.4-r1.ebuild
index 939a395aff30..22f0407c32d6 100644
--- a/dev-python/sphinx-multiversion/sphinx-multiversion-0.2.4-r1.ebuild
+++ b/dev-python/sphinx-multiversion/sphinx-multiversion-0.2.4-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -10,11 +10,11 @@ inherit distutils-r1
DESCRIPTION="Add support for multiple versions to sphinx"
HOMEPAGE="
- https://github.com/Holzhaus/sphinx-multiversion/
+ https://github.com/sphinx-contrib/multiversion/
https://pypi.org/project/sphinx-multiversion/
"
SRC_URI="
- https://github.com/Holzhaus/sphinx-multiversion/archive/v${PV}.tar.gz
+ https://github.com/sphinx-contrib/sphinx-multiversion/archive/v${PV}.tar.gz
-> ${P}.gh.tar.gz
"
@@ -26,5 +26,6 @@ DEPEND="
dev-python/sphinx[${PYTHON_USEDEP}]
"
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
distutils_enable_sphinx docs dev-python/alabaster
diff --git a/dev-python/sphinx-pytest/sphinx-pytest-0.3.0.ebuild b/dev-python/sphinx-pytest/sphinx-pytest-0.3.0.ebuild
index 55571b886aa7..b1f8ed13467c 100644
--- a/dev-python/sphinx-pytest/sphinx-pytest-0.3.0.ebuild
+++ b/dev-python/sphinx-pytest/sphinx-pytest-0.3.0.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-DISTUTILS_USE_PEP517=flit
+DISTUTILS_USE_PEP517=flit-core
PYTHON_COMPAT=( python3_{13..14} )
inherit distutils-r1
diff --git a/dev-python/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.ebuild b/dev-python/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.ebuild
index 585988b385ad..32d79a0e3b3b 100644
--- a/dev-python/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.ebuild
+++ b/dev-python/sphinxcontrib-jquery/sphinxcontrib-jquery-4.1.ebuild
@@ -1,9 +1,9 @@
-# Copyright 2023-2025 Gentoo Authors
+# Copyright 2023-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-DISTUTILS_USE_PEP517=flit
+DISTUTILS_USE_PEP517=flit-core
PYPI_NO_NORMALIZE=1
PYTHON_COMPAT=( python3_{13..14} )
@@ -26,4 +26,5 @@ RDEPEND="
PATCHES=( "${FILESDIR}/${PN}-4.1-backport-pr28.patch" )
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
diff --git a/dev-python/svg-path/svg-path-7.0.ebuild b/dev-python/svg-path/svg-path-7.0.ebuild
index 95f53f88d6ec..aa56f7f6e993 100644
--- a/dev-python/svg-path/svg-path-7.0.ebuild
+++ b/dev-python/svg-path/svg-path-7.0.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
diff --git a/dev-python/truststore/truststore-0.10.4.ebuild b/dev-python/truststore/truststore-0.10.4.ebuild
index 33a32f3406a5..3f9c12ed7ad8 100644
--- a/dev-python/truststore/truststore-0.10.4.ebuild
+++ b/dev-python/truststore/truststore-0.10.4.ebuild
@@ -51,5 +51,6 @@ python_test() {
fi
local EPYTEST_PLUGINS=( pytest-{asyncio,httpserver,rerunfailures} )
+ local EPYTEST_RERUNS=5
epytest
}
diff --git a/dev-python/types-setuptools/Manifest b/dev-python/types-setuptools/Manifest
index 8d8068c52df2..8fb6b3684690 100644
--- a/dev-python/types-setuptools/Manifest
+++ b/dev-python/types-setuptools/Manifest
@@ -1,3 +1,4 @@
DIST types_setuptools-82.0.0.20260408.tar.gz 44861 BLAKE2B 962c26fe06a7c3e679820357cd754d2b86e0a6f23c8d73aa53f70f14c971b4c2adce4f1996f42a364d8a803c517d7ac9f64d925e2226a57580adae5170363f90 SHA512 13fa510d928db23f5a651e566862e3f27e5ff5182b48ba5fbc606363ef7221839baa29989530db046571ced6924733fed4f3a01f3f4961d1fe38fc952fa84d4d
DIST types_setuptools-82.0.0.20260508.tar.gz 44919 BLAKE2B d650e3d58d09dbac12f91d6f72eda28f6b7b0b9811d3b30b1d7f452fb89af77ee2b67f2c36dfe7cef4dc79a4fa703dff6d380af63b4be8d8edf47e94085a2e8a SHA512 933c50dcd1db4fd0915af5d204421171118138afd2201481341733d6b816083b2da2f5af7f3e17ff6630a79673384701dc826d8a83fda95eaa534ff94470f75a
DIST types_setuptools-82.0.0.20260518.tar.gz 44999 BLAKE2B 5eaa98591b90ddb8ceb9001e650b945560c8a88471fcce6283c9bd27485fe52c84ded9ae31c70df427f7746199230f1db8518e74d694674540e34d1bb3ad98b1 SHA512 ebbe0cbd346fdff07bf9c282cf346b557dd694daf97e69f89ebaae7e71cceac94aeb04dd445dc9b05adc5c91d1d0b527bdf0ddd42c18ab138b5f289e80fcf97a
+DIST types_setuptools-83.0.0.20260706.tar.gz 45290 BLAKE2B 38ec6630ebaf68b4e5d4b26701dd073050bbecd253a1efe98aabf523b8caeac71a669b212642cddd8a2faf49f52fab474259c6a30f987618bbd51345fe560015 SHA512 addf447bfe1c6a899a2966c6a8fe6b1f620f073e948740ba89a6fa02849d8df5717f918f5bd1cb10cfc4f374fb856361f5d37a7c832b26f603a01df0faa5be90
diff --git a/dev-python/types-setuptools/types-setuptools-83.0.0.20260706.ebuild b/dev-python/types-setuptools/types-setuptools-83.0.0.20260706.ebuild
new file mode 100644
index 000000000000..9c559442de25
--- /dev/null
+++ b/dev-python/types-setuptools/types-setuptools-83.0.0.20260706.ebuild
@@ -0,0 +1,20 @@
+# Copyright 2023-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Typing stubs for setuptools"
+HOMEPAGE="https://pypi.org/project/types-setuptools/"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+BDEPEND="
+ >=dev-python/setuptools-82.0.1[${PYTHON_USEDEP}]
+"
diff --git a/dev-python/uv-build/Manifest b/dev-python/uv-build/Manifest
index 5babaff8237e..b4acf0a816be 100644
--- a/dev-python/uv-build/Manifest
+++ b/dev-python/uv-build/Manifest
@@ -5,3 +5,4 @@ DIST uv_build-0.11.23.tar.gz 402105 BLAKE2B af9b72353cf82896795545201e911ed7a26f
DIST uv_build-0.11.24.tar.gz 401361 BLAKE2B cdafaca66f3a6dd5db0f9e7520428790b1ebaf98d2adc8fe5a4f4b7754649cc50559066343bc2d95ff2634ceedf69f4f19bc33d88da3a2212f8c06531c5fb917 SHA512 3dfb1a9af61ce8f666c161f63a77f609c68f0578e1bd6eadc8bf9f681dabfc7427418e99e134334aea8f96bc6ea9537b62f162200050078fcfc187fd8c0eb0f1
DIST uv_build-0.11.25.tar.gz 404894 BLAKE2B 6922a5e91c5c657ca5ed90edb0250cbd7192d208cdc135d8c5de74c04de8b91c10d7c0d52d58224a6cb60c7114ecbdcbc2181ac18b0b69cf41d88fd007329a36 SHA512 9315f67c76004b6b45e08d8cad53e5ac4f04a2342e18768523e71f9dc2f7e81aec599f968983df3237d1ad3dc9b87b088f99d2ea79994543fa3623ab21ae5730
DIST uv_build-0.11.26.tar.gz 405178 BLAKE2B c59258a222a8346543ab8bde8d425600c9a575a1da4b5c96b7470cb5b8f3830168d513e1d6337d00e79e94766a6604b0946e5bf2fce192800a8f1aa5576b2e5a SHA512 3331e4195fc72543fb546f4a86e2eeb036277ceebba37151a3faaefb921c8508d99e8bc25dacd57eb26a8744b1b76f2b90df4dff97450e97518fcd5ca80fe287
+DIST uv_build-0.11.27.tar.gz 406474 BLAKE2B bb3c669e37059b2777c51120578caae84db54379f765c13a946b2fdc5e502e3c67ee7e30f7d2e1dde649961c6f2d0a10e758bf9b6b1835cb600f2400925ac627 SHA512 e7a7f461cf1ae899b24fcedc08fd739f352347eacb1f215026745a6b170e552504ed712b91519cff170ae81e36d6b7403a0270e9766e2cdf644411b51e62cf9c
diff --git a/dev-python/uv-build/uv-build-0.11.27.ebuild b/dev-python/uv-build/uv-build-0.11.27.ebuild
new file mode 100644
index 000000000000..d66584ed2ede
--- /dev/null
+++ b/dev-python/uv-build/uv-build-0.11.27.ebuild
@@ -0,0 +1,99 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Maturin compiles uv-build executable for every impl, we do not want
+# that, so we use another backend. And since we use another backend,
+# why not dogfood it in the first place?
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="PEP517 uv build backend"
+HOMEPAGE="
+ https://github.com/astral-sh/uv/
+ https://pypi.org/project/uv-build/
+"
+
+LICENSE="|| ( Apache-2.0 MIT )"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/uv-${PV}
+"
+BDEPEND="
+ test? (
+ app-arch/unzip
+ dev-python/build[${PYTHON_USEDEP}]
+ )
+"
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # use the executable from dev-python/uv instead of building
+ # a largely overlapping uv-build executable (at least for now)
+ sed -i -e '/USE_UV_EXECUTABLE/s:False:True:' python/uv_build/__init__.py || die
+
+ # replace the build-system section
+ sed -i -e '/\[build-system\]/,$d' pyproject.toml || die
+ cat >> pyproject.toml <<-EOF || die
+ [build-system]
+ requires = ["uv_build<9999"]
+ build-backend = "uv_build"
+ backend-path = ["src"]
+ EOF
+
+ # rename to make uv-build find it
+ mv python src || die
+}
+
+python_test() {
+ "${EPYTHON}" -m build -n || die "Self-build failed with ${EPYTHON}"
+
+ local zip_result=$(
+ unzip -t "dist/uv_build-${PV}-py3-none-any.whl" || die
+ )
+ local zip_expected="\
+Archive: dist/uv_build-${PV}-py3-none-any.whl
+ testing: uv_build/ OK
+ testing: uv_build/__init__.py OK
+ testing: uv_build/__main__.py OK
+ testing: uv_build/py.typed OK
+ testing: uv_build-${PV}.dist-info/ OK
+ testing: uv_build-${PV}.dist-info/WHEEL OK
+ testing: uv_build-${PV}.dist-info/METADATA OK
+ testing: uv_build-${PV}.dist-info/RECORD OK
+No errors detected in compressed data of dist/uv_build-${PV}-py3-none-any.whl.\
+"
+ if [[ ${zip_result} != ${zip_expected} ]]; then
+ eerror ".zip result:\n${zip_result}"
+ eerror ".zip expected:\n${zip_expected}"
+ die ".whl result mismatch"
+ fi
+
+ local tar_result=$(
+ tar -tf "dist/uv_build-${PV}.tar.gz" || die
+ )
+ local tar_expected="\
+uv_build-${PV}/PKG-INFO
+uv_build-${PV}/
+uv_build-${PV}/README.md
+uv_build-${PV}/pyproject.toml
+uv_build-${PV}/src
+uv_build-${PV}/src/uv_build
+uv_build-${PV}/src/uv_build/__init__.py
+uv_build-${PV}/src/uv_build/__main__.py
+uv_build-${PV}/src/uv_build/py.typed\
+"
+ if [[ ${tar_result} != ${tar_expected} ]]; then
+ eerror ".tar.gz result:\n${tar_result}"
+ eerror ".tar.gz expected:\n${tar_expected}"
+ die ".tar.gz result mismatch"
+ fi
+}
diff --git a/dev-python/uv/Manifest b/dev-python/uv/Manifest
index aba3d008a219..4a5a3eb786f1 100644
--- a/dev-python/uv/Manifest
+++ b/dev-python/uv/Manifest
@@ -12,3 +12,5 @@ DIST uv-0.11.25-crates.tar.xz 43779192 BLAKE2B ae9d16ba3f8a5a719b6f52980c3b8ce6f
DIST uv-0.11.25.gh.tar.gz 5538598 BLAKE2B 47198e379339a963a90b394b29271e2b276ced739f4320daf279eabc53cd0bab1698a57f336ed3270a4b8f40fa4f6a8f8b201603ed3952d282d220b0e290418a SHA512 9b993ae026d55ee8dfe13101e0fdbe026d81b77ff42b20ad42ff72c9708f2d767cde94010e69cd4f65fa8821c43958bc665893761119770deba70823d895298c
DIST uv-0.11.26-crates.tar.xz 43804076 BLAKE2B c1248a5327bf7aa1b747d55651a37b680412821699c37b7e6ae81e7c9036e724873f433ea8ecef462238bbd8e1fb4fe6cf49e7b8fe11a37651ee9ab11a5017d4 SHA512 246e43a716b9d365267bbe767491dcae76677589b0606138c784342968b41c81477a1274c5391da647b3a01febbba08b74e9e61b1897270ce718da34a00642d8
DIST uv-0.11.26.gh.tar.gz 5540694 BLAKE2B 2623b2f23ff802875a1cc349e32e38fee0f7a1e5f4191265ea8760ada80e3295f2b8507d4f794e6f2d38d7c2bb668e0779531221f17c683b9dc0141ee74668f8 SHA512 8be3842d1a534765a99a130a857c860a2b6ec2dd517cbdff7f697db55500d1092b4f323459625d433635f3559a058eef98140eb65b1082394994d72c5d329ee1
+DIST uv-0.11.27-crates.tar.xz 43824416 BLAKE2B 6cb58e007b05446972c77fd28736a5e89f49728fb7c20cf39b5465d925805933cdd6633a83b75cdff92a153cad7c2120f50c02defde4ca9f2047dd232b82c3b7 SHA512 41a117422d873aa36383d713a0564a8c0a0f4972a0744d9c29b03ac5797d56903d3832aa3ca8873815cc1561a2aa6119de2fd5a0edf5b4393e0248b44ce82c1a
+DIST uv-0.11.27.gh.tar.gz 7322150 BLAKE2B 3ac7dfda376185e4742f860fa60f67c5c020a90d2f184529e4a27405b9f745d76597da899e771142f27fd6dd0ba8c714a034a2c6b6d6335e853d58c27cbd44bc SHA512 a3a019d752d359487b330d05ab2a1dd8520f5b1e8f773c0dc5935693a9572d8b8f7b21e49e5fc76f9e2436aee3ced090e80dd0f3e1274caeb6558a67119b0a88
diff --git a/dev-python/uv/uv-0.11.27.ebuild b/dev-python/uv/uv-0.11.27.ebuild
new file mode 100644
index 000000000000..e5931b30ed3e
--- /dev/null
+++ b/dev-python/uv/uv-0.11.27.ebuild
@@ -0,0 +1,163 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+"
+RUST_MIN_VER="1.94.0"
+
+inherit cargo check-reqs
+
+CRATE_PV=${PV}
+DESCRIPTION="A Python package installer and resolver, written in Rust"
+HOMEPAGE="
+ https://github.com/astral-sh/uv/
+ https://pypi.org/project/uv/
+"
+# pypi sdist misses scripts/, needed for tests
+SRC_URI="
+ https://github.com/astral-sh/uv/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+if [[ ${PKGBUMPING} != ${PVR} ]]; then
+ SRC_URI+="
+ https://github.com/gentoo-crate-dist/uv/releases/download/${CRATE_PV}/uv-${CRATE_PV}-crates.tar.xz
+ "
+fi
+
+# most of the code
+LICENSE="|| ( Apache-2.0 MIT )"
+# crates/pep508-rs is || ( Apache-2.0 BSD-2 ) which is covered below
+# Dependent crate licenses
+LICENSE+="
+ 0BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 BSD CC0-1.0
+ CDLA-Permissive-2.0 ISC MIT MIT-0 MPL-2.0 Unicode-3.0
+ Unicode-DFS-2016 ZLIB
+"
+# ring crate
+LICENSE+=" openssl"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~x86"
+IUSE="test"
+RESTRICT="test"
+PROPERTIES="test_network"
+
+DEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-arch/zstd:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+ test? (
+ dev-lang/python:3.9
+ dev-lang/python:3.10
+ dev-lang/python:3.11
+ dev-lang/python:3.12
+ dev-lang/python:3.13
+ !!~dev-python/uv-0.5.0
+ )
+"
+
+QA_FLAGS_IGNORED="usr/bin/.*"
+
+check_space() {
+ local CHECKREQS_DISK_BUILD=3G
+ use debug && CHECKREQS_DISK_BUILD=9G
+ check-reqs_pkg_setup
+}
+
+pkg_pretend() {
+ check_space
+}
+
+pkg_setup() {
+ check_space
+ rust_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # force thin lto, makes build much faster and less memory hungry
+ # (i.e. makes it possible to actually build uv on 32-bit PPC)
+ sed -i -e '/lto/s:fat:thin:' Cargo.toml || die
+
+ # enable system libraries where supported
+ export ZSTD_SYS_USE_PKG_CONFIG=1
+ # TODO: unbundle libz-ng-sys, tikv-jemalloc-sys?
+
+ # remove unbundled sources, just in case
+ find "${ECARGO_VENDOR}"/{bzip2,lzma,zstd}-sys-*/ -name '*.c' -delete || die
+
+ # bzip2-sys requires a pkg-config file
+ # https://github.com/alexcrichton/bzip2-rs/issues/104
+ mkdir "${T}/pkg-config" || die
+ export PKG_CONFIG_PATH=${T}/pkg-config${PKG_CONFIG_PATH+:${PKG_CONFIG_PATH}}
+ cat >> "${T}/pkg-config/bzip2.pc" <<-EOF || die
+ Name: bzip2
+ Version: 9999
+ Description:
+ Libs: -lbz2
+ EOF
+
+ # uv is now forcing bundled liblzma, sigh
+ sed -i -e '/xz/s:"static"::' Cargo.toml || die
+}
+
+src_configure() {
+ local myfeatures=(
+ test-git
+ test-pypi
+ test-python
+ )
+
+ cargo_src_configure --no-default-features
+}
+
+src_compile() {
+ cd crates/uv || die
+ cargo_src_compile
+}
+
+src_test() {
+ cd crates/uv || die
+ cargo_src_test --no-fail-fast
+}
+
+src_install() {
+ dobin "$(cargo_target_dir)"/{uv,uvx}
+
+ insinto /etc/xdg/uv
+ newins - uv.toml <<-EOF || die
+ # These defaults match Fedora, see:
+ # https://src.fedoraproject.org/rpms/uv/pull-request/18
+
+ # By default ("automatic"), uv downloads missing Python versions
+ # automatically and keeps them in the user's home directory.
+ # Disable that to make downloading opt-in, and especially
+ # to avoid unnecessarily fetching custom Python when the distro
+ # package would be preferable. Python builds can still be
+ # downloaded manually via "uv python install".
+ #
+ # https://docs.astral.sh/uv/reference/settings/#python-downloads
+ python-downloads = "manual"
+
+ # By default ("managed"), uv always prefers self-installed
+ # Python versions over the system Python, independently
+ # of versions. Since we generally expect users to use that
+ # to install old Python versions not in ::gentoo anymore,
+ # this effectively means that uv would end up preferring very
+ # old Python versions over the newer ones that are provided
+ # by the system. Default to using the system versions to avoid
+ # this counter-intuitive behavior.
+ #
+ # https://docs.astral.sh/uv/reference/settings/#python-preference
+ python-preference = "system"
+ EOF
+}
diff --git a/dev-python/uvicorn/Manifest b/dev-python/uvicorn/Manifest
index 3b23f45685f5..344d8086f4d2 100644
--- a/dev-python/uvicorn/Manifest
+++ b/dev-python/uvicorn/Manifest
@@ -2,3 +2,5 @@ DIST uvicorn-0.49.0.tar.gz 91284 BLAKE2B 44bc012868fe519132fba4485f0b8f7c6d9eb58
DIST uvicorn-0.49.0.tar.gz.provenance 9600 BLAKE2B 8b104211313a3da23431a693b7d6aa778f174ffc1e66e20b46f34b7986c02739559babd73f34490b07fe32dc8422bd1f5fa9a3f0fff6348a7d63bfe2d865bbf6 SHA512 075901986512a504961048faaf3e99600cd97f2940c2418616344843520e1924060d57acb214962d648c3c570f40cf1b3bce547bdf929d36adaf8a32f7ad8a5f
DIST uvicorn-0.50.0.tar.gz 93257 BLAKE2B bc666cbdb981a35aa94bd1faf9636c7c0dae5a85268993beeb0b77e1542d70941d9da7b5e129711c8ff1904e23ed80909ead86409720147c7ee7cdf14cc8acb9 SHA512 682ffb55076452931c82b7ddaf643b0aea9aa869a709721bee30d0dc0b33bf2b36e362864f970841d2b69c2d0cbe98c55c86dc22cc0fa8395e0c51a0624b09cd
DIST uvicorn-0.50.0.tar.gz.provenance 9741 BLAKE2B 2521229c05cf3b8fc31e208a12a27f767dd7d348c8fed1ae6452928859883ceb354448aab8d5709230c5e9c667a4cf2674e8a88f3ae9ade2f8dda8bccca80ca6 SHA512 8713deb05751d3897dc0b00965cc72e1c2c3ceef39c02b71ae43bbe6ecfe7ad88682114ef7be050d085cc984b7ff7781a30f31a4c132be58db4d90590ed00a9b
+DIST uvicorn-0.50.2.tar.gz 93716 BLAKE2B db4840c3fe19daa5e63aba7e4c9d328fa0e840d96c4e74580ec1e3f6a7b9346c1ed91ed6d9a4cb594ebb771c21099b4f81657cf9797c2c7f78f8742e03f58e30 SHA512 f3504ced038d6e5521a6f4c266b4ca87d6bb49c21bf3b5f9f32097fc75c81c6a755b1d6b11835590bc58dc9e0d5030f7df2041cf993f629ac93303010b272680
+DIST uvicorn-0.50.2.tar.gz.provenance 9690 BLAKE2B d34f5564c33341c1f781eb1e4c2349de39091ccf095596ab939613b74be45b816196c095c7d0d97da37439bccdc928ec2a9739aaefda75dcb643da8a21c1c552 SHA512 70281746bc4c67dbc19b001a516c5708dc2ee8d6ae9abbc1a9f4c09966a1d2cf7ff8f9e576ea3d2b767b6a193caa2be09abd26b6ec8f50287fa53b51bc81dabc
diff --git a/dev-python/uvicorn/uvicorn-0.50.2.ebuild b/dev-python/uvicorn/uvicorn-0.50.2.ebuild
new file mode 100644
index 000000000000..177e8e69f7c1
--- /dev/null
+++ b/dev-python/uvicorn/uvicorn-0.50.2.ebuild
@@ -0,0 +1,70 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYPI_VERIFY_REPO=https://github.com/Kludex/uvicorn
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Lightning-fast ASGI server implementation"
+HOMEPAGE="
+ https://uvicorn.dev/
+ https://github.com/Kludex/uvicorn/
+ https://pypi.org/project/uvicorn/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="test-rust"
+
+RDEPEND="
+ >=dev-python/asgiref-3.4.0[${PYTHON_USEDEP}]
+ >=dev-python/click-7.0[${PYTHON_USEDEP}]
+ >=dev-python/h11-0.8[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/a2wsgi[${PYTHON_USEDEP}]
+ >=dev-python/httptools-0.8.0[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.28[${PYTHON_USEDEP}]
+ dev-python/python-dotenv[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+ >=dev-python/websockets-13.0[${PYTHON_USEDEP}]
+ dev-python/wsproto[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/trustme[${PYTHON_USEDEP}]
+ >=dev-python/watchfiles-0.20[${PYTHON_USEDEP}]
+ )
+ )
+"
+
+EPYTEST_PLUGINS=( anyio pytest-mock )
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # too long path for unix socket
+ tests/test_config.py::test_bind_unix_socket_works_with_reload_or_workers
+ # TODO
+ 'tests/protocols/test_http.py::test_close_connection_with_multiple_requests[httptools]'
+ 'tests/protocols/test_websocket.py::test_send_binary_data_to_server_bigger_than_default_on_websockets[httptools-max=defaults sent=defaults+1]'
+ 'tests/protocols/test_websocket.py::test_send_binary_data_to_server_bigger_than_default_on_websockets[h11-max=defaults sent=defaults+1]'
+ # tests broken with non-ancient dev-python/websockets
+ tests/protocols/test_websocket.py::test_fragmented_message_exceeding_max_size
+ tests/protocols/test_websocket.py::test_fragmented_message_reassembly
+)
+
+EPYTEST_IGNORE=(
+ tests/benchmarks
+)
+
+pkg_postinst() {
+ optfeature "auto reload on file changes" dev-python/watchfiles
+}
diff --git a/dev-python/verboselogs/verboselogs-1.7-r1.ebuild b/dev-python/verboselogs/verboselogs-1.7-r1.ebuild
index 88ed0db0eea0..130230c5d050 100644
--- a/dev-python/verboselogs/verboselogs-1.7-r1.ebuild
+++ b/dev-python/verboselogs/verboselogs-1.7-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -29,6 +29,7 @@ PATCHES=(
)
distutils_enable_sphinx docs
+EPYTEST_PLUGINS=()
distutils_enable_tests pytest
python_test() {
diff --git a/dev-python/virtualenv/Manifest b/dev-python/virtualenv/Manifest
index f9bd8032271c..ef040f41997d 100644
--- a/dev-python/virtualenv/Manifest
+++ b/dev-python/virtualenv/Manifest
@@ -4,3 +4,5 @@ DIST virtualenv-21.4.3.tar.gz 7644454 BLAKE2B ef289a57f1cad1c42aa0bb38624a0abd37
DIST virtualenv-21.4.3.tar.gz.provenance 9500 BLAKE2B d5adf2b90488d9d0728101d7ecebb593350d07d0f1b08f0acd67847f22b99a7b1b8d1fd082fe739bc927fd79c75cda1f55cf39b2b8467fa8ddaa6178505d1909 SHA512 6c5dfc394d1c95c161c30235994b2066127653678430e69b769dc50ed2a007b6703379eb8c495d1395b953ec67d797ad1e4433121cdfd6fc722367937ac5178a
DIST virtualenv-21.5.1.tar.gz 4578798 BLAKE2B 495289992d27ca98114ad713e680c7db257ef887dae500cf2b432486984b3c9a84d2108a39318f2d95a840fb3d000aaa894a189a8345a0023024d9c4f3b17568 SHA512 c7d49b496ede5ffcd6bf10ba8bcf47acae3c98470c5bb1e41c2a074c9f128ee0a6d83f89a0e088c4ca1e237e27e6d73affe0adbaa884f5afd526ac6881d2dbb8
DIST virtualenv-21.5.1.tar.gz.provenance 9602 BLAKE2B 1e436f34c3b5a85ef334727eed745f3ca76bdfb5f6e8d7a484d602c177f4b680e8200a7ffa4fd2d6c4b43ec53a3829dd4c6c2b90db0487d752fec175aec456fc SHA512 37b56c52097132ba42d78c606c13b1e2d2a470662e4de29ae32f923db735b538b13f7f7365e220da8b97f788ba496e53705b6af20060826fc0168d323608ae91
+DIST virtualenv-21.6.0.tar.gz 5526111 BLAKE2B a5103d2a6746c5e73ccb37ce1eb2d2e8893674acaf549dbcfa7cf36764c616eccc2cd9619759a109f12578b0fcb4126dc82cfc2072386f4def4ea8d627864adc SHA512 2910b5adeb0103d1bc7acca54a6b76c5dc68366f962c0c9495a1ff54d3bca2d574611316ab839cd98c8e947c7c9d57bc58c6f142b810e077a040885a0024a83d
+DIST virtualenv-21.6.0.tar.gz.provenance 9653 BLAKE2B 5efb6b58d006e7cd8d0efd9adf22d819599666a6315899edae2e128655e011e8321c6218976a75951d3d5d210ecc3c5fade3131206feeabbfdc9e1b1b5fa82e5 SHA512 8aa97e2b2b1f9b537450fe211d6ad681b24d0f71f75ba4f184797c76377281e7601302205ed3adea1fe06d7a82a7e1afd394792f3550ca4fc982ab653af59be4
diff --git a/dev-python/virtualenv/virtualenv-21.6.0.ebuild b/dev-python/virtualenv/virtualenv-21.6.0.ebuild
new file mode 100644
index 000000000000..0abb2e161fb7
--- /dev/null
+++ b/dev-python/virtualenv/virtualenv-21.6.0.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYPI_VERIFY_REPO=https://github.com/pypa/virtualenv
+PYTHON_TESTED=( python3_{13..14} )
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Virtual Python Environment builder"
+HOMEPAGE="
+ https://virtualenv.pypa.io/en/stable/
+ https://pypi.org/project/virtualenv/
+ https://github.com/pypa/virtualenv/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/distlib-0.3.7[${PYTHON_USEDEP}]
+ >=dev-python/filelock-3.24.2[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-3.9.1[${PYTHON_USEDEP}]
+ >=dev-python/python-discovery-1.4.2[${PYTHON_USEDEP}]
+
+ dev-python/ensurepip-pip
+ >=dev-python/ensurepip-setuptools-70.1
+ dev-python/ensurepip-wheel
+"
+# coverage is used somehow magically in virtualenv, maybe it actually
+# tests something useful
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ ${RDEPEND}
+ $(python_gen_cond_dep '
+ dev-python/coverage[${PYTHON_USEDEP}]
+ >=dev-python/pip-22.2.1[${PYTHON_USEDEP}]
+ >=dev-python/pytest-mock-3.6.1[${PYTHON_USEDEP}]
+ dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
+ dev-python/pytest-timeout[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-67.8[${PYTHON_USEDEP}]
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ >=dev-python/packaging-20.0[${PYTHON_USEDEP}]
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+src_prepare() {
+ local PATCHES=(
+ # use wheels from ensurepip bundle
+ "${FILESDIR}/${PN}-21.5.1-ensurepip.patch"
+ )
+
+ distutils-r1_src_prepare
+
+ # workaround test failures due to warnings from setuptools-scm, sigh
+ echo '[tool.setuptools_scm]' >> pyproject.toml || die
+
+ # remove useless pins
+ sed -i -e 's:,<[=0-9.]*::' pyproject.toml || die
+
+ # remove bundled wheels
+ rm src/virtualenv/seed/wheels/embed/*.whl || die
+}
+
+python_test() {
+ if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
+ einfo "Skipping testing on ${EPYTHON}"
+ return
+ fi
+
+ local EPYTEST_DESELECT=(
+ tests/unit/seed/embed/test_bootstrap_link_via_app_data.py::test_seed_link_via_app_data
+ # tests for old wheels with py3.7 support
+ tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke
+ tests/unit/seed/wheels/test_wheels_util.py::test_wheel_not_support
+ # broken by different wheel versions in ensurepip
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest_string
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_exact
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest_none
+ tests/unit/seed/wheels/test_acquire.py::test_download_wheel_bad_output
+ tests/unit/seed/wheels/test_wheels_util.py::test_embed_wheel_below_oldest_supported_is_missing
+ # hangs on a busy system, sigh
+ tests/unit/test_util.py::test_reentrant_file_lock_is_thread_safe
+ # TODO
+ tests/unit/create/via_global_ref/test_build_c_ext.py::test_can_build_c_extensions
+ # random resource leaks or xdist
+ tests/unit/test_file_limit.py::test_too_many_open_files
+ # Internet
+ tests/unit/create/test_creator.py::test_create_distutils_cfg
+ # we do not use bundled wheels
+ tests/unit/seed/wheels/test_bundle.py::test_every_wheel_on_disk_has_sha256
+ )
+
+ local -x TZ=UTC
+ local EPYTEST_PLUGINS=( pytest-{mock,rerunfailures} time-machine )
+ local EPYTEST_RERUNS=5
+ local EPYTEST_TIMEOUT=180
+ local EPYTEST_XDIST=1
+ epytest -o addopts=
+}
+
+src_install() {
+ distutils-r1_src_install
+
+ # remove bundled wheels, we're using ensurepip bundle instead
+ find "${ED}" -name '*.whl' -delete || die
+}
diff --git a/dev-python/whenever/Manifest b/dev-python/whenever/Manifest
index 597f31b9b6e5..c8140e99a4bf 100644
--- a/dev-python/whenever/Manifest
+++ b/dev-python/whenever/Manifest
@@ -72,6 +72,8 @@ DIST whenever-0.10.0.tar.gz 429588 BLAKE2B f758f31edf628d60224743ad0012d82a91c83
DIST whenever-0.10.0.tar.gz.provenance 9541 BLAKE2B a197726ebeb43b5657af5896f6f7a2e641cefaf2ef250e007e76f6bbca2ce420275bec169cfd234303f06004bd6ce8199ec19e0fc051dfa37acb9f303e43b1ad SHA512 de6603357792bbcc19aaafa1184240ac690d5d16de99c361ecbf651996dcd5269e4b18f08c9c2767bfc6beafc744e452fc2e69766e172899de6b0836ece19f84
DIST whenever-0.10.1.tar.gz 434566 BLAKE2B 5f315b509e5e9239262f2b58033037b72dceb5de8463329bb23a5f162d97dd4d9508e65c19b0f040c01edbf4051185d92226296e2061e6eb576a181302be1e87 SHA512 120c6e85868195bff32a110f33286179817306747d87dd0210e77a1bfb488e7cedd4e3669628e662f3f457936b549a5760695b4bc1f192061718673e15ad17e9
DIST whenever-0.10.1.tar.gz.provenance 10110 BLAKE2B 7d172dda49dbcdb041a0d0aa6684aa6d7178d4ac779be1dc944e167770970118558aa2704cf981fdb3ea1f12bd9214aa7608519e3c0c2119c27593abdbef719b SHA512 42e16594cf389ac50f268d319ad1135f624e1f46ea2fd9fa2eab8f067e077be85f4ec99db7c2cb7bf7fa637e8a42017df39232351002986a2d179cd6c5f965bd
+DIST whenever-0.10.2.tar.gz 434850 BLAKE2B 792b04f14ec8434db9f2f289568497840ad10261fc70987dbbd8584b31ecb597331c1c46fd1e8d95ca4ef2f1f6ac01d0bb6b0764408f727c2ecc75f490e13e5e SHA512 b46fa3cd17341728a32f52c7e9cc16ef6f98ee015a1a40234e0dd92098214d39a27b9085450faeaa40927e91f1be194d2b2165ecacefdb8f089999e7da15f7bf
+DIST whenever-0.10.2.tar.gz.provenance 9969 BLAKE2B cc312cd1dcc44cb7fb0a626c77573d94e0abfe7f5216067f5db7015c35e83fd0f233660a6f04244abae9561cdfd18d60aabf28a05eb7e72dcb84a9b8f013b87c SHA512 43a18a661b19808a23e6631011afe87727f2977f43cfe72884974200feb2da7ff7fbd83eb3756ac4831852f397031d2183ccae691a3deb193332fd54fec39ffc
DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
DIST winapi-util-0.1.11.crate 13368 BLAKE2B 164f49c84952ece6e566a9a23f32ddf34e16f3930ff531f8d7527bcc18768c9a118cbee748ae6a753a172b4ce8d0f22108142382992b2918b442387ee5904545 SHA512 cc1511c004c2a81da4d7a0414973f09ab711033fbbadfd597f56df2cc6c99b3c1822f0b8de1952e78400a88462b9050acd85d2e4b36db72254049a2d6f725a01
diff --git a/dev-python/whenever/whenever-0.10.2.ebuild b/dev-python/whenever/whenever-0.10.2.ebuild
new file mode 100644
index 000000000000..1b3dd72a20a7
--- /dev/null
+++ b/dev-python/whenever/whenever-0.10.2.ebuild
@@ -0,0 +1,147 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=standalone
+PYPI_VERIFY_REPO=https://github.com/ariebovenberg/whenever
+PYTHON_COMPAT=( python3_{13..14} )
+
+CARGO_OPTIONAL=1
+RUST_MIN_VER="1.93.0"
+CRATES="
+ ahash@0.8.12
+ aho-corasick@1.1.4
+ alloca@0.4.0
+ anes@0.1.6
+ anstyle@1.0.14
+ autocfg@1.5.0
+ bumpalo@3.20.2
+ cast@0.3.0
+ cc@1.2.57
+ cfg-if@1.0.4
+ ciborium-io@0.2.2
+ ciborium-ll@0.2.2
+ ciborium@0.2.2
+ clap@4.6.0
+ clap_builder@4.6.0
+ clap_lex@1.1.0
+ criterion-plot@0.8.2
+ criterion@0.8.2
+ crossbeam-deque@0.8.6
+ crossbeam-epoch@0.9.18
+ crossbeam-utils@0.8.21
+ crunchy@0.2.4
+ either@1.15.0
+ find-msvc-tools@0.1.9
+ getrandom@0.3.4
+ half@2.7.1
+ itertools@0.13.0
+ itoa@1.0.17
+ js-sys@0.3.91
+ libc@0.2.183
+ memchr@2.8.0
+ num-traits@0.2.19
+ once_cell@1.21.4
+ oorandom@11.1.5
+ page_size@0.6.0
+ plotters-backend@0.3.7
+ plotters-svg@0.3.7
+ plotters@0.3.7
+ proc-macro2@1.0.106
+ pyo3-build-config@0.29.0
+ pyo3-ffi@0.29.0
+ quote@1.0.45
+ r-efi@5.3.0
+ rayon-core@1.13.0
+ rayon@1.11.0
+ regex-automata@0.4.14
+ regex-syntax@0.8.10
+ regex@1.12.3
+ rustversion@1.0.22
+ same-file@1.0.6
+ serde@1.0.228
+ serde_core@1.0.228
+ serde_derive@1.0.228
+ serde_json@1.0.149
+ shlex@1.3.0
+ syn@2.0.117
+ target-lexicon@0.13.5
+ tinytemplate@1.2.1
+ unicode-ident@1.0.24
+ version_check@0.9.5
+ walkdir@2.5.0
+ wasip2@1.0.2+wasi-0.2.9
+ wasm-bindgen-macro-support@0.2.114
+ wasm-bindgen-macro@0.2.114
+ wasm-bindgen-shared@0.2.114
+ wasm-bindgen@0.2.114
+ web-sys@0.3.91
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.11
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-link@0.2.1
+ windows-sys@0.61.2
+ wit-bindgen@0.51.0
+ zerocopy-derive@0.8.47
+ zerocopy@0.8.47
+ zmij@1.0.21
+"
+
+inherit cargo distutils-r1 pypi
+
+DESCRIPTION="Modern datetime library for Python"
+HOMEPAGE="
+ https://github.com/ariebovenberg/whenever/
+ https://pypi.org/project/whenever/
+"
+SRC_URI+="
+ native-extensions? (
+ ${CARGO_CRATE_URIS}
+ )
+"
+
+LICENSE="MIT"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0 Apache-2.0-with-LLVM-exceptions MIT Unicode-3.0"
+SLOT="0"
+if [[ ${PV} != *_[ab]* ]]; then
+ KEYWORDS="~amd64"
+fi
+IUSE="+native-extensions"
+
+BDEPEND="
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ native-extensions? (
+ ${RUST_DEPEND}
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ )
+ test? (
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( hypothesis pytest-order )
+distutils_enable_tests pytest
+
+EPYTEST_IGNORE=( benchmarks )
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/whenever/_whenever.*.so"
+
+src_unpack() {
+ pypi_src_unpack
+ cargo_src_unpack
+}
+
+src_configure() {
+ if ! use native-extensions; then
+ export WHENEVER_NO_BUILD_RUST_EXT=1
+ fi
+}
+
+python_test() {
+ rm -rf whenever || die
+ epytest
+}
diff --git a/dev-python/wtforms/Manifest b/dev-python/wtforms/Manifest
index b42d64dac96e..3a1c2dfa1051 100644
--- a/dev-python/wtforms/Manifest
+++ b/dev-python/wtforms/Manifest
@@ -1,2 +1 @@
-DIST wtforms-3.2.1.tar.gz 137801 BLAKE2B 91deeb5a2b3ef07bec48c55a4aaef92969d6c731d91874ecf5260f2228be8ef0fdee32c61e4f5233a953f4c0be4359f1e98a87c4bf87975780b6be00b8717283 SHA512 96aa2934e39f95f2a2d0db4cd8026215cb0adea2df9bd235305b2857f2e5eecc3ea4e959ff1c1d46090213d348bccf70df19efaf73059074d1f02c577cbb1fdf
DIST wtforms-3.2.2.tar.gz 139583 BLAKE2B aecd3686b671f4e3ed26d1a880518b4f7463a9cb08767cdcce1b36824c49967d007c326aee5466e5370a408dcb8939fc7c3a72f867fce463faef36bfe0a67515 SHA512 c14737aa7503a1fee361e00854d7905b170429789b80f7b22f609065c3a41dcd80040b7c09305142a73f3aed0763e861a39b7058c11421418c0b1397d7b45663
diff --git a/dev-python/wtforms/wtforms-3.2.1.ebuild b/dev-python/wtforms/wtforms-3.2.1.ebuild
deleted file mode 100644
index 657491a47b44..000000000000
--- a/dev-python/wtforms/wtforms-3.2.1.ebuild
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=hatchling
-PYPI_PN="WTForms"
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="Flexible forms validation and rendering library for python web development"
-HOMEPAGE="
- https://wtforms.readthedocs.io/
- https://github.com/pallets-eco/wtforms/
- https://pypi.org/project/WTForms/
-"
-
-LICENSE="BSD"
-SLOT="0"
-KEYWORDS="amd64 arm64 ~riscv x86"
-
-RDEPEND="
- dev-python/markupsafe[${PYTHON_USEDEP}]
-"
-BDEPEND="
- dev-python/babel[${PYTHON_USEDEP}]
- test? (
- dev-python/email-validator[${PYTHON_USEDEP}]
- dev-python/python-dateutil[${PYTHON_USEDEP}]
- dev-python/sqlalchemy[${PYTHON_USEDEP}]
- dev-python/webob[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
diff --git a/dev-python/xxhash/Manifest b/dev-python/xxhash/Manifest
index 97f72005c1ce..18d758b5e45c 100644
--- a/dev-python/xxhash/Manifest
+++ b/dev-python/xxhash/Manifest
@@ -4,3 +4,5 @@ DIST xxhash-3.7.1.tar.gz 82993 BLAKE2B e90059f39f7a23d65f3f52b6b381a5e2d6e55e37f
DIST xxhash-3.7.1.tar.gz.provenance 9804 BLAKE2B 7f779e0d5f36853f40373749fe9a1bdfea7a4545af365350d26db1562149c80d4a6ba68b40baa30e0e7d3e58276cd949745e1ffbcbb140fade41123f3fb27ae2 SHA512 a85dbf40d1511eb0905d7d0ce791dab6e129540f1fa11a28017cbc96f45be5327a63597cea1ff9771d497b86de81ea8274826e2d65cca605021b26b39eb2ddfb
DIST xxhash-3.8.0.tar.gz 86107 BLAKE2B 66c2681c428390744234710de2c59e02a972dcd74f642c414322b1e07d82b20446eccb49cf715f464c25eaa3ac6778401f9f60f8322e58c76cd17bc1e05c9226 SHA512 4925cfb66d8fbf7ed37d2d5d7b7a785f7c33f8d123fe419c42b66bddaf43d3b6dc57f4f8b89b2754c7aba5dbe5e43aee1da3326eaef5528970a599571f033abb
DIST xxhash-3.8.0.tar.gz.provenance 9788 BLAKE2B 0c038226c76d06b466d218dc02f161b7375220ccd91f71b4b3d9ffffa2e43db7d36f5c51964f30c5ad95d98ce873f9a6fc6b7fb4f6dcf2915988ced56843d830 SHA512 8f07dcbb373ccdc2a2fa6166e683cc474745dd6ce3ab1c068bbf34227fd7f886ca220cd33901e2142287cf83d9ec3c076dfe70fad29c4df7de7392783838ecb0
+DIST xxhash-3.8.1.tar.gz 86223 BLAKE2B 9edee0dcc6374e0f3a89c8d51d44b0f9cc18770b638d2b127019eba425b5be2dcc2df66a03482403a6d76fe18b3dbf570cec76d45952fd1cb286fc27af4c4cb5 SHA512 dd834acfa80f8916fecd553b192bfaee03895a9ab0b2f812390f9f66b454560060d9f56c16b6a445b798539296ee7ec907ae099f109604b4b1fbdff5b308e890
+DIST xxhash-3.8.1.tar.gz.provenance 9553 BLAKE2B afa12824c3b7960bba72ad7631e4b52cd74eb4206d15c4a318d0fe4a13d957efa5a7e269562bb022329d57c2695e63e0ac2485e11bec21b86bbfd792f4be5902 SHA512 d1b8b53e9c1caebde83af9be375661e0e55e7bef2e366182412018b919ae1595a140293f625fd35f31485c5c8690c2c1c7c75aba830e174a4f524d0ab9d4ef1a
diff --git a/dev-python/xxhash/xxhash-3.8.1.ebuild b/dev-python/xxhash/xxhash-3.8.1.ebuild
new file mode 100644
index 000000000000..06f0885ea97d
--- /dev/null
+++ b/dev-python/xxhash/xxhash-3.8.1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYPI_VERIFY_REPO=https://github.com/ifduyue/python-xxhash
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python binding for the xxHash library"
+HOMEPAGE="
+ https://github.com/ifduyue/python-xxhash/
+ https://pypi.org/project/xxhash/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~sparc ~x86"
+
+DEPEND="
+ >=dev-libs/xxhash-0.8.0
+"
+RDEPEND="
+ ${DEPEND}
+"
+
+distutils_enable_tests unittest
+
+python_configure_all() {
+ export XXHASH_LINK_SO=1
+}
+
+python_test() {
+ cd tests || die
+ eunittest
+}
diff --git a/dev-python/yapsy/yapsy-1.12.2-r2.ebuild b/dev-python/yapsy/yapsy-1.12.2-r2.ebuild
index 55efc9b6b50a..4ef692844439 100644
--- a/dev-python/yapsy/yapsy-1.12.2-r2.ebuild
+++ b/dev-python/yapsy/yapsy-1.12.2-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8