summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.43.107.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.43.107.ebuild80
-rw-r--r--dev-python/cbor2/Manifest2
-rw-r--r--dev-python/cbor2/cbor2-6.1.5.ebuild74
-rw-r--r--dev-python/dbus-fast/Manifest1
-rw-r--r--dev-python/dbus-fast/dbus-fast-5.0.25.ebuild70
-rw-r--r--dev-python/fakeredis/Manifest2
-rw-r--r--dev-python/fakeredis/fakeredis-2.39.0.ebuild137
-rw-r--r--dev-python/filelock/Manifest2
-rw-r--r--dev-python/filelock/filelock-4.0.9.ebuild38
-rw-r--r--dev-python/google-auth-httplib2/Manifest2
-rw-r--r--dev-python/google-auth-httplib2/google-auth-httplib2-0.4.4.ebuild35
-rw-r--r--dev-python/liblore/Manifest2
-rw-r--r--dev-python/liblore/liblore-0.10.0.ebuild (renamed from dev-python/liblore/liblore-0.8.1.ebuild)2
-rw-r--r--dev-python/meson-python/Manifest1
-rw-r--r--dev-python/meson-python/meson-python-0.22.1.ebuild72
-rw-r--r--dev-python/mypy/Manifest1
-rw-r--r--dev-python/mypy/mypy-2.4.0.ebuild148
-rw-r--r--dev-python/pygraphviz/Manifest2
-rw-r--r--dev-python/pygraphviz/pygraphviz-2.0.3.ebuild63
-rw-r--r--dev-python/pytest-recording/Manifest1
-rw-r--r--dev-python/pytest-recording/pytest-recording-0.14.0.ebuild39
-rw-r--r--dev-python/python-dotenv/Manifest4
-rw-r--r--dev-python/python-dotenv/python-dotenv-1.2.4.ebuild (renamed from dev-python/python-dotenv/python-dotenv-1.2.2.ebuild)2
-rw-r--r--dev-python/setproctitle/Manifest1
-rw-r--r--dev-python/setproctitle/setproctitle-1.3.8.ebuild (renamed from dev-python/setproctitle/setproctitle-1.3.7.ebuild)4
-rw-r--r--dev-python/tempora/Manifest2
-rw-r--r--dev-python/tempora/tempora-5.13.0.ebuild (renamed from dev-python/tempora/tempora-5.9.0.ebuild)10
-rw-r--r--dev-python/tox/Manifest2
-rw-r--r--dev-python/tox/tox-4.64.7.ebuild84
-rw-r--r--dev-python/urwid/Manifest2
-rw-r--r--dev-python/urwid/urwid-4.2.4.ebuild43
-rw-r--r--dev-python/uv-build/Manifest1
-rw-r--r--dev-python/uv-build/uv-build-0.12.22.ebuild100
-rw-r--r--dev-python/uv/Manifest2
-rw-r--r--dev-python/uv/uv-0.12.22.ebuild151
-rw-r--r--dev-python/uv/uv-9999.ebuild3
-rw-r--r--dev-python/uvloop/Manifest2
-rw-r--r--dev-python/uvloop/uvloop-0.23.0.ebuild84
-rw-r--r--dev-python/virtualenv/Manifest2
-rw-r--r--dev-python/virtualenv/virtualenv-21.14.3.ebuild126
43 files changed, 1438 insertions, 16 deletions
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index c708a331fa37..a2a08795dcf4 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -2,6 +2,7 @@ DIST boto3-1.43.103.gh.tar.gz 1242075 BLAKE2B 907fe54732510a077b049526c5524b1d77
DIST boto3-1.43.104.gh.tar.gz 1244023 BLAKE2B 7534126599f77fcbb7c4223cb961d753491a24b3ad377cf41fc87a844e46f40c7d7e148747a3b60a137b1e768a42ca52500db77be0f30b3501b6da974d95b119 SHA512 8219aa7a87a7840c4b81ff063888b8cf6300e17474aff320e794a7d9128247b167ada9b68811813b355c370398bd7b41b698a4930836da8e29637a4c0a4833eb
DIST boto3-1.43.105.gh.tar.gz 1246106 BLAKE2B db3c814e94337fb5c1606dc2d6b553fdccb4247560887397cda324d0e975156ac56485cb5e96ff4d4a6140c56cb779be3b91920b522084972d68c78e1f89b7a3 SHA512 ae05d2b6510b48bfa8a294c8a077e7a43a7c47c8b7f331ce4db3c53ab79194a008ee15b8a7f1ce2febb0e362ff4afd251b1b40064f6e25ce900b16aa46b8916d
DIST boto3-1.43.106.gh.tar.gz 1247663 BLAKE2B 94e62a747d2594c2240e8f0e74ca33e11f627c0251fe2bb281811fb02d0780a56099ff1211e55c90802509e488f13ff1b605f4c517ff45267aac2a297197cb58 SHA512 919fd973d279c6620b60262abe3ed13799cd26232a4e0380664c3d0cbca73617a35d00036b7f76887fc22680c1e83e7f84d6ea63ac80843ad83abbcd82697c75
+DIST boto3-1.43.107.gh.tar.gz 1249178 BLAKE2B 22bc47915a435c0d16d55e297d4454a7782af6b6503ae814945147720615aca45e0061bfb2fa75ea351e00ff14ee13f084a20fa53038372c519d5c4953eb8936 SHA512 55c1b4addac94b5f1ccdcb688ef5fa2f18acb0de58f503159c047d32d1416a1e741c95384895157d422b70ebea371ebbc1efe5b0dc6085956bd911a861d34b53
DIST boto3-1.43.78.gh.tar.gz 1213393 BLAKE2B b3e4188ba53609873bf6613d5667792d24634d728dfe0e0588917ade93c4d6c9a5a28d2e46bd5ca314723604a9cab9a4fae7ca1e6f9e496cc29671bc68849d7e SHA512 c98ede06cf4934089ba4a62c4fb03da692a5f9e2a415728e9f51979e33942229d8f4cd6fa02ac229b360b63a930fd91890f2ed645d17011d4a42e236943fd780
DIST boto3-1.43.83.gh.tar.gz 1218064 BLAKE2B 0758e28dd9b086615b045e107aece2ef46bee541110e51fdcd231c60cac0452f4cdfec58ea4041757835c195cd2b8becb3c4e9fd24ad7bc306d90b16af082f63 SHA512 ed110edd551138c5d63ab7ead46a4c9ddb410dea1b5e642045102936af22c4208f357f79fc994434fc6a7df7c16aba99052508103bad7599f8cc558ae1c5f842
DIST boto3-1.43.89.gh.tar.gz 1225424 BLAKE2B 625bb37a542644c8fe37aab42a115bf8be2e36373d7f6149dcc7e150e327c75b334ef480897be1d4954809b233a47e02854d7b28b4a3904f0e5cdcea3f0440d7 SHA512 1c04fd6df819abbe60d551c6d706f7254fe6d6758e95fd53ec70d4dd892b6f7bf69981cb001fc6ca5bc5885f083718b80a4fd045b146e7f4add16a50ac3a9d38
diff --git a/dev-python/boto3/boto3-1.43.107.ebuild b/dev-python/boto3/boto3-1.43.107.ebuild
new file mode 100644
index 000000000000..93fbbe6dd59b
--- /dev/null
+++ b/dev-python/boto3/boto3-1.43.107.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 9d7910cdb987..80ba422db1ad 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -2,6 +2,7 @@ DIST botocore-1.43.103.gh.tar.gz 17299294 BLAKE2B d589d82cd6d0e1cb53280c606e0415
DIST botocore-1.43.104.gh.tar.gz 17309295 BLAKE2B c57dd3732e4970d0071aea6aa2587802ea62570d0ef51a0de450580e5c1bfa2f09597124cf59c342b6b7670c6b74bffa867154e4deed66fb633a18cff9582a00 SHA512 e00fc7568b208a32f8eb0ba301c121ff43eec522d8ee3719c1825d4609dc4f5be5131ad8160e02b908310f6566fa9897f40b70beb99bf9bc4c29a09b893585d5
DIST botocore-1.43.105.gh.tar.gz 17320228 BLAKE2B 1d4dc83a26343af7d5fa75cec3cc18f8a01cf8f7b155a90c02d889082627f71f47af143fdda3fb4b678c0d83d01ed7cd0d66075e873db0ec9f739771a72dc4c3 SHA512 9fdb623d22771689611be50bc40ddaa5ef4c1af0aa3c3cc7a12f98e379fe44077ce470c966e9ea2cb349d4af4ac4b0d4def63b9b1acb7dc20be98476cd32ad22
DIST botocore-1.43.106.gh.tar.gz 17330996 BLAKE2B 3ffd1037830711e44d5f71bffa40a70263d7b8fbf99865a7dfdeff16fefb179c28e30911ed9f542fc48d40a350912cb741f00f3db3b793431424476bf84aef6a SHA512 06fbfa4afcf52c999c36acd125562fadd821bceecbf65628ef7efb2afaf21c1bea6aa0dfea93c7876bb184e0312b14a752e484237afafcbf5fac8f21a8c83339
+DIST botocore-1.43.107.gh.tar.gz 17365768 BLAKE2B 85efbe0a1576e1c7c43b68f8f722c8b99d64ac7a29849735bda62a23fea0f7a7b1e5569797d7631d61d765a7fdcabf4cb5ee5ab16254df6e48fc5cee89efcc15 SHA512 b0024bb05f5ed1e00dbad26cedbc25f53ff3a4dc0bf7f1356ee7262445e450ef4f6c1696db54672943c1e903dcd06122ee50ffc3514fc99930c1c3b9afe0cbb5
DIST botocore-1.43.78.gh.tar.gz 17008224 BLAKE2B 137656d64f62025ca47f03c48ba84aa7eccae9dbc752c81f909c3c3f12dd843bb40173075fc7e255492385d8ea8824da08e5d3155bb5ff1dbfd62c858c0a057f SHA512 bd65c7fe451ef0b3bef21e25e557aa37748ca01f71e567b31b852ac356d323f1cfa6dd0e920eff7c52e0db879a34cf99eed6c1b841dfa6065e139362702f9d13
DIST botocore-1.43.83.gh.tar.gz 17038145 BLAKE2B f74b399b04f9b259e1a2f424719c4b80cc279627174ac96f9b79d85418ecc0442fbd27d7e79ccdf12526ac02489fde4254e360f216103f3cd5ff050b3cf1a838 SHA512 618c0ef0fc89879ee6900606e3378b2876901c4a63ede52529de12898a65e34fc41a8f0ad8ab682b7788626176f9b86904e257b63d88be9d58c53116918b1d12
DIST botocore-1.43.89.gh.tar.gz 17111395 BLAKE2B 25837125b5d9477b011c065594ffa1b49a2f5d0cf76e1c664aa5401d50dfe8dd9573d0ab3a60f739c796c32965a7dd7608e302a284bfcc97d9f7f4a8a2b698e3 SHA512 c9c0b7636fb7595d4ff3ee2ec7e1ef8ad3000e9e453ce6edb827a1152109fc2fb6b226bd08f27653fc1436444c39be6f160fa4f7c34eb50a7384988686933590
diff --git a/dev-python/botocore/botocore-1.43.107.ebuild b/dev-python/botocore/botocore-1.43.107.ebuild
new file mode 100644
index 000000000000..14ad5b2d1f27
--- /dev/null
+++ b/dev-python/botocore/botocore-1.43.107.ebuild
@@ -0,0 +1,80 @@
+# 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
+ )
+
+ # The test suite can eat up a lot of memory when running via xdist,
+ # and slow down some tiny tests. Let's just run a safe subset
+ # of tests known to be slow-ish in parallel, and the rest in series.
+ local parallel_tests=(
+ tests/functional/*/
+ tests/functional/test_event_alias.py
+ tests/functional/test_[cds-z]*.py
+ tests/unit/
+ )
+
+ epytest "${parallel_tests[@]}"
+
+ local EPYTEST_IGNORE=( "${parallel_tests[@]}" )
+ EPYTEST_XDIST= epytest tests/functional
+}
diff --git a/dev-python/cbor2/Manifest b/dev-python/cbor2/Manifest
index d1a979c01ff2..15f78bbdb959 100644
--- a/dev-python/cbor2/Manifest
+++ b/dev-python/cbor2/Manifest
@@ -2,6 +2,8 @@ DIST autocfg-1.5.0.crate 18729 BLAKE2B 27580e39b366c6fca02c9db09997b6415c409f120
DIST bigdecimal-0.4.10.crate 126514 BLAKE2B 3386e9df36307710a3076f267ce52cfc861d6b433fe65d0a1e7ab055f123af3689dc60b4b09761553dd53f05c295c72f7e8040428d04cfa09f958c747e31399a SHA512 706b7e33a2b375fc84ab6b617382145dd65e38e361498774493fad240a399e5a5e5f948604c831e9ca65eaa36df12ec7197c51fc80487680849129775d9256fc
DIST cbor2-6.1.4.tar.gz 90840 BLAKE2B 847f17577739b416ce576e4cee417e4c5d1d983bd44faeeac03dc4b5747519e7e3937911e9622a60ba9d833453c840b13364ca4a2b81f1ca74b0065caa7fd712 SHA512 f16de2df37b45864f2580a96a7edb632ce961c8f858780912497584641cbb3f5c9c1f0eba37d9c20439e6efc96074c6a87f5b4917bf66c2e61059ed5dfa8ae32
DIST cbor2-6.1.4.tar.gz.provenance 9661 BLAKE2B 6948293585a4a5d33c9f218db41a1a3ac9633dc282e051c788f1aec76deb625b0a6271387e9995d4fc140b5f22975265a4b34ad74ac781d46998e2787344fc84 SHA512 45c06eadee0c0ced0c97f2f0c2a74355bdd439adab11e288648e2e2a1049dc824b613d36234b57d11e128e8b656a25ccaebfa5139d7e122fb349e4011b00546c
+DIST cbor2-6.1.5.tar.gz 94232 BLAKE2B 91a03776258721220fc9b0083ab87873ce3aa0d33f701cc7fb57f8a8e8ea6211af1bbb1404fff134818848a7e9cd33ef98e67f0c96b57d23657de7e4de5e17f2 SHA512 b33b6f7e588f533a0d097bfcb25d9997d6e64e02e37d2079e9a902e7a3202513728b3db57f4bebb45396bdf39d6660f346978c8aab3307a5e1d2c1c41f6845d7
+DIST cbor2-6.1.5.tar.gz.provenance 9839 BLAKE2B 35f7c6968051c8240f0b1016060be300103879e09b88a837b3f341be13125cd91d62c607e3e1f3ff7f9f85290cd8cd16837afd3d8b2a7bb92f660f2d55ab34d7 SHA512 df755c4d3fdc159959c925a7e299eb7608c8a3e4146c6c4b0e7c09f5a737de36271ed711bc6ad802ca9789a708d0a624b4189653a770bea058ff874c79d095e2
DIST cfg-if-1.0.4.crate 9360 BLAKE2B beadbfb273ee97cbb6e3740891fbace57511399ad203459b66b397587d794677a9515cde4e9ec4320c3795518bf1551d72b9a889f8ac4b225168f493288b7c19 SHA512 176e04df7ba783b7143bb84397b777f5c5a1305c08a5c3a218d4a66830620be89ed68992ba27686165bcd3fb2f34b2daf80b2a1d4b481ecc267c988e84d28e9d
DIST crunchy-0.2.4.crate 3887 BLAKE2B f957597c82795eb10d43a6a98f7575e19b9484dcdf9fe35ac79ce406035d5d467021a0c563dcfe8f717e800b6bf532fcd72cc11be47e084405e16219b88e67b1 SHA512 72ecadb6c8558dcbf3cbc3a34bcefbf292e42999e7af6f59b9804e1233d87f6f65802b157f346a64cd7d2dc1a92564d5481211b081ba5ea170ecdb06dff9dd0b
DIST half-2.7.1.crate 61040 BLAKE2B bd78abf71b1b0ae219d2293f8edd5084fa630150016c95786d0af38a898d2775ff73ce848c4b2bbf02c2ea2dc8a610b2e045df78892d2b1de28981e8033625a7 SHA512 f47cc8bfb4c754a8585d4e8eca1a35039dc0879e87e59acb72e91bf2d33eca8c4f8dd17b3a56e8953bcba62cb08122120866e9d4b3ab9f008847d86a5f81716d
diff --git a/dev-python/cbor2/cbor2-6.1.5.ebuild b/dev-python/cbor2/cbor2-6.1.5.ebuild
new file mode 100644
index 000000000000..f3a39d12e5cd
--- /dev/null
+++ b/dev-python/cbor2/cbor2-6.1.5.ebuild
@@ -0,0 +1,74 @@
+# 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/agronholm/cbor2
+PYTHON_COMPAT=( python3_{13..14} )
+
+RUST_MIN_VER="1.85.0"
+CRATES="
+ autocfg@1.5.0
+ bigdecimal@0.4.10
+ cfg-if@1.0.4
+ crunchy@0.2.4
+ half@2.7.1
+ heck@0.5.0
+ libc@0.2.182
+ libm@0.2.16
+ num-bigint@0.4.6
+ num-integer@0.1.46
+ num-traits@0.2.19
+ once_cell@1.21.3
+ portable-atomic@1.13.1
+ proc-macro2@1.0.106
+ pyo3-build-config@0.28.2
+ 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.44
+ syn@2.0.117
+ target-lexicon@0.13.5
+ unicode-ident@1.0.24
+ zerocopy-derive@0.8.40
+ zerocopy@0.8.40
+"
+
+inherit cargo distutils-r1 pypi
+
+DESCRIPTION="CBOR (de)serializer with extensive tag support"
+HOMEPAGE="
+ https://github.com/agronholm/cbor2/
+ https://pypi.org/project/cbor2/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+"
+
+LICENSE="MIT"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0-with-LLVM-exceptions MIT Unicode-3.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+BDEPEND="
+ >=dev-python/setuptools-61[${PYTHON_USEDEP}]
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-scm-6.4[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=( hypothesis )
+distutils_enable_tests pytest
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cbor2/_cbor2.*.so"
+
+src_unpack() {
+ pypi_src_unpack
+ cargo_crate_unpack
+ cargo_gen_config
+}
diff --git a/dev-python/dbus-fast/Manifest b/dev-python/dbus-fast/Manifest
index 49d20b4c5671..2d4e84e52b3a 100644
--- a/dev-python/dbus-fast/Manifest
+++ b/dev-python/dbus-fast/Manifest
@@ -1 +1,2 @@
DIST dbus-fast-5.0.22.gh.tar.gz 262681 BLAKE2B 10a4f0a9917e528109d79cee97620f4a4f78755db7d36c755d29b82f2ae47a93a9a5c1ded936cdbe0156df1675c2914f4642f6bbc4d2c22bca75e0da8590eac9 SHA512 de1dbeeb21d81d2819dee632a7617cd72a05f15cab8ff35de343c25d3ff3dd2ad794a99d842abf4da8b9432bf933df98999b545c81de9ebeed4288c0ca2dd1bb
+DIST dbus-fast-5.0.25.gh.tar.gz 297422 BLAKE2B 96624f775e146b9721574253acccafab2c10c8cf2c69022950a97c24bec36de473c487cedce0ffb7d7791427b7526b8dc82f0d1c19dceab0dea62606be5a512c SHA512 fca3e29f8f8408fbb85b3d91870cb1c7c0c3ffbd7fab454aa663642d5a20e3241db46d4909d553874fb812d8eaa5bc00d8024b324ec2d2244ddd794d6bf43093
diff --git a/dev-python/dbus-fast/dbus-fast-5.0.25.ebuild b/dev-python/dbus-fast/dbus-fast-5.0.25.ebuild
new file mode 100644
index 000000000000..8f6c5d22767a
--- /dev/null
+++ b/dev-python/dbus-fast/dbus-fast-5.0.25.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=poetry-core
+# TODO: freethreading compatible
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 virtualx
+
+DESCRIPTION="A faster version of dbus-next"
+HOMEPAGE="
+ https://github.com/bluetooth-devices/dbus-fast/
+ https://pypi.org/project/dbus-fast/
+"
+SRC_URI="
+ https://github.com/Bluetooth-Devices/dbus-fast/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv"
+IUSE="+native-extensions"
+
+BDEPEND="
+ <dev-python/cython-3.3[${PYTHON_USEDEP}]
+ >=dev-python/cython-3[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-65.4.1[${PYTHON_USEDEP}]
+ test? (
+ dev-python/blockbuster[${PYTHON_USEDEP}]
+ >=dev-python/pycairo-1.21.0[${PYTHON_USEDEP}]
+ >=dev-python/pygobject-3.50[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{asyncio,timeout} )
+distutils_enable_tests pytest
+
+src_configure() {
+ export REQUIRE_CYTHON=1
+ if ! use native-extensions; then
+ export SKIP_CYTHON=1
+ fi
+}
+
+src_test() {
+ local dbus_params=(
+ $(dbus-daemon --session --print-address --fork --print-pid)
+ )
+ local -x DBUS_SESSION_BUS_ADDRESS=${dbus_params[0]}
+
+ virtx distutils-r1_src_test
+
+ kill "${dbus_params[1]}" || die
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # interface not found on this object: org.freedesktop.DBus.Debug.Stats
+ tests/client/test_signals.py::test_signals
+ )
+ local EPYTEST_IGNORE=(
+ tests/benchmarks
+ )
+
+ nonfatal epytest -o addopts= || die
+}
diff --git a/dev-python/fakeredis/Manifest b/dev-python/fakeredis/Manifest
index 4d561d52ef54..a73f6bf1eae2 100644
--- a/dev-python/fakeredis/Manifest
+++ b/dev-python/fakeredis/Manifest
@@ -4,3 +4,5 @@ DIST fakeredis-2.37.1.tar.gz 238182 BLAKE2B 48755cfc378a0e6199f902d58bee2b9d1e1b
DIST fakeredis-2.37.1.tar.gz.provenance 9609 BLAKE2B 0d8e0083615dd76de483c88fcbcb125b4dbd9d32c8d139e4cf3d9d6a9c965c88b937cb4b11cfc58f154da9ffd5eec943938176557792a7b65b2d99d667834b97 SHA512 168051305b87497761bcda3d1627c26d33f30a520de8ae2e8a50d2c3e87260a68c99833031d89195ded134661d94a5a08cbd00f125fcc2d1ba1e0b0eddb95dd8
DIST fakeredis-2.38.0.tar.gz 271116 BLAKE2B c16d21d194a2589363a753737fbbe0729ead7fd4f192610b5e170cbfde8dc09c5edf2534f74ca87ea022b58ac8c3f8fc94622934efeeb5dea4ae15b6eaf3ec08 SHA512 f8020da63b3ec516329b517f39fa1fa5224efb6ccebb9c1c6ffccc3906711d0d5dfc5bf73fb0ea7137481a345e3028ff1eb6c56b26e13437384d215771ffd20f
DIST fakeredis-2.38.0.tar.gz.provenance 9942 BLAKE2B e29e23b6ec2a64fcbbe8c078ea0b01aa728d81a63e6c4898971187184aa59bfb219c072d8933bc4ae64040db6d89b7ad334b4489b6da8e2d640c639200e33fa2 SHA512 18400e533c3471d087e8429a41d5cb664a023a5bc12276f0021aeb9616dd7c18523284716f9a89c93ac3f30019f6540bb3935c6a7073f43fd59d4644afb499ba
+DIST fakeredis-2.39.0.tar.gz 301722 BLAKE2B 4f0550eb73f0b67061cc96e6b44bca7920aaa423563ab0c588ed264259e340de20a417c4535f82dc09714d6902d9bc298e07145b27ac72c3642bb3b387c74d2e SHA512 b0b15942440a0926ebb40db4ffe49e80d35bddf59de6919d3c68b651ddab6ebce17f7310406bc2c9ee5fe912f875a6bf58430392652ec95c18cbc5c7f839b7ca
+DIST fakeredis-2.39.0.tar.gz.provenance 9797 BLAKE2B 07d67ab697bee1676aa436aaeb30e10628cc407823d1ce3f4a4c9187f1a9862050d720c6d2c70bacc082d4244c48968dae848ff615115f50ec8084f757ff0547 SHA512 b50b217469ca5fc2629e297823abfd2f83c398cbb4c4dda962c59286eb3af0c811d8cbadaf1d0291edf1f95916db96587a559a1279dda9bba6e95fabca7375d7
diff --git a/dev-python/fakeredis/fakeredis-2.39.0.ebuild b/dev-python/fakeredis/fakeredis-2.39.0.ebuild
new file mode 100644
index 000000000000..1cd41739c433
--- /dev/null
+++ b/dev-python/fakeredis/fakeredis-2.39.0.ebuild
@@ -0,0 +1,137 @@
+# Copyright 2020-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/cunla/fakeredis-py
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Fake implementation of redis API for testing purposes"
+HOMEPAGE="
+ https://github.com/cunla/fakeredis-py/
+ https://pypi.org/project/fakeredis/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/redis-4.3[${PYTHON_USEDEP}]
+ >=dev-python/sortedcontainers-2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-db/redis
+ dev-db/valkey
+ dev-python/packaging[${PYTHON_USEDEP}]
+ dev-python/valkey[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{asyncio,mock} )
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # do not install duplicate license
+ sed -i -e '\@fakeredis/LICENSE@d' pyproject.toml || die
+}
+
+wait_for_status() {
+ local expected=${1}
+
+ local i
+ for i in {1..50}; do
+ "${server}-cli" -p "${redis_port}" ping
+ [[ ${?} -eq ${expected} ]] && return
+ sleep 0.2
+ done
+
+ die "Timeout while waiting for ${1}-server to start/stop"
+}
+
+src_test() {
+ local server
+ for server in redis valkey; do
+ local redis_pid="${T}/${server}.pid"
+ local redis_port=6390
+ local redis_log="${T}/${server}.log"
+ local redis_db="${T}/${server}.db"
+
+ einfo "Running ${server} server tests"
+ "${EPREFIX}/usr/sbin/${server}-server" - <<- EOF || die "Unable to start ${server} server"
+ daemonize yes
+ pidfile ${redis_pid}
+ port ${redis_port}
+ logfile ${redis_log}
+ dir ${redis_db%/*}
+ dbfilename ${redis_db##*/}
+ bind 127.0.0.1
+ EOF
+
+ # wait for the server to start
+ wait_for_status 0
+
+ distutils-r1_src_test
+
+ "${server}-cli" -p "${redis_port}" shutdown || die "Unable to stop ${server} server"
+
+ # wait for the server to stop
+ wait_for_status 1
+ done
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # json ext
+ test/test_stack/test_json.py
+ test/test_stack/test_json_arr_commands.py
+ test/test_stack/test_json_fpha.py
+ # TODO
+ "test/test_mixins/test_pubsub_commands.py::test_published_message_to_shard_channel[Strict3]"
+ "test/test_mixins/test_pubsub_commands.py::test_pubsub_shardnumsub[Strict2]"
+ "test/test_mixins/test_pubsub_commands.py::test_pubsub_shardnumsub[Strict3]"
+ )
+
+ local EPYTEST_IGNORE=(
+ # these tests fail a lot...
+ test/test_hypothesis
+ test/test_hypothesis_joint.py
+ )
+
+ case ${server} in
+ redis)
+ EPYTEST_DESELECT+=(
+ "test/test_mixins/test_acl_commands.py::test_acl_cat[Strict2]"
+ "test/test_mixins/test_acl_commands.py::test_acl_cat[Strict3]"
+ "test/test_async/test_redis_only.py::test_async_lock[fake_resp2]"
+ "test/test_async/test_redis_only.py::test_async_lock[fake_resp3]"
+ "test/test_mixins/test_set_commands.py::test_smismember_wrong_type[FakeStrict2]"
+ "test/test_mixins/test_set_commands.py::test_smismember_wrong_type[FakeStrict3]"
+ "test/test_mixins/test_set_commands.py::test_smismember_wrong_type[Strict2]"
+ "test/test_mixins/test_set_commands.py::test_smismember_wrong_type[Strict3]"
+ )
+
+ # run fake tests only once
+ # TODO: figure out how to run tcp_server tests
+ # they fail if a server is running,
+ # and conftest fails if one isn't running
+ epytest -m "not real and not tcp_server"
+ ;;
+ valkey)
+ EPYTEST_DESELECT+=(
+ test/test_stack/test_vectorset.py
+ )
+ ;;
+ esac
+
+ # we can run "fake" tests in parallel, but "real" seem to share
+ # the same connection
+ EPYTEST_XDIST= epytest -m "real"
+}
diff --git a/dev-python/filelock/Manifest b/dev-python/filelock/Manifest
index 5b581fede525..18bf99969be6 100644
--- a/dev-python/filelock/Manifest
+++ b/dev-python/filelock/Manifest
@@ -14,3 +14,5 @@ DIST filelock-4.0.6.tar.gz 248237 BLAKE2B 08cab4cea0d7fe8ed9c1ebc2d362d50876bb06
DIST filelock-4.0.6.tar.gz.provenance 9602 BLAKE2B 9eb7759a37e631eee2ec6abfe52c8051f2c633a66a9448519be7ff6bbd32a12753f564e11c92b91f07bdfc46e074bb19853d8de737fa14fa0152b159e8e19cde SHA512 c926e1fd4389df1d7ba6245850ff5672afb7fab80dcfae41f0344a6c2243d7446e6107c864a3d1335229132bf07837445eac070496955d52450787d19b917229
DIST filelock-4.0.7.tar.gz 248489 BLAKE2B 02edcb6cbfe6921c566b116b02d7cbf583e5beb477be09df73f18c908843a792c6ef350fed976b633c12140a720a2b911a03c28c228f8b91f95fe75a98c4029e SHA512 3048d46914d55d93e184948e01d7cc9c2f1e073eaad08e835ae3caf49412cbfe75fb52031711d555a2816e449fed71dd981d58bf3a050aa775386308524dbbbd
DIST filelock-4.0.7.tar.gz.provenance 9708 BLAKE2B 46fb800821c4c5a0ea1a873c51881c09b46e87adea2fa9d1cf84227e4e9c1ef4a417cb1876f48876c7853afe3da58adf0e6f983ffc97ba4df2c741c46768c334 SHA512 558b7f8dc2e1cdfdf90e815d19fef5e9f34f6d50a18629ebde6b057a2af741ce3aaa07e14771bc9272b3a445de2110b0c6014526a0587d5e448b9a2bc56d51ab
+DIST filelock-4.0.9.tar.gz 251200 BLAKE2B 1190286a3407f940203b9beba059c744dd0e1c3f8ca9c46c9c6b12e3e33345d6d07b23186496b08c2ccc8d55842f4dc76af4e15bdae5e34306ac02f678fc8711 SHA512 60d3be5353ed6770622bc9069bb6ac6b0ce001abede030ed09882bf1aecf304b83e8e0dac9c92e4308ab1933246a9a44c331cd78ee7c13c545ceb6cf0fc43ecb
+DIST filelock-4.0.9.tar.gz.provenance 9790 BLAKE2B f047c65d86669e37d89d19e53e408d8f864b60b1a68802ffd44c44754a1760afffb1dc66763e98db3416358b3091d8ca2d7b88bdbf8e4f041f8411d499299501 SHA512 b31f2cb8d6dbd6058bae573a2a5f1338290f04cd4d6058a2f00c450f5a73e66bc0766f80b971736401bec399ebf8e6e3d75ca5e285e48e6511f54378c87fb8fd
diff --git a/dev-python/filelock/filelock-4.0.9.ebuild b/dev-python/filelock/filelock-4.0.9.ebuild
new file mode 100644
index 000000000000..51d73c002e05
--- /dev/null
+++ b/dev-python/filelock/filelock-4.0.9.ebuild
@@ -0,0 +1,38 @@
+# 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
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # TODO
+ tests/soft_rw/test_soft_rw_async.py::test_async_leaked_singleton_is_closed_on_teardown
+ tests/soft_rw/test_soft_rw_sync.py::test_leaked_acquired_singleton_is_closed_on_teardown
+)
diff --git a/dev-python/google-auth-httplib2/Manifest b/dev-python/google-auth-httplib2/Manifest
index da223283f015..5bc7dfca0954 100644
--- a/dev-python/google-auth-httplib2/Manifest
+++ b/dev-python/google-auth-httplib2/Manifest
@@ -2,3 +2,5 @@ DIST google_auth_httplib2-0.4.2.tar.gz 11211 BLAKE2B 3d2ea0ff05ef0bbb9be48abb4c5
DIST google_auth_httplib2-0.4.2.tar.gz.provenance 6007 BLAKE2B d1c73854cda328f12713bcf0aebd6bd10823f205f6afbdf2813f3bd14350ab55107e32095d595b82925e2fdb87c7290fb9a5a53a3829f58f8e1263edf955c43f SHA512 8429b1502c1cbef4d7c58677e0d31dcea204f39fd1d92440e0309a0e8e2b20f80e2fc29697477ebf538bc45ac2d72004570fcea0574668f3678b5a454db7a6e2
DIST google_auth_httplib2-0.4.3.tar.gz 11235 BLAKE2B feb3b0d9ceafdda005a507d8212938957c80e9798d8f4644c105976128fa4f92035fd93e9f78e051dabb6dc36f318aed559eb4047a003f5a71418307768621d4 SHA512 4fbf7d7ed65a576c63ca79f9d839da8e689c2433519bb07b62310d6abe5dcf24618e897f56f48ccea4037af639bb8b6d50b7eb67d694018cfed7ba37beb911eb
DIST google_auth_httplib2-0.4.3.tar.gz.provenance 6207 BLAKE2B f73b6a824d1e9542f4c989e87230bef38fa53cc315d03b4690e9241893a6ffcd862d1e98f8f222044b5d3eadd9a141fffb7914b0b030cf3e7935575ec357dc72 SHA512 2091c2e063b7c11fad1c4ab5e7505668c91fabf01cdb7fe88b419b680e6d14d4429f3910487da3c8b8394423fd6454ae6fc21dc577d97da6248eef96bc4f2b2a
+DIST google_auth_httplib2-0.4.4.tar.gz 11221 BLAKE2B c67e47e90575f33e981ef01a3e00014fd4cb2ab40a93040be7a1eeda50e64af2b85e22eb57b027c41abed03817dc851383a7d7e0ed889aa2ceb55947dcacff0c SHA512 bcf6a89182292d795223e090ca14c9cd969d3a09a7741d5221ef03704704c035d68325ea91a88afa00921a34a880fb1083d9115cc7513044bfc0bd611860a3a7
+DIST google_auth_httplib2-0.4.4.tar.gz.provenance 6101 BLAKE2B 5c146c76407991ba3b0e0f1a4f2426e422ba547618cc39c3dedca45a6c3c83aed0943d32c52ccb0aaf90f77324b37151d9a384dcff5d69823c0c39a37995064f SHA512 6be609815f51996564ad4d33f08cba777ce7864ffda7f3b8cb44e1ce799a17047afbb51ed611c7df0a4461713ae226d9103df89152573a69c2f322c0c0c969a5
diff --git a/dev-python/google-auth-httplib2/google-auth-httplib2-0.4.4.ebuild b/dev-python/google-auth-httplib2/google-auth-httplib2-0.4.4.ebuild
new file mode 100644
index 000000000000..d97f6ace98b2
--- /dev/null
+++ b/dev-python/google-auth-httplib2/google-auth-httplib2-0.4.4.ebuild
@@ -0,0 +1,35 @@
+# 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=gcp:google-cloud-sdk-py@oss-exit-gate-prod.iam.gserviceaccount.com
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="httplib2 Transport for Google Auth"
+HOMEPAGE="
+ https://pypi.org/project/google-auth-httplib2/
+ https://github.com/googleapis/google-auth-library-python-httplib2/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+RDEPEND="
+ <dev-python/httplib2-1[${PYTHON_USEDEP}]
+ >=dev-python/httplib2-0.19.0[${PYTHON_USEDEP}]
+ <dev-python/google-auth-3[${PYTHON_USEDEP}]
+ >=dev-python/google-auth-2.14.1[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/flask[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-localserver )
+distutils_enable_tests pytest
diff --git a/dev-python/liblore/Manifest b/dev-python/liblore/Manifest
index 5109459d0dcd..bc17da1419d3 100644
--- a/dev-python/liblore/Manifest
+++ b/dev-python/liblore/Manifest
@@ -1,2 +1,2 @@
-DIST liblore-0.8.1.tar.gz 66130 BLAKE2B d4e729d070a3293468fbe3d6ee4dd2328cdb44b6c323ff2212f188e33ff278d0f9071d11d3d112e3e4e68999f23901d3d1f52d4c87a76a54c13f41d3243f8754 SHA512 a8e240bd74a88a19660998af563459051d747591a4b35f0c596937bd5b2bf8848b41a4d8fd71b072535c8aa00ee7d84a1a27990cb7f947e4bff6e7e32db44192
+DIST liblore-0.10.0.tar.gz 215662 BLAKE2B b06d452bcf7e1676effe60044b4852f770ef7d85bdf16e45a0e1562a7df555b38f2c50c1be51607083dc267391d1f9a48ad3b85513e5214dc862c6c654221ec6 SHA512 49aabc3380011e7e4f95a52a518b3ad09e39291f8cb40ad932434cd863b075bffbcf3376cc866554efe7d5d9884abed1b517703a7eaf5891a23481cea30a73e1
DIST liblore-0.9.0.tar.gz 146052 BLAKE2B a386ddc307c5c83f907c60caa09ee1edd580a06bd1469482f0ba87a4f29176f8d182037b62777e1a9dea25c594c8264762be7d18e6536e86979fea8ec892063e SHA512 fd9be1dd96a292bd8a32afc6286b2e931c37b83738fa06878480707c983d8bc0f6c7c006231d9be3f0c112296bdb11a8ad206b229acd08320922313476185e84
diff --git a/dev-python/liblore/liblore-0.8.1.ebuild b/dev-python/liblore/liblore-0.10.0.ebuild
index 73c145ffd172..3922f3f9c1ef 100644
--- a/dev-python/liblore/liblore-0.8.1.ebuild
+++ b/dev-python/liblore/liblore-0.10.0.ebuild
@@ -17,7 +17,7 @@ SRC_URI="https://git.kernel.org/pub/scm/utils/${PN}/${PN}.git/snapshot/${P}.tar.
LICENSE="GPL-2+"
SLOT="0"
-KEYWORDS="~amd64"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
IUSE="auth test"
diff --git a/dev-python/meson-python/Manifest b/dev-python/meson-python/Manifest
index 6521919325e7..b0c8db49b1ce 100644
--- a/dev-python/meson-python/Manifest
+++ b/dev-python/meson-python/Manifest
@@ -2,3 +2,4 @@ DIST meson-python-0.20.0.gh.tar.gz 94677 BLAKE2B 9ab721d6c547f63a5235ac240f7eaa3
DIST meson-python-0.21.0.gh.tar.gz 105284 BLAKE2B d0521471e3e46f4f921b889eaa4e76658bd98fb898e919717f61b4d97124a70bc53a0373972b7c363d16a0adabc8653cfb69a877571443ab6216ff0507de44c8 SHA512 16e43402b7102eabf6832755eeeb1483fbd9cff34de3e469dbb7d3c74e850800cfef79e71e049b19005397c74c90d4de1bf36f1291f6af9dfd84c7fde0bb493b
DIST meson-python-0.21.1.gh.tar.gz 105984 BLAKE2B 70d2b30613fe4162a96ef953185ce0cd29219318a61dce14d2976a81b4774a90c1516f83a4a1506f073d545e48274c2a3c5e9551f99422fb407bdc49c20f6a79 SHA512 a51b23d86226a4cde82a0ab835a218ecf7594b242b0996d1f0562d39669c6b2a2d070548584678498a027506724026dda09847baef9b6abb0d7d1c0646d086d9
DIST meson-python-0.22.0.gh.tar.gz 112091 BLAKE2B 030100d7dc7d8622b39fea798ebc393a89d83fa6e27f311b525f92f1e0af2eba33ceffce371dbbe1b42820bbe640833dcc4cfccd2a814c4a95b54844f35fff6a SHA512 c5d5010c128b6f5630aad72afed0fb40b61a556dec9964f53646f8cb0ba5ea8fec8d20a78aaa58a8ca73a9992c815fc0b348ac2d9e4e20cb40cf542587149395
+DIST meson-python-0.22.1.gh.tar.gz 113440 BLAKE2B 111ff61f85ad8709e50c9feeb9fd4ed8b2b36fbbe836f2185f644f8ab8dc69276776d0fe5d3f518ca9caa9a7b0f0af0e3bd81f61f36b1426083f8fce006b1106 SHA512 1e785db5332af6dfa598fcb29910f6b216d3ec71971866a94a4c2001b2dfa95a32218496c5409d9aeb68f35d34e816e7b39ec1b6ec05a853115ee294a6fcc3fc
diff --git a/dev-python/meson-python/meson-python-0.22.1.ebuild b/dev-python/meson-python/meson-python-0.22.1.ebuild
new file mode 100644
index 000000000000..e16aee261d69
--- /dev/null
+++ b/dev-python/meson-python/meson-python-0.22.1.ebuild
@@ -0,0 +1,72 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="Meson PEP 517 Python build backend"
+HOMEPAGE="
+ https://pypi.org/project/meson-python/
+ https://github.com/mesonbuild/meson-python/
+"
+SRC_URI="
+ https://github.com/mesonbuild/meson-python/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+RDEPEND="
+ >=dev-python/pyproject-metadata-0.7.1[${PYTHON_USEDEP}]
+ >=dev-build/meson-0.63.0
+ !kernel_Darwin? ( dev-util/patchelf )
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ >=dev-python/cython-0.29.34
+ >=dev-python/packaging-23.1[${PYTHON_USEDEP}]
+ dev-vcs/git
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-mock )
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # Strip unnecessary Python-level dependency on meson, it is used
+ # as an external executable anyway.
+ sed -i -e '/meson >=/d' pyproject.toml || die
+}
+
+src_test() {
+ # required by tests/test_sdist.py::test_reproducible
+ git config --global user.email "test@example.com" || die
+ git config --global user.name "The Test Suite" || die
+ git init -q || die
+ git add -A || die
+ git commit -m init -q || die
+
+ distutils-r1_src_test
+}
+
+python_test() {
+ unset NINJA
+
+ local EPYTEST_DESELECT=()
+ if ! has_version "dev-build/meson[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/test_wheel.py::test_vendored_meson
+ )
+ fi
+
+ epytest
+}
diff --git a/dev-python/mypy/Manifest b/dev-python/mypy/Manifest
index c0fd14b5ee50..bcc1d5a960a8 100644
--- a/dev-python/mypy/Manifest
+++ b/dev-python/mypy/Manifest
@@ -1,3 +1,4 @@
DIST mypy-1.20.2.gh.tar.gz 3837137 BLAKE2B cc28ad8a145d27dd4f6f395496e44ed80859df634e89fe7d584975107534cf063db97817b5b94665e2b7629ca1fa67c75c0ed2978237f10d68606c33bc6e79d3 SHA512 55affb5d086b18ea16b5cc9fd4bb2fbc99987d444f2c0b6c64aaa9dd87a7790f99385b922eb6afbd5fe0c0ff0a5da9f69ab03bb3d8aac350aa5b2f85174fc130
DIST mypy-2.2.0.gh.tar.gz 3970949 BLAKE2B 975d59c31ad9127be7d490a706c9bceb06b9eb0c19e96ed9112f35626c0a615edd51f83ddd4c1a30188c58572b45768dfbdd3f3c65c670972de46f96c3427cd3 SHA512 6f8d3be955df2e3de1495c67931ec813f62c05b68969108a2ba1a978221924e860bc03b48eddf51f4efca1c8f684e2708637004f6ce457489ba6fdea31582fdb
DIST mypy-2.3.1.gh.tar.gz 4008667 BLAKE2B db4a2d68e4211421ef3bc308417d7aad7703507d6647793f29ef0b562e88549cfd7135249aebd279f59ca75ae0aea8cb4da39c0b8971cb0f555ce462d2e2a6df SHA512 2418744d3868aedd7fac232346cc5986eb064422168020d3428f95cbbf524e872f5977eb602d8b163a108bae7f4056545fb2ced4e1f1b5299d310e100b439922
+DIST mypy-2.4.0.gh.tar.gz 4083148 BLAKE2B b23ec1360600fca97db89b790b77fd13bdc235bb88161fe265f573b3ee7ec3f3a484bc49b1f025685f0038e8532b8c9d9671f0e8f449d874d4ab4d1f31fa56b8 SHA512 0ec5723da2461d263640317ae1dd924f68c3431d92e3837f2e8d8c453404c6bbd61e50e94245feeea84deb149dc673a57111ad3bbaa7f33d8c81e3235042e249
diff --git a/dev-python/mypy/mypy-2.4.0.ebuild b/dev-python/mypy/mypy-2.4.0.ebuild
new file mode 100644
index 000000000000..5127cec44177
--- /dev/null
+++ b/dev-python/mypy/mypy-2.4.0.ebuild
@@ -0,0 +1,148 @@
+# 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} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1 optfeature
+
+DESCRIPTION="Optional static typing for Python"
+HOMEPAGE="
+ https://www.mypy-lang.org/
+ https://github.com/python/mypy/
+ https://pypi.org/project/mypy/
+"
+SRC_URI="
+ https://github.com/python/mypy/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="native-extensions"
+
+# stubgen collides with this package: https://bugs.gentoo.org/585594
+RDEPEND="
+ !dev-util/stubgen
+ <dev-python/ast-serialize-1[${PYTHON_USEDEP}]
+ >=dev-python/ast-serialize-0.11.2[${PYTHON_USEDEP}]
+ >=dev-python/librt-0.16.0[${PYTHON_USEDEP}]
+ >=dev-python/mypy-extensions-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pathspec-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.16.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ native-extensions? (
+ ${RDEPEND}
+ dev-python/types-psutil[${PYTHON_USEDEP}]
+ dev-python/types-setuptools[${PYTHON_USEDEP}]
+ )
+ test? (
+ >=dev-python/attrs-18.0[${PYTHON_USEDEP}]
+ >=dev-python/filelock-3.3.0[${PYTHON_USEDEP}]
+ >=dev-python/lxml-4.9.1[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+# frustratingly, mypyc produces non-deterministic output. If ccache is enabled it will be a waste of time,
+# but simultaneously it might trash your system and fill up the cache with a giant wave of non-reproducible
+# test files (https://github.com/mypyc/mypyc/issues/1014)
+export CCACHE_DISABLE=1
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.14.0-no-werror.patch
+)
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # don't force pytest-xdist, in case user asked for EPYTEST_JOBS=1
+ sed -i -e '/addopts/s:-nauto::' pyproject.toml || die
+}
+
+python_compile() {
+ local -x MYPY_USE_MYPYC=$(usex native-extensions 1 0)
+ distutils-r1_python_compile
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # the majority of them require Internet (via pip)
+ mypy/test/testpep561.py
+ # known broken with assertions enabled
+ # https://github.com/python/mypy/issues/16043
+ mypyc/test/test_external.py::TestExternal::test_c_unit_test
+ mypyc/test/test_run.py::TestRun::run-async.test::testRunAsyncMiscTypesInEnvironment
+ mypyc/test/test_run.py::TestRun::run-bools.test::testBoolOps
+ mypyc/test/test_run.py::TestRun::run-classes.test::testDelException
+ mypyc/test/test_run.py::TestRun::run-classes.test::testDelForDictSubclass
+ mypyc/test/test_run.py::TestRun::run-classes.test::testSubclassDict
+ mypyc/test/test_run.py::TestRun::run-dicts.test::testDictIterationMethodsRun
+ mypyc/test/test_run.py::TestRun::run-dicts.test::testDictMethods
+ mypyc/test/test_run.py::TestRun::run-dunders.test::testDundersContainer
+ mypyc/test/test_run.py::TestRun::run-floats.test::testFloatOps
+ mypyc/test/test_run.py::TestRun::run-i64.test::testI64BasicOps
+ mypyc/test/test_run.py::TestRun::run-i64.test::testI64DefaultArgValues
+ mypyc/test/test_run.py::TestRun::run-i64.test::testI64ErrorValuesAndUndefined
+ mypyc/test/test_run.py::TestRun::run-i64.test::testI64GlueMethodsAndInheritance
+ mypyc/test/test_run.py::TestRun::run-librt-strings.test::testLibrtStrings_librt
+ mypyc/test/test_run.py::TestRun::run-vecs-i64.test::testVecI64BasicOps_librt
+ mypyc/test/test_run.py::TestRun::run-vecs-i64.test::testVecI64BasicOps_librt_experimental
+ mypyc/test/test_run.py::TestRun::run-vecs-misc.test::testVecMiscBasicOps_librt
+ mypyc/test/test_run.py::TestRun::run-vecs-nested.test::testVecNestedBasicOps_librt
+ mypyc/test/test_run.py::TestRun::run-vecs-t.test::testVecTBasicOps_librt
+ mypyc/test/test_run.py::TestRun::run-vecs-t.test::testVecTBasicOps_librt_experimental
+ mypyc/test/test_run.py::TestRunStrictDunderTyping::run-dunders.test::testDundersContainer_dunder_typing
+ mypyc/test/test_run.py::TestRunStrictDunderTyping::run-floats.test::testFloatOps_dunder_typing
+ # these assume that types-docutils are not installed
+ mypy/test/testpythoneval.py::PythonEvaluationSuite::pythoneval.test::testIgnoreImportIfNoPython3StubAvailable
+ mypy/test/testpythoneval.py::PythonEvaluationSuite::pythoneval.test::testNoPython3StubAvailable
+ # TODO
+ mypy/test/meta/test_parse_data.py
+ mypy/test/meta/test_update_data.py
+ # Unknown SIGBUS, bug #967850
+ mypyc/test/test_run.py::TestRun::run-classes.test::testBufferRoundTrip_native_libs
+ )
+
+ case ${EPYTHON} in
+ python3.1[45]*)
+ EPYTEST_DESELECT+=(
+ mypyc/test/test_run.py::TestRun::run-async.test::testRunAsyncRefCounting
+ mypyc/test/test_run.py::TestRun::run-tuples.test::testNamedTupleClassSyntax
+ )
+ ;;
+ esac
+
+ # Some mypy/test/testcmdline.py::PythonCmdlineSuite tests
+ # fail with high COLUMNS values
+ local -x COLUMNS=80
+
+ # The tests depend on having in-source compiled extensions if you want to
+ # test those compiled extensions. Various crucial test dependencies aren't
+ # installed. Even pyproject.toml is needed because that's where pytest args
+ # are in. Hack them into the build directory and delete them afterwards.
+ # See: https://github.com/python/mypy/issues/16143
+ local -x MYPY_TEST_PREFIX="${S}"
+ cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
+ cp -r "${S}"/{conftest.py,pyproject.toml} . || die
+
+ local failed=
+ nonfatal epytest || failed=1
+
+ rm -r conftest.py pyproject.toml .mypy_cache || die
+
+ [[ ${failed} ]] && die "epytest failed with ${EPYTHON}"
+}
+
+pkg_postinst() {
+ optfeature "dmypy status -v support for memory use" dev-python/psutil
+}
diff --git a/dev-python/pygraphviz/Manifest b/dev-python/pygraphviz/Manifest
index dfdd1a65a539..d97ff01affef 100644
--- a/dev-python/pygraphviz/Manifest
+++ b/dev-python/pygraphviz/Manifest
@@ -3,3 +3,5 @@ DIST pygraphviz-2.0.1.tar.gz 81998 BLAKE2B 3aa4ad0c331b745837021d13a07e77622f35e
DIST pygraphviz-2.0.1.tar.gz.provenance 9843 BLAKE2B d73ca166bb3eec28589d2592d806b393436dd2ec33d29d819344829191c716b480c33e1444863db6e9f089c5ec8684e2bc0819ed68f69ef343933faa6fd9ae99 SHA512 a7333e6002b78de6bf37ce0affeb63e97f565d5130daee9ea7402532e3f86c42323af2d00e398c9b15354469a6ba74ac635639ee7a923e9f23180878c514e8ee
DIST pygraphviz-2.0.2.tar.gz 82229 BLAKE2B 9c32c8a4a5f64321250a988daea5c8f5369f697f856521ac6fc454c6abd62b42a732cb30dc7918c3307122a09ca173eedeb5948aed913fccc55a99b10289e436 SHA512 4ab5b8ade4449f1d572f5c2e2ec00c8d74a5f0df9c6b482e5ed147544d00a2d2274e9a934d9592e119169f46bdfcf3b1a8f88fb8cc062643c27a91b07b68e88e
DIST pygraphviz-2.0.2.tar.gz.provenance 10225 BLAKE2B 06f08a01db8dcc1f94e5810862fc61422fd8eb3a2a6e80142f3e67297e9b2cea93a2728dbc6570a4436c612d84bcf354995251bbc18582a5d92221ffd836b4e9 SHA512 be0b620e5e0257420c861e3272429c993c4f04ebf5961520ef297d8f209ab320f7a5c567fd80a65f31e5b5b0a9d7456ab5d003c12221f7863b19f360d2145c5e
+DIST pygraphviz-2.0.3.tar.gz 82969 BLAKE2B 9b6da0d64b86997885de5a3eeb87175c91c1c5d8838d067c3c257bc1d1f1bcf3142adde5d8f553c6c40376641a597c41fb842fe14cae1538c62924343a29d13b SHA512 115c1d34f8a201e94b97baf2d10adda38fbf056c003a87ccb27fe729a57512031d57877c1e6a158f5238bb36b76570e7ada9e6f327ab316c87ba427452b3740e
+DIST pygraphviz-2.0.3.tar.gz.provenance 10221 BLAKE2B 4234a75c995cf795b7ca5b8ec8f8d5a9b357c346a4d0a1ef566156bc51f0be51b398e0b7c355faf38a63c3b9cc8ed162229063c32724fca92a6a2801febb1b40 SHA512 d93d646a659588e3926ce945327b4a201ff9a0f455e65deebe98102042ae708efc877b29a5546a37c47edd8bbf58dc0ea0bc880f1783dc35e7e5dd2d5d1203c9
diff --git a/dev-python/pygraphviz/pygraphviz-2.0.3.ebuild b/dev-python/pygraphviz/pygraphviz-2.0.3.ebuild
new file mode 100644
index 000000000000..b248bc96c7a5
--- /dev/null
+++ b/dev-python/pygraphviz/pygraphviz-2.0.3.ebuild
@@ -0,0 +1,63 @@
+# 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/pygraphviz/pygraphviz
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 flag-o-matic pypi toolchain-funcs
+
+DESCRIPTION="Python wrapper for the Graphviz Agraph data structure"
+HOMEPAGE="
+ https://pygraphviz.github.io/
+ https://github.com/pygraphviz/pygraphviz/
+ https://pypi.org/project/pygraphviz/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86 ~x64-macos"
+
+# Note: only C API of graphviz is used, PYTHON_USEDEP unnecessary.
+# [cairo] is actually pangocairo, needed for gvplugin_pango.
+DEPEND="
+ media-gfx/graphviz:=[cairo]
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ dev-lang/swig:0
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+src_configure() {
+ # set to a meaningless path, it hardcodes /lib anyway; at least it
+ # will stop it from adding a bunch of wrong RUNPATHs
+ export GRAPHVIZ_PREFIX=${T}
+
+ # upstream's solution to "not one of the random hardcoded paths" is
+ # literally "add a bunch of -I -L flags yourself"
+ append-cppflags $($(tc-getPKG_CONFIG) --cflags libcdt || die)
+ local libdir=$($(tc-getPKG_CONFIG) --variable=libdir libcdt || die)
+ # the build system will pass a bunch of "-l"s anyway
+ append-ldflags $($(tc-getPKG_CONFIG) --libs-only-L libcdt || die) \
+ -L"${libdir}/graphviz" -Wl,-rpath,"${libdir}/graphviz"
+}
+
+python_test() {
+ rm -rf pygraphviz || die
+ epytest --pyargs pygraphviz
+}
+
+python_install_all() {
+ dodoc -r examples
+ docompress -x /usr/share/doc/${PF}/examples
+
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/pytest-recording/Manifest b/dev-python/pytest-recording/Manifest
index 5dbcdfea62b5..526805007c42 100644
--- a/dev-python/pytest-recording/Manifest
+++ b/dev-python/pytest-recording/Manifest
@@ -1 +1,2 @@
DIST pytest_recording-0.13.4.tar.gz 26576 BLAKE2B edb64ed12dfe6d7d2709b43daf76626b7adc2d96b5980f81f38a358cc465bf7342e2b1ac78e6418b4bd4ee20d17f50b83f83568fb8c6c2225fb7337aeb3bd996 SHA512 b4bf67b60272945c64ad11d6fcfc0184cd4e8a336131e34cf9581e0a214532013c8882ebf88651d89cc91481456a7419549229d234e0e38e8025bba563dafffc
+DIST pytest_recording-0.14.0.tar.gz 27084 BLAKE2B c8d326ba3025a878ef1a95bd3af8aa3b22d4351361cfac87830532a117cea45d041b8245cf55261e5f5210fdb1a5c136640571f6ba6e35af8f91af189ef0f0d3 SHA512 43618b8bc887c95f36d234dd44129ec6c2cf21854f164fe4873d6125456bbdbcb19c0fc0d2dfcf93403c156e6cb9ddade1736ea0293dc6d1bd4b6fd9a8921cc0
diff --git a/dev-python/pytest-recording/pytest-recording-0.14.0.ebuild b/dev-python/pytest-recording/pytest-recording-0.14.0.ebuild
new file mode 100644
index 000000000000..58d714850451
--- /dev/null
+++ b/dev-python/pytest-recording/pytest-recording-0.14.0.ebuild
@@ -0,0 +1,39 @@
+# Copyright 2023-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 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 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/pytest-3.5.0[${PYTHON_USEDEP}]
+ >=dev-python/vcrpy-2.0.1[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/requests[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( "${PN}" pytest-{httpbin,mock} )
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
+distutils_enable_tests pytest
+
+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-dotenv/Manifest b/dev-python/python-dotenv/Manifest
index 7e332a9a28e9..16628e581a4b 100644
--- a/dev-python/python-dotenv/Manifest
+++ b/dev-python/python-dotenv/Manifest
@@ -1,4 +1,4 @@
-DIST python_dotenv-1.2.2.tar.gz 50135 BLAKE2B 3d920de9a24370b988ccff6538dd8fb751db953b627e43fc9c8226eeab412edeb5e836d2634e411413f397736f42cdea8d7effbc3d96006548eceb4815d2166f SHA512 2bd70a739dd76d95c30d8272e80e2e168cd41ed1f367da73e044bbe40bd93f5ee3569ece3d050c130c06dfcc9865d7acdb24ca83243868b551e03289821cb2a1
-DIST python_dotenv-1.2.2.tar.gz.provenance 9568 BLAKE2B 4b5a52cb1b096f8344efbbb897286855f546ae88668f28cfe3959847a2d2fcffc3bfd8cf404bd339deb4d67f64b495c341e629d0c9d23ac1f2af0b8af8537745 SHA512 462ad4c29bda0396d2d2ee2da39badedcb89603d2d1efb0fb518ba47810aa8804d64389f21da299413405e159dd736459a817043fb927ff6bac048220d9394cc
DIST python_dotenv-1.2.3.tar.gz 58945 BLAKE2B 8cfbc7fe1893168cf0f720c8228eb6e7f39f2ec5be7c64a2ebd25e121335e3aaa83842851011bba3fe14f1a8a3222b8c2ae78432540420d80e36785a95566c9d SHA512 a90a9471f3a1e28300ee86ca29f8e94dbb881144353cbe5a97a8378bf73fd86f26ecf472a1052a94b503af5d7ebaf70c159063a75ea19510d32c6c2861e62ec4
DIST python_dotenv-1.2.3.tar.gz.provenance 9950 BLAKE2B 70ce4054a14a1e2179551e6ae4ce96d70b5cb3cdbdeca190695a960216d58fdcc7938bff74ae13fc2020d4e759f6e4c7723c66d051eb074470bafebe4404d003 SHA512 23bb92bba9a56f8e0951d0df121d13cbc0ee9cc1921338eff6255da3c9cb6054813d54c6310c129636bc12b1a351ab58f462159ce84e72865c63188079cc8aa6
+DIST python_dotenv-1.2.4.tar.gz 60824 BLAKE2B 33c045852d683b2e447aa0e46bbfbea6d299cd36fcab9bb0cf4d255057b5d27a1e589f40d356ba5dcaedfc05438de55da113dca61f93e1f90a314e7297eeb746 SHA512 127b51918ca91dcac48caf3421246a5915af71f98a6fedde0269c8f717f4eb815e804f0a4b4adc191560553eda74459452b6079cbe95c06eb0b4080564541971
+DIST python_dotenv-1.2.4.tar.gz.provenance 10091 BLAKE2B 295e9beb99073faf748200938d818f3f6bbf8cee5d041f01e3b813e138ecc1cb52c06e429b19f7dafb8859464d17207ed8f1907fd4ea930e6bbe3a366ceebd54 SHA512 dfb8eb3a62c85a6de1fdf106747fadcf4960b18a563f89115d4f8fda179b6cf584b56057798e7a9e958ca23ae97fe834c2293da158dfc99aa38da5e1aaf96ae8
diff --git a/dev-python/python-dotenv/python-dotenv-1.2.2.ebuild b/dev-python/python-dotenv/python-dotenv-1.2.4.ebuild
index b530695a99bf..bc110a6e2b6a 100644
--- a/dev-python/python-dotenv/python-dotenv-1.2.2.ebuild
+++ b/dev-python/python-dotenv/python-dotenv-1.2.4.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
BDEPEND="
test? (
diff --git a/dev-python/setproctitle/Manifest b/dev-python/setproctitle/Manifest
index 8d1d2630208c..7d57791bc52a 100644
--- a/dev-python/setproctitle/Manifest
+++ b/dev-python/setproctitle/Manifest
@@ -1 +1,2 @@
DIST setproctitle-1.3.7.tar.gz 27002 BLAKE2B 4c750e871ab1e68ee1cfe2c575b99b94dd3d3bd99e6ee1c934c7b9b23f73bee09dcd207d665eeec79182a25295c4ade1e15107808fce911433be4d2c26017731 SHA512 b801a6291bf0b29c3b73f0fa3ce5e34949626abdd45a785c8806be582383525a576876c0b37f41fd6fa809256bd70cfcb64ba6a3609bb83a5387b4a4cf0a191d
+DIST setproctitle-1.3.8.tar.gz 27214 BLAKE2B fe5810fdc63f8350533795bcd0d1cede8844d5103c0e24a5f7b3187585be0a00352ff273dd31305b09f1416ecbefd3374402d86a0a2c4c621a1a1bbf6a1f008a SHA512 5f99cd1560eab83d675c65b80474292925c7b0ef5a9e41ade4533e93d41ca2bdf903dde963cf9ae4845cba28d49c572dea02863769c31732d76c6149094336c8
diff --git a/dev-python/setproctitle/setproctitle-1.3.7.ebuild b/dev-python/setproctitle/setproctitle-1.3.8.ebuild
index 60cf14f3a04f..d0e21a0b25f5 100644
--- a/dev-python/setproctitle/setproctitle-1.3.7.ebuild
+++ b/dev-python/setproctitle/setproctitle-1.3.8.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,7 +19,7 @@ HOMEPAGE="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos ~x64-solaris"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos ~x64-solaris"
EPYTEST_PLUGINS=()
distutils_enable_tests pytest
diff --git a/dev-python/tempora/Manifest b/dev-python/tempora/Manifest
index 0bf2f6b70667..5d423f0e75db 100644
--- a/dev-python/tempora/Manifest
+++ b/dev-python/tempora/Manifest
@@ -1,2 +1,2 @@
DIST tempora-5.12.0.tar.gz 20481 BLAKE2B f35bfc71a1b78e83b7b3e7cf888a84f02be96f113a56c7457ce3f8f29709abd251b292400d24c918bed57b44bbf3682ad420b99140d05b91b05b1cdbec8778bf SHA512 3dc04ca741a86aeae6c0b6d465bf95bcfe41b7fc1c328fd1ad00df9af567d93dcf81b1a8f3953f043739e6cbaef7c9660a14c899db16a3ed8c636a69d01dca55
-DIST tempora-5.9.0.tar.gz 24490 BLAKE2B 94107a16e7f56188b156e305cf4ca57574684eae92ab4d97cdc4ca8b610f8e44d9fc589af2fcb3a0f17a4188739e90a9112dd8d1fbe6d00bd8c3b6adf3263c61 SHA512 f515a35345968b765d7bd61d6828d9e1761d2b9ab8915015804597e9f4204942da3801de01e80ab1ed93be604bd4011f650a8bd970f09c14abad3e4af8e586eb
+DIST tempora-5.13.0.tar.gz 17139 BLAKE2B 3564f99c76dde6097e4bba5b1b60b0fd7dd74bba41d3c8a00d9510286147b05d74b9b678823dbe0d04f67bbac56422570c15467c082551a083357bd0b37680b4 SHA512 7e115a665e7bb9cd4b5951e25fe25e7126ed6693835e441de9991cf2e3cdd7607da9d143bf4a468931b5cbe2d8823b99ee763e7179c1a0497ed2c1a7a22c5704
diff --git a/dev-python/tempora/tempora-5.9.0.ebuild b/dev-python/tempora/tempora-5.13.0.ebuild
index a1bfb5c554f7..f27d2d0d4f01 100644
--- a/dev-python/tempora/tempora-5.9.0.ebuild
+++ b/dev-python/tempora/tempora-5.13.0.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_USE_PEP517=flit-core
PYTHON_COMPAT=( python3_{13..14} )
inherit distutils-r1 pypi
@@ -16,18 +16,14 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-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"
RDEPEND="
+ >=dev-python/jaraco-collections-5.2.1[${PYTHON_USEDEP}]
dev-python/jaraco-context[${PYTHON_USEDEP}]
>=dev-python/jaraco-functools-4.2[${PYTHON_USEDEP}]
- dev-python/more-itertools[${PYTHON_USEDEP}]
- >=dev-python/jaraco-collections-5.2.1[${PYTHON_USEDEP}]
dev-python/python-dateutil[${PYTHON_USEDEP}]
"
-BDEPEND="
- dev-python/setuptools-scm[${PYTHON_USEDEP}]
-"
EPYTEST_PLUGINS=( pytest-freezer )
distutils_enable_tests pytest
diff --git a/dev-python/tox/Manifest b/dev-python/tox/Manifest
index 75841d993d12..84913b993dba 100644
--- a/dev-python/tox/Manifest
+++ b/dev-python/tox/Manifest
@@ -12,3 +12,5 @@ DIST tox-4.64.4.tar.gz 317372 BLAKE2B 45c95ee3a8189b7a629e9b4d1155728a7b1c12077c
DIST tox-4.64.4.tar.gz.provenance 9673 BLAKE2B f5bdb0ee2ac5a4ad9bee6494c78e5fe3d91a0ba2486d2520a266b56ab29eae8cabe2c9b222aeecb359a3deac080188d37f34fc0f9180be5a89556dfa4c59bd75 SHA512 b50d6ced7c19203ac4eefe103afa3b39b5d81ee1da0eff23c515519c0266f96608d358debc398ddf129352e99cfa785851715f7f5b5bc73944eb1b16882c8d0d
DIST tox-4.64.5.tar.gz 317611 BLAKE2B ca76dd95b61dc3b2751864cbe8d1ef459c95014b4c0444fd67bb4154e46247e9f5aa6e0c9200dafb24c1e7975cdd9c8688aa1da498ec10eaf95611022ccc1223 SHA512 32cb4fd32af21ef509038d4ecd35dddd1bf32811fd395acc260217ff63cb23c01da2140469ae491230729e412aa583c23d88133d13e3ad336b66199436668dd7
DIST tox-4.64.5.tar.gz.provenance 9673 BLAKE2B a7db8cdbf82b9fc7de67002324ce47aaa617bc058cdb09213bed5dac8a8fa44fb50164413cbaae84e2f2c770c37b10841cd320270df3bcc9a57ec3eb8676a5b2 SHA512 25e698702dbf27225de2fe0a36d67f6e8ce042834a54a3ba94b6267bc51ca53033d621f41b830f5c60ace6ec12ddc167f332d011089db8e1812ba2f826e6021f
+DIST tox-4.64.7.tar.gz 321984 BLAKE2B 3ae079332becf523ce497acdf87a0a04e73143ee7f478a7e5f2c0506e799a4238a6abb670abbf8500fe82f1a53578cf5d4c235334ecac4b0616866602ebb570f SHA512 ce14eee284a76d0f53b4fe0bf80017b986b36d6830ee15316304d6a31a944e8f54886e8abc93bc5fa26774186b9d8181b0cf217d81e151b8eaf9098590799635
+DIST tox-4.64.7.tar.gz.provenance 9497 BLAKE2B c098d409abcdd43cc992e0578ae51832c0a289620ac7fb8790240e0df76dccebdf5acfde6514097c120fb77d829e83ad25a8a8ad6a47e04456515ea03cd2f193 SHA512 468d0a14daac3a5ae9921328594917740277712f949d3b4de1c8bf6080d1b4906a400db1ee621af70730d4410547da82a55264d0f7d8b7549f5ccf66383f206d
diff --git a/dev-python/tox/tox-4.64.7.ebuild b/dev-python/tox/tox-4.64.7.ebuild
new file mode 100644
index 000000000000..9d80c8ee22b8
--- /dev/null
+++ b/dev-python/tox/tox-4.64.7.ebuild
@@ -0,0 +1,84 @@
+# 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/tox-dev/tox
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="virtualenv-based automation of test activities"
+HOMEPAGE="
+ https://tox.readthedocs.io/
+ https://github.com/tox-dev/tox/
+ https://pypi.org/project/tox/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~m68k ~ppc ~ppc64 ~riscv ~s390 ~x86"
+
+RDEPEND="
+ dev-python/cachetools[${PYTHON_USEDEP}]
+ dev-python/colorama[${PYTHON_USEDEP}]
+ dev-python/filelock[${PYTHON_USEDEP}]
+ dev-python/packaging[${PYTHON_USEDEP}]
+ dev-python/platformdirs[${PYTHON_USEDEP}]
+ dev-python/pluggy[${PYTHON_USEDEP}]
+ dev-python/pyproject-api[${PYTHON_USEDEP}]
+ dev-python/python-discovery[${PYTHON_USEDEP}]
+ dev-python/tomli-w[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ >=dev-python/typing-extensions-4.15[${PYTHON_USEDEP}]
+ ' 3.12)
+"
+BDEPEND="
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ dev-python/argcomplete[${PYTHON_USEDEP}]
+ dev-python/build[${PYTHON_USEDEP}]
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ dev-python/re-assert[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{mock,rerunfailures,timeout,xdist} time-machine )
+EPYTEST_RERUNS=3
+# upstream timeouts are quite short
+: ${EPYTEST_TIMEOUT:=180}
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ # upstream lower bounds are meaningless
+ sed -i -e 's:>=[0-9.]*::' pyproject.toml || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ # devpi_process is not packaged, and has lots of dependencies
+ cat > "${T}"/devpi_process.py <<-EOF || die
+ def IndexServer(*args, **kwargs): raise NotImplementedError()
+ EOF
+
+ local -x PYTHONPATH=${T}:${PYTHONPATH}
+ local EPYTEST_DESELECT=(
+ # Internet
+ tests/tox_env/python/virtual_env/package/test_package_cmd_builder.py::test_build_wheel_external
+ tests/tox_env/python/virtual_env/package/test_package_cmd_builder.py::test_run_installpkg_targz
+ tests/tox_env/python/virtual_env/package/test_package_pyproject.py::test_pyproject_installpkg_pep517_envs
+ # require tombi
+ tests/session/cmd/test_schema.py::test_schema_tombi_lint
+ )
+ local EPYTEST_IGNORE=(
+ # requires devpi*
+ tests/test_provision.py
+ )
+
+ epytest -o addopts=
+}
diff --git a/dev-python/urwid/Manifest b/dev-python/urwid/Manifest
index ca716cc2ec2a..2b50941eb0a0 100644
--- a/dev-python/urwid/Manifest
+++ b/dev-python/urwid/Manifest
@@ -18,3 +18,5 @@ DIST urwid-4.2.1.tar.gz 345151 BLAKE2B eda9c52f585ee6653e920b10a73be85450583d402
DIST urwid-4.2.1.tar.gz.provenance 9573 BLAKE2B 3f84c403f58a15dca5b36fee0e838a2cb345380e156cc8314d1fa585783d240c3d559f4529e0ca6667c687f3895c7291de38131900b3690c23cb13069170f208 SHA512 9df5ae21b1a803bd3d765c9adab946721431072d18d75b7190620efe4904f73d1b6d6c340aa631cb3f9c14724c01e4d5f500a4ced68997cd4a2208d7c68ad0e2
DIST urwid-4.2.3.tar.gz 346125 BLAKE2B 61535dd9f35753cbf2342806ef5151afa61b971bc4071aa1a20253156d523b139960ac1dca40394535c3815af3989310de256eb96fbc1da2411df44d19d122b5 SHA512 132adcdbccbfe1699a60ca9ef9218c1776926b6da2004863e73c29a6173f41fa3322ad74b29bf49b97a0edb3db52e81ee5ba2d2ee8b97d3276e8f78f39b4b2d5
DIST urwid-4.2.3.tar.gz.provenance 9530 BLAKE2B 2b6b607f9bdaecf66a6ab2c575fbacbe2bb8f81f4bddc3dbc54dad236ee27384d98befb6d04fb474f40279a632cec1c3fbf57d9c3a9b0a1ad9bf7e957d954abd SHA512 a786d80207f7f80dd36cc4417479e51dacbcc4f97ed0e6377e885b1cc6e30ed7d5001bf9d6a1f94771851bfaf16c323c484736110cd86145d39d9716ded5521a
+DIST urwid-4.2.4.tar.gz 346523 BLAKE2B 8dd4b36130a49d24208848b443db97b23c120753835854fd9d6851328203e3d4a67bfbf85cbb1ff4c105e9bb785f3596a9e53cbf08752447d8ade2ff14c391b8 SHA512 9c434f870d2ebc3aa92a76fd78c054751dbac34fedfbc3230676fd94b539ae58e01570e679170fa5eb518c3bc1e147198372080e4e9a015f23cc0a98da33af85
+DIST urwid-4.2.4.tar.gz.provenance 9718 BLAKE2B 50ad796a7774394bb3039cfbebf330a3065b75bf10f545f487a5a1844b4c13c484fef48209751ddaf763775f9fc99b42ba176508fcb2564c3fd05c61ecc74b11 SHA512 d1dccf4fc0cc740a5dfe3b6ed3ddb3f0125affe96967262a6ae037bfe435394e7d8b5296502b841604f41580357492c0278492fdad47b236e5053f97a2094f1b
diff --git a/dev-python/urwid/urwid-4.2.4.ebuild b/dev-python/urwid/urwid-4.2.4.ebuild
new file mode 100644
index 000000000000..5b61181891fe
--- /dev/null
+++ b/dev-python/urwid/urwid-4.2.4.ebuild
@@ -0,0 +1,43 @@
+# 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/urwid/urwid
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ncurses"
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Curses-based user interface library for Python"
+HOMEPAGE="
+ https://urwid.org/
+ https://pypi.org/project/urwid/
+ https://github.com/urwid/urwid/
+"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+ >=dev-python/wcwidth-0.4[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ sed -i -e 's:--cov --cov-report=term::' pyproject.toml || die
+}
+
+pkg_postinst() {
+ optfeature "Trio event loop" "dev-python/trio"
+}
diff --git a/dev-python/uv-build/Manifest b/dev-python/uv-build/Manifest
index 715a785d6cc7..dc959f1c4ba3 100644
--- a/dev-python/uv-build/Manifest
+++ b/dev-python/uv-build/Manifest
@@ -10,6 +10,7 @@ DIST uv_build-0.12.18.tar.gz 435289 BLAKE2B 3324730347edfc217d158d44583aea65d110
DIST uv_build-0.12.19.tar.gz 435379 BLAKE2B 4ded7941c9277d571757d9f49fcb124c931297bceeb9c8be168fb6a2e2bc28276d74fc377f06713058b8544d90060b4e3c6231add59687e7d0b2b0fb737e0fb9 SHA512 0a6909be77ba66d48d7b57aa6929c0448c50c9289804432c4aad058d58ea8d10a7f0ad5e1bacacde59e7d6d16758925dac3b52afb13fea3e08d9439612b2cc00
DIST uv_build-0.12.20.tar.gz 435906 BLAKE2B 80a5998394d44428d2f04e4c62e1f8269b836fe2addc817fb0b5b0a2f483a748e9b66631c6662ba4396792fffa763c24f72d3037f84863933e70805dd1f456e5 SHA512 0af155b2eabe86a8607914c12a76e52d90591171a9ee06735e1471020f12ec4ff6283abc6cf7bc4d908f8dbb5aa75b5b060d53fc8e5849b001271e9a9f70346b
DIST uv_build-0.12.21.tar.gz 436851 BLAKE2B 64d4d3f12d695f173880671e4f31abdf990be03b6cf043c10cd5bb29fd7cd3b2cfb4d4055775fa79ece295cdcfcd15de93fe7afe3840cc0c924f3c24447fb0ed SHA512 e18a9da3277bbd8c4ed74be39f6f6c5fe10d63f9bd4425a00421f1900d7a21b5cb2109391b019a1f4ee04e9f65d3aca0e9b0864d0e2fb6b55447a933be9fef48
+DIST uv_build-0.12.22.tar.gz 437196 BLAKE2B ba258f5685cd32209eca5d57da01883c5d6b0eee138990c1421a05d65802e0b5fec4e05403b00527820ad90ab6f33885b2b1811f6f7cfc859622bc7193e3ece7 SHA512 eccb3eeae3409caa2b0070e9c99db8d8c46bd238b1459ba5ad292222cff8d36903f803bc7fbdb524cff3944438fc7cd2d6400ac5e09327ed311ae20489f4b508
DIST uv_build-0.12.3.tar.gz 414444 BLAKE2B f226c1c2bf0b2af538f66095e20c02ad1933afdee62a07eff5f1135692bab47e286f67e7a8f5882e98c61fbb6bf831a85dd56a2d5af2bee6d62d8857a59e56bc SHA512 90d9af3e1a1ff1d7dda21fa38c0ac2d94536e73697ddabb408fb38e2d381498b2401007af0ab31c39cbf3b632aeca2991b3a66d7108e1c5eb7294b3fba8fe107
DIST uv_build-0.12.7.tar.gz 418759 BLAKE2B 94aa33b2644f849a686d80d7f7d365ca8433615d93f27209fca5b21747363cd349d11e887d090420102f06a49977ce963b8f19c24a4280bf82a09943ba08885b SHA512 135f845b3ee6d1925f740917f83f94ec1a7e95aab5ed2db0aa70516c712ab0a143a0e427d3c172fac0bb1fabaa9103718bb2a26c31c9a287e3af65ac0175a245
DIST uv_build-0.12.9.tar.gz 423446 BLAKE2B 8f32f7527633f5853a11a0f798a2aa075f9e96c2b34144f986a639dbd042bac7c5e33853287ef43273352a3ee84da852062c42daead1f188281295b635694177 SHA512 3aa6ea5b4e60218e7cbc3c5ed8ff7fbeeace36eb0d2c75627fb7a0ce7c060e8d6405378e9713f7164319cce55dc96b1a335ccb3032cfc7e9e60e99862295e79e
diff --git a/dev-python/uv-build/uv-build-0.12.22.ebuild b/dev-python/uv-build/uv-build-0.12.22.ebuild
new file mode 100644
index 000000000000..65d94f2051ae
--- /dev/null
+++ b/dev-python/uv-build/uv-build-0.12.22.ebuild
@@ -0,0 +1,100 @@
+# 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}/pyproject.toml
+uv_build-${PV}/pyproject.toml.orig
+uv_build-${PV}/
+uv_build-${PV}/README.md
+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 45455dce2ebe..deb00aa20408 100644
--- a/dev-python/uv/Manifest
+++ b/dev-python/uv/Manifest
@@ -22,6 +22,8 @@ DIST uv-0.12.20-crates.tar.xz 44005552 BLAKE2B 15c707de27a4481afd3ff3df15c35363f
DIST uv-0.12.20.gh.tar.gz 8759776 BLAKE2B 420f46145c95c998f34b78888af40f0c90eb398bc49dfc67ab8f879791bf75b4298eebd21c86f6bdc14c4a4e36124bac2a96b1eb637f3a9349e26f20502cfe25 SHA512 2e00c5f0a74b8ee0737d50f53dccb5f15d17e8b061969e518f302525f6fc5afe9fcb43be17a18f2181ca236abeee56a858f9c9604651719b61d4c963fd0079d9
DIST uv-0.12.21-crates.tar.xz 44007208 BLAKE2B 766a66fd6c83249f54559fe32fe010b2e42092f5855b9e5b62e64e39b485569c0a71194b524b9d65c8383545daac137af23a0986391b3727fc26b8ec4d187824 SHA512 71372e3bec222d7537391c06f2f335b5822dabb4e1292c1a67728516cf3d7a47c3273c791990acb446ed206e20dc06012c0fbe3b5a5fe56484dba37d54bb77f3
DIST uv-0.12.21.gh.tar.gz 8769125 BLAKE2B 323a9e5960e6546a02d9d83fc0bf40cb1e62ddf2850e1533a0a1ab4aad7270bcdbd5bd59ef1e4b1756af4e85ad360447f2bf896829d1e414dfc27c382a69ffc1 SHA512 acdd53dc789db22521c9968d7853a57b58dcb92da0daf244adbca7472bdf6dcd531fd5b373e8cffbf0fd6dc09a9f403c64159e875f48093b7eaa6fe4ba54f0db
+DIST uv-0.12.22-crates.tar.xz 43999028 BLAKE2B eab0cb19a8a778ce9bae824851609a3d8bfe82659cf73f9c7a475f0dfa063222eeba26c709985defad2a3c8b9e3d42f0a0755e038263df7fbab23f0b343afcab SHA512 d6f44f045ccdf77b57214614d168cad1fddf94a3ec506364eed9178c17488afbcd2ffb1660de1aeecd5d333bc7249cf093c0f214a14a85c9bbd2955fe1bc4015
+DIST uv-0.12.22.gh.tar.gz 8793875 BLAKE2B b70d02b6412c9e60285e09b00c1157dd5c3b05a04bc0dd7c97224a34ec4412a72abe0cef39b04e23f5e0810ce2b3eef62cba55e499b993aa0c6aad1cd5857c45 SHA512 973f73e63a4c63280116396c147a34f2ff78dcc2db0bc9b6763ba35f0f038215b07a46ef1377e787b067009a265592e037d3c1307a39338dca88ecd6a00ea503
DIST uv-0.12.3-crates.tar.xz 42197452 BLAKE2B 996bb294d37774e0cb5529c34552d20877cd82a3d063b6e4dc1f6feff05a7822a91c44408a970f038d3045312be0edd4c9e8d34f6eebc04d71bd4d2ffa0184ee SHA512 8de33956c5a603fb4aa1bb5ab6db68c537d7523a84f3092057f562b1209bc976b0bc64cc6ed76cbf1b0edb4981b6a41765fa5e2729a487e4e2322052aa08b8a4
DIST uv-0.12.3.gh.tar.gz 7273161 BLAKE2B 706a2297090b13c6f731d25f55ae8c2225e3b9bd820c61814f512c1e04d98d2e46ce5bfac6ec6ea346dbce1663aea644384b37663b53d64a08a90b48217bdb0d SHA512 a4933b9b9b852dee2485800ad82ee3be111a4a5a437ab32d5064cfd4004e124ba733294a546a097379c74cf1fc234d1da0488aec7725037c7b967ec1aa862a71
DIST uv-0.12.7-crates.tar.xz 44143088 BLAKE2B 075113e8cbafd99a1c70c4ce53678f2ceb13ce31dc7cafb5773e32ae9dfa14144390380e0149219912a0c4b92e6d3b9d0a0a0016cdd4c69097bf75adf1b8a716 SHA512 f9dbdad7cbddd3238c7cc9fbcbec4e92fc8c8c66bc7247ccc8159bb186223c199e3bd411ad9148750ec1fa258775dcec1e2bb6bc3287fca7aeb6ffa7ba4d6b44
diff --git a/dev-python/uv/uv-0.12.22.ebuild b/dev-python/uv/uv-0.12.22.ebuild
new file mode 100644
index 000000000000..23228cc55439
--- /dev/null
+++ b/dev-python/uv/uv-0.12.22.ebuild
@@ -0,0 +1,151 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+"
+RUST_MIN_VER="1.97.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 tikv-jemalloc-sys?
+
+ # remove unbundled sources, just in case
+ find "${ECARGO_VENDOR}"/zstd-sys-*/ -name '*.c' -delete || die
+}
+
+src_configure() {
+ local myfeatures=(
+ test-git
+ test-pypi
+ test-python
+ )
+
+ cargo_src_configure --no-default-features
+ # otherwise, rustc/llvm runs out of address space
+ use arm && export RUSTFLAGS="${RUSTFLAGS} -Copt-level=0"
+}
+
+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/uv/uv-9999.ebuild b/dev-python/uv/uv-9999.ebuild
index 1c1a92fd75d9..41ccbf53c421 100644
--- a/dev-python/uv/uv-9999.ebuild
+++ b/dev-python/uv/uv-9999.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-RUST_MIN_VER="1.95.0"
+RUST_MIN_VER="1.97.0"
inherit cargo check-reqs git-r3
@@ -31,6 +31,7 @@ RDEPEND="
BDEPEND="
virtual/pkgconfig
test? (
+ dev-lang/python:3.9
dev-lang/python:3.10
dev-lang/python:3.11
dev-lang/python:3.12
diff --git a/dev-python/uvloop/Manifest b/dev-python/uvloop/Manifest
index 42b1f8a7f988..a4f440f97afd 100644
--- a/dev-python/uvloop/Manifest
+++ b/dev-python/uvloop/Manifest
@@ -1,2 +1,4 @@
DIST uvloop-0.19.0-cython3.patch.xz 6352 BLAKE2B 4a7056299d3d430ce5b6986d43ba4f20726ae4f9635042a43e2995ea373ed53ddce6af2eaa32202f81f80a27bd1d814e635a6be091b5f751bcf6825fd2c8e88a SHA512 aeda541f1327860d23b31ffda9923270a56a8311ec86b06f3bd653478bff591372106e8848af5229e3ad298e950b4c3a728ab4dd9056219b8afe55f5dd58ee3d
DIST uvloop-0.22.1.tar.gz 2443250 BLAKE2B 2974895dbad08aa987ce3228f6c4b143926b698b0b2131019f1ee5a21541b21c59d7ee60dcdfc693e34916d802945eeea9ab93004eb627005f77f048809891d0 SHA512 9bbb87c7ec344c254178c3fff322fe772cf4ebced9c45514860ed004242dba6e7f3b7774ed6c4ded36f915f8b4809747f0bace8b00338ac15dbe57f09b985ed2
+DIST uvloop-0.23.0.tar.gz 2559185 BLAKE2B baf772a698d0f6cd9f48b4133f3146e89127d93f6af83bef68c06012129034a99cf6b4a85afdf95ec0a22f2611ee4eb00ac0e80f36ca957c75bd4093bf86dde1 SHA512 a1a47675cc120d194e5b24d1ac0d92f78fd222a777363f9a1942ae950c23a2f286a18635b41195a8db3da52df34969c4f866a7c32fc53804d34adca990754038
+DIST uvloop-0.23.0.tar.gz.provenance 9802 BLAKE2B c61d2bcfc53cfe87684e40818a100b1b37049710dd0584671ce4bdce1cf9969eb83156d724bab9a3011ee41f58dd29869d75c0166cdf9fe4ec5efc19208aa6ba SHA512 fde61148c877ddd42797d582b25905f0535012d3256bb4c1666e3766f75576439b835225a66368083a3c2371b8fef4b1f6634cefff48d8a62bad08bcdde3a191
diff --git a/dev-python/uvloop/uvloop-0.23.0.ebuild b/dev-python/uvloop/uvloop-0.23.0.ebuild
new file mode 100644
index 000000000000..e7a3def925d1
--- /dev/null
+++ b/dev-python/uvloop/uvloop-0.23.0.ebuild
@@ -0,0 +1,84 @@
+# 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/MagicStack/uvloop
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Ultra-fast implementation of asyncio event loop on top of libuv"
+HOMEPAGE="
+ https://github.com/MagicStack/uvloop/
+ https://pypi.org/project/uvloop/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 -riscv ~sparc ~x86"
+IUSE="examples"
+
+DEPEND="
+ >=dev-libs/libuv-1.11.0:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ >=dev-python/cython-3.1[${PYTHON_USEDEP}]
+ >=dev-python/packaging-20[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/pyopenssl-22.0.0[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( aiohttp )
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ distutils-r1_python_prepare_all
+
+ rm -r vendor || die
+ cat <<-EOF >> setup.cfg || die
+ [build_ext]
+ use_system_libuv=True
+ cython_always=True
+ EOF
+
+ # force cythonization
+ rm uvloop/loop.c || die
+
+ # don't append -O2... however, it's not splitting args correctly,
+ # so let's pass something safe
+ export UVLOOP_OPT_CFLAGS=-Wall
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # linting
+ tests/test_sourcecode.py
+ )
+ local EPYTEST_DESELECT=(
+ # unhappy about sandbox injecting its envvars
+ tests/test_process.py::Test_UV_Process::test_process_env_2
+ tests/test_process.py::Test_AIO_Process::test_process_env_2
+ # crashes on assertion
+ # https://github.com/MagicStack/uvloop/issues/574
+ tests/test_cython.py::TestCythonIntegration::test_cython_coro_is_coroutine
+ # Internet
+ tests/test_dns.py::Test_AIO_DNS::test_getaddrinfo_{1,2,3,5,6,8,9,11,21}
+ tests/test_dns.py::Test_UV_DNS::test_getaddrinfo_{1,2,3,5,6,8,9,11,21}
+ )
+
+ rm -rf uvloop || die
+ epytest -s
+}
+
+python_install_all() {
+ use examples && dodoc -r examples
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/virtualenv/Manifest b/dev-python/virtualenv/Manifest
index 41adc0ffdc69..6c0565b256ca 100644
--- a/dev-python/virtualenv/Manifest
+++ b/dev-python/virtualenv/Manifest
@@ -4,6 +4,8 @@ DIST virtualenv-21.13.0.tar.gz 5399552 BLAKE2B 458c552f370a0685cbe3cb5337944be16
DIST virtualenv-21.13.0.tar.gz.provenance 9722 BLAKE2B 65b18975cd0b010b94a12cb97d4940ccc4b3e402a61fb9efa59c325da0c6464e0683e45df5a309b05129fcaa07f7379ad266cf6867081b49011eddb9ebef2d5b SHA512 fe54ae02d74a5e647f763817792df6487485a3dca2cbac2e51772a50d871e3a1f9706a0d44bb9e48534395690b7f6bcb45196fb5e006feb0b43d63c8531e298e
DIST virtualenv-21.14.1.tar.gz 5462838 BLAKE2B f2b871a9a49ed63908041eefaa8ca60082ae98029e6b58b0bf1ab806bbd910515184bf6bd1c304a69e4680db3850a21659d18f43a6d7b73d1348f64416df9cd3 SHA512 3a4ea0b03bf5bfa8f47ea217e6e316b378daad90a97496f39eae970a80f23c5cec2c3f49198da70ec8b8b75855bcfee584b9a52185a2e9da55d37d3749cfbcd0
DIST virtualenv-21.14.1.tar.gz.provenance 9487 BLAKE2B 1d4ad31cd32693e47fac8cc5641c11e811034df7957779ab5051099125d9244b3017a9fde1fdd89307426ee61738100e1917cc4169cf1d1c4bfdc9613a3136c9 SHA512 68cf4f7187ffaac9e412c628076febb96f12a78ebf8dfb52af1c908aeb4eccbab8660fda6f03aaa44876491ffa1814e6dbc4bde7d279b96c370792a982c49dd4
+DIST virtualenv-21.14.3.tar.gz 5464634 BLAKE2B e82707e1a51d55efef6b902fd8f5aa617003fa43d61558a504d7c26186fd64cbf5c559ccb17b0710b2bde0dea7130652d606cc71dfd82936ffe51c046bb74499 SHA512 6ed46584d704a2ea4b4241348a0c8a3dcc7ae0fb5096fe096f60cac1e589b7f634ef46c377b31f3db220b8b0d2cc2f4f1a46294171c662d8fbd8d2d4a569caec
+DIST virtualenv-21.14.3.tar.gz.provenance 9808 BLAKE2B 2bd41496285aa992dcebae332feda3bc0b6f6c06483ae09278ebb4e9835df510a66d29806033afda3cce87ea3899aeb4d5eee8f53ce1df2d2543ee32e13127fd SHA512 98c0db6aed32e36ce3b88ae8193a725e9abecff06cbe7e3821e172c82f9bfa03e2e247f50314740f700a0c2d828b254d6bbfb0e74a7919d10d5d33ebac54701b
DIST virtualenv-21.7.16.tar.gz 5363081 BLAKE2B 80a957de88379940d7faf6173d27aba49f24d2c35d162ae666b00e4822e9bbb14dcaa95c7d2515a967ba03a1f6437c1d388fd78fae3e4ded5d596d5ac8802291 SHA512 eacdb1e4216dd00b1948c78bb3facd42e8aeb5566efa6ca85660c2b926bf7e92fc240547b05b2ee795f547edf0aff6bf5e7df4d6f1ef8c7f489af5c0cde20169
DIST virtualenv-21.7.16.tar.gz.provenance 9667 BLAKE2B 9c9fd750ee8403a59dc5c6eb5bf6932ac13ac4e6f2a0c2572292143886d07294bf99cab554f127b20a36f38e76e279100a1f3cf6047e1767750d551ace8cb5cc SHA512 c1a15d2fda5a94460bda461594e2b41fe83da57b1a17afdb0786f270bbd7af40445f92f7cafc494961eeed7e97c9747f7d105ae0453259a174704441dfc5b597
DIST virtualenv-21.7.7.tar.gz 5347022 BLAKE2B fbd9fbbb3e48ef719ddf097eca32557ba4ae980d0a752c0d0e900a086b144ef0a52d87ee75ca902dc24bdad973c0588a148573dcdc982fdf460f1e8ffb71cb7c SHA512 b577552968f9e3fe72af4a5771fbcacbd5efb8808d0b7a23e709a90bb4d9df9cf51bc74a5dff0c978e4da9a9977d22300b6a75c7a57396c4fed09a5946e0e03d
diff --git a/dev-python/virtualenv/virtualenv-21.14.3.ebuild b/dev-python/virtualenv/virtualenv-21.14.3.ebuild
new file mode 100644
index 000000000000..e4353ab1e703
--- /dev/null
+++ b/dev-python/virtualenv/virtualenv-21.14.3.ebuild
@@ -0,0 +1,126 @@
+# 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/packaging-23.1[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-3.9.1[${PYTHON_USEDEP}]
+ >=dev-python/python-discovery-1.6[${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/hatchling-1.27[${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
+ # requires bundled packages in pip
+ tests/unit/test_sbom.py::test_sbom_spdx_declared_license
+ # require pre-commit = internet
+ tests/unit/test_wheel_age.py::test_generator_converges
+ tests/unit/test_wheel_age.py::test_generator_updates_license
+ # TODO
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest
+ )
+
+ 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
+}