summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-05-13 17:57:46 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-05-13 17:57:46 +0000
commit33b1502bb3d163709fff312aca31b2b997e203a4 (patch)
tree044c568c750d3623ebbd9b42d04dfe603b8255d3 /dev-python
parentc9247bc74da2fdefe6844e838ed60c995ce500bd (diff)
downloadbaldeagleos-repo-33b1502bb3d163709fff312aca31b2b997e203a4.tar.gz
baldeagleos-repo-33b1502bb3d163709fff312aca31b2b997e203a4.tar.xz
baldeagleos-repo-33b1502bb3d163709fff312aca31b2b997e203a4.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/backports-zstd/Manifest2
-rw-r--r--dev-python/backports-zstd/backports-zstd-1.5.0.ebuild47
-rw-r--r--dev-python/cbor2/Manifest2
-rw-r--r--dev-python/cbor2/cbor2-6.1.0.ebuild72
-rw-r--r--dev-python/cfn-lint/Manifest2
-rw-r--r--dev-python/cfn-lint/cfn-lint-1.51.0.ebuild64
-rw-r--r--dev-python/clang/Manifest1
-rw-r--r--dev-python/clang/clang-23.0.0_pre20260512.ebuild49
-rw-r--r--dev-python/crispy-bootstrap3/crispy-bootstrap3-2024.1.ebuild24
-rw-r--r--dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52.patch125
-rw-r--r--dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52Py.patch53
-rw-r--r--dev-python/cvxopt/Manifest1
-rw-r--r--dev-python/cvxopt/cvxopt-1.3.3.ebuild176
-rw-r--r--dev-python/hypothesis/Manifest1
-rw-r--r--dev-python/hypothesis/hypothesis-6.152.6.ebuild110
-rw-r--r--dev-python/idna/Manifest2
-rw-r--r--dev-python/idna/idna-3.15.ebuild23
-rw-r--r--dev-python/imap-tools/Manifest4
-rw-r--r--dev-python/imap-tools/imap-tools-1.13.0.ebuild (renamed from dev-python/imap-tools/imap-tools-1.11.1.ebuild)0
-rw-r--r--dev-python/inline-snapshot/Manifest2
-rw-r--r--dev-python/inline-snapshot/inline-snapshot-0.33.0.ebuild62
-rw-r--r--dev-python/installer/Manifest4
-rw-r--r--dev-python/installer/installer-1.0.1.ebuild71
-rw-r--r--dev-python/ipyparallel/Manifest2
-rw-r--r--dev-python/ipyparallel/ipyparallel-9.2.0.ebuild77
-rw-r--r--dev-python/lit/Manifest1
-rw-r--r--dev-python/lit/lit-23.0.0_pre20260512.ebuild41
-rw-r--r--dev-python/mypy/Manifest1
-rw-r--r--dev-python/mypy/mypy-2.1.0.ebuild146
-rw-r--r--dev-python/nuitka/Manifest2
-rw-r--r--dev-python/nuitka/nuitka-4.1.ebuild (renamed from dev-python/nuitka/nuitka-4.0.7.ebuild)0
-rw-r--r--dev-python/pandas/Manifest2
-rw-r--r--dev-python/pandas/pandas-3.0.3.ebuild191
-rw-r--r--dev-python/pbs-installer/Manifest2
-rw-r--r--dev-python/pbs-installer/pbs-installer-2026.5.10.ebuild33
-rw-r--r--dev-python/pillow/metadata.xml8
-rw-r--r--dev-python/pillow/pillow-12.2.0-r1.ebuild178
-rw-r--r--dev-python/pygobject/Manifest2
-rw-r--r--dev-python/pygobject/pygobject-3.52.4.ebuild102
-rw-r--r--dev-python/pytest-jobserver/pytest-jobserver-1.1.0.ebuild2
-rw-r--r--dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild4
-rw-r--r--dev-python/python-discovery/Manifest2
-rw-r--r--dev-python/python-discovery/python-discovery-1.3.1.ebuild57
-rw-r--r--dev-python/pyxattr/pyxattr-0.8.1.ebuild2
-rw-r--r--dev-python/reportlab/Manifest1
-rw-r--r--dev-python/reportlab/reportlab-4.5.1.ebuild53
-rw-r--r--dev-python/requests-cache/Manifest1
-rw-r--r--dev-python/requests-cache/requests-cache-1.3.2.ebuild87
-rw-r--r--dev-python/requests/Manifest2
-rw-r--r--dev-python/requests/requests-2.34.0.ebuild75
-rw-r--r--dev-python/selenium/Manifest2
-rw-r--r--dev-python/selenium/selenium-4.44.0.ebuild165
-rw-r--r--dev-python/tox/Manifest2
-rw-r--r--dev-python/tox/tox-4.54.0.ebuild97
-rw-r--r--dev-python/translate-toolkit/Manifest1
-rw-r--r--dev-python/translate-toolkit/translate-toolkit-3.19.9.ebuild131
-rw-r--r--dev-python/twisted/Manifest2
-rw-r--r--dev-python/twisted/files/twisted-26.4.0-py314.patch43
-rw-r--r--dev-python/twisted/twisted-26.4.0.ebuild172
-rw-r--r--dev-python/uv-build/Manifest1
-rw-r--r--dev-python/uv-build/uv-build-0.11.14.ebuild99
-rw-r--r--dev-python/uv/Manifest2
-rw-r--r--dev-python/uv/uv-0.11.14.ebuild164
-rw-r--r--dev-python/virtualenv/Manifest2
-rw-r--r--dev-python/virtualenv/virtualenv-21.3.2.ebuild136
65 files changed, 2974 insertions, 16 deletions
diff --git a/dev-python/backports-zstd/Manifest b/dev-python/backports-zstd/Manifest
index f5d757a1c546..d8380eab2246 100644
--- a/dev-python/backports-zstd/Manifest
+++ b/dev-python/backports-zstd/Manifest
@@ -2,3 +2,5 @@ DIST backports_zstd-1.3.0.tar.gz 997138 BLAKE2B 17fc2627b1cd498e6e808ac62fa56aa7
DIST backports_zstd-1.3.0.tar.gz.provenance 9389 BLAKE2B e6f8bcf6bc755e5e4f9d7e85adbb930018a761e37f2b0cde08905cc3cc0a5bd25ea75283f3012df84fd15a7be81d0708c9a5b202c72d2a8ce7ebbff0fed8958b SHA512 2c846b90a4049a1eef2cc5b4c89c0311f92513558cffae4bc918dd778f9648d13c854592ab7416b1b15f1942ff106b4d714905b9ffcd15746cad4fa60282fe8c
DIST backports_zstd-1.4.0.tar.gz 997918 BLAKE2B 86943a7639da562f67aeae1f59bc240b2bcf8092f2a662d56e42ee34687668d4b953b95afca491dd611c6b2c2647a724f76d5e0ef9b2829f9edc29e510aa85b9 SHA512 ab0627af0aea8839674eadbdad4fb6aa33149c832f37b5bb15a0db4141325eb881c8cace24b35d0de057641d698fef9850f8c39aee4c00aa745ca37cdb7fda9d
DIST backports_zstd-1.4.0.tar.gz.provenance 9726 BLAKE2B 4ad960deadb81d27d40d757b8c688f39fe4200f34adea1343a4d25f26d39b5ac756b9fdb1f98a17fddc707f0ea309edfc0e0b275a529ae0ccd4e5a02bf5252a2 SHA512 d310a4bfc3cbbfad93c0eb7397d4a4da1b7b1134d03bd7b515609b511617773160fb0ad17cdd5f57cd3ef75d3e0274b6a527840b92c30301e6f1946aaf815ef8
+DIST backports_zstd-1.5.0.tar.gz 998556 BLAKE2B 0fbcf631730d01afece73a68d80c1df93d7af0205b105c93a901e4688c5414575fa37a177c7fec0b673edb49bdda7c7c06da1179cd7d84641bf11aee8d68f596 SHA512 47298459a77eb5dcbb47d362414e7f9b1347bba0c9a724a465a55e137d1c4aaffc8e79897aa5d0e30c7855b0cf6e537e8439a18edef452a45407a66be3447276
+DIST backports_zstd-1.5.0.tar.gz.provenance 9628 BLAKE2B b476f6b73845195092ffc97b94199650df9e8f27d4e4ae7b9676d83b0a0c48b8b3c215e63b361b38857241e9ce123f94c18e35976b1095f5c49812b9eb1e4502 SHA512 77101ebd8e3409a67da8ca31d30305cb4753b9e20d73dbb148c77c970addc4035f96777f64f343109d28287ba42c3e347bd8bd027c63cd7a667740114fe03aaa
diff --git a/dev-python/backports-zstd/backports-zstd-1.5.0.ebuild b/dev-python/backports-zstd/backports-zstd-1.5.0.ebuild
new file mode 100644
index 000000000000..2e41a8bb21f5
--- /dev/null
+++ b/dev-python/backports-zstd/backports-zstd-1.5.0.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYPI_PN=${PN/-/.}
+PYPI_VERIFY_REPO=https://github.com/Rogdham/backports.zstd
+# this is a backport from py3.14, so don't add it
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Backport of PEP-784: adding Zstandard to the standard library"
+HOMEPAGE="
+ https://github.com/Rogdham/backports.zstd/
+ https://pypi.org/project/backports.zstd/
+"
+
+LICENSE="PSF-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+DEPEND="
+ app-arch/zstd:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+
+distutils_enable_tests unittest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # remove -flto and other forced cflags
+ sed -i -e 's:kwargs\["extra.*:pass:' setup.py || die
+
+ DISTUTILS_ARGS=(
+ --system-zstd
+ )
+}
+
+python_test() {
+ eunittest tests
+}
diff --git a/dev-python/cbor2/Manifest b/dev-python/cbor2/Manifest
index 109ecdb5eeb4..9cc43b3fb0ca 100644
--- a/dev-python/cbor2/Manifest
+++ b/dev-python/cbor2/Manifest
@@ -4,6 +4,8 @@ DIST cbor2-5.9.0.tar.gz 111231 BLAKE2B 2ab6315866e4c252ccc51a12358e1f6420ae9f284
DIST cbor2-5.9.0.tar.gz.provenance 9582 BLAKE2B 22f32c67af2ab3d9c1df9713aa0be0106542b13eaaf70b8ed0e09ccefd414619b721b87c8f74bf02ab583a744d02348cd3a0e45c6813686f18536d6c50d7d579 SHA512 0b44b4fa821d9df85b3891b98ad3cc724f906b3f9850f3251f14eb1450a9c3c60da8d6891f2473b465a9c275cc077fe7c0f6e1233ff1ca7ce274d23596694848
DIST cbor2-6.0.1.tar.gz 84191 BLAKE2B 0f8522a2462d5362c8d19900d1973386060f08f3ff1d6780cb9639df1132706860fc6ecbef2be3bb3b24385168f1426e2c9ff652fafb924a0e9e7b44b75777ec SHA512 c753a24b61c8d07635ee8c5f78df53f135acd7415b75d758d9681c04586a117e6ecdf8f1cd11021c4b175cfce06236cbe9c6e6ab67c5a059d625de5aa921c8cd
DIST cbor2-6.0.1.tar.gz.provenance 9155 BLAKE2B fab57134c5eed10943d62ba66db393e448a1ac36e1f6b71e1e4ca63f820ffd3ec188228503815faef8f636e6c1fdee8ca1abeb221d4902ee6102ce9182e303d7 SHA512 ac48dcb4e5e6dcbdf1044a669adc84f7833f75262266c20a1665d7a895221562080db61404eb7407c63dc57939a2bf97c34c31fb4264b6a5c720557f841e2957
+DIST cbor2-6.1.0.tar.gz 85870 BLAKE2B eb2d6b699d9294242acd1c626fb7e5c9f5dcb67d19ddd19fb58add69d0db56bac16162304bb00e26748a6171510a7ec99bb8d2c1d3ad159f19d405b6d28baa99 SHA512 e8ed4d21518b45f47e02233fe9d835c834aad6c4c6eb675f2d3fc66d90810e36f5673783b428fdabe79ced863a79698cbf50b088443a3315b411fd8e8d572a08
+DIST cbor2-6.1.0.tar.gz.provenance 9625 BLAKE2B 106dc7b9667c195bd6934ee6c824c46f8290608a1e212d533c4dccc5e25c531a47caf1cd3babb8d093588a5118e5c72c5141df8037a92020738053dde650ffd2 SHA512 62e3cf64344be19ff1192cc748c28f276c1b02c2bd4bbe92b10636c752b68b453ec0e018e8a940bd9c1b2d36278e8bee158373a495498ab8c75195d698a16878
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.0.ebuild b/dev-python/cbor2/cbor2-6.1.0.ebuild
new file mode 100644
index 000000000000..41ecb8352e7f
--- /dev/null
+++ b/dev-python/cbor2/cbor2-6.1.0.ebuild
@@ -0,0 +1,72 @@
+# 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_{10..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-ffi@0.28.2
+ pyo3-macros-backend@0.28.2
+ pyo3-macros@0.28.2
+ pyo3@0.28.2
+ 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_src_unpack
+}
diff --git a/dev-python/cfn-lint/Manifest b/dev-python/cfn-lint/Manifest
index de625e0cabea..e48d1910b67d 100644
--- a/dev-python/cfn-lint/Manifest
+++ b/dev-python/cfn-lint/Manifest
@@ -4,3 +4,5 @@ DIST cfn_lint-1.49.3.tar.gz 4037038 BLAKE2B 621ac3cb97d5924e1b29c75924f89a3942b7
DIST cfn_lint-1.49.3.tar.gz.provenance 9768 BLAKE2B fc1c6756840e9ae9862c80cd6854a788ffe4a7e35724121fb1c5aaab38bc1d9be23b66b35cbcb14490e55ee75a39459cd542545d9c543f5bdd53776d8d81c1ed SHA512 acd61ba2f218a51b4ad078465b02a684d8a2903d440450a8a6b9844e28daf64182f887d06734cf7fea433a4c17920ef3236b3e305625fc8a2666cda84e7bc403
DIST cfn_lint-1.50.1.tar.gz 4076509 BLAKE2B 438ce08ba7b37ca76b8a286f18deabd740969627c5177a40fc75fe76c36cb1adebf4c5e5a785b7422f287ee72d294c571d9e1bdfca6b9ef10473a28f4ae993da SHA512 9ac4224f4d5da149747abe00d6bffed88bc8fd3b36a868417bd8cf578b1cf7956812c7caaca4da178a1bed2b31a0a83f22be489176755e2146f8286e2dee12ce
DIST cfn_lint-1.50.1.tar.gz.provenance 9678 BLAKE2B fde3c92469e6b11b53a3734c1266810052dadf96ea1cb2ab9d2f20ad36fa6d499ee260fdbf98f2a97b86543763f3af201d98ddc586a32649aa2bb716d0a206e2 SHA512 6c0af59dc5e2b61eb617f1690d671d85b2a9bc9d0ffec5d86cab9e49cabe4b3b551f16fc4cc720eddab122b69253ba3e31af4ac57cc4947cf23a3589a8e2678f
+DIST cfn_lint-1.51.0.tar.gz 4088652 BLAKE2B 2c25674738e3820a0cfd040fff01402ff8319a07eed4032dc2559b0e32db79dba4b31eb7459f8f326a42df5f2ef147663d3cfe8fb3b10d6ee7ae04eb6be92948 SHA512 93ac059d6d3fa1feb6bd83a5893e9307e1d512b96d1c1cc371c160730e7738a0b01cff2fae69ad4e7a8332a40e0c9a1adba508502f0c42efe84fc521850c9663
+DIST cfn_lint-1.51.0.tar.gz.provenance 9674 BLAKE2B 13a5fe8f79b8650ff4843278f2293984b3416cca078f63d3ad5072cb752ff481f7214a6b9236ad1796d833b7d0be499a16b9dc4e573db94820330294bd207173 SHA512 7f7eff3a3e0f4c98f542f53984a749af3d1e01170ea01750deb827011d15813705f9df6a84b1f10cae6d50d304b1190011da6994a0addd2aa89e97c6f2912168
diff --git a/dev-python/cfn-lint/cfn-lint-1.51.0.ebuild b/dev-python/cfn-lint/cfn-lint-1.51.0.ebuild
new file mode 100644
index 000000000000..0dd1e9716233
--- /dev/null
+++ b/dev-python/cfn-lint/cfn-lint-1.51.0.ebuild
@@ -0,0 +1,64 @@
+# 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/aws-cloudformation/cfn-lint
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="CloudFormation Linter"
+HOMEPAGE="
+ https://github.com/aws-cloudformation/cfn-lint/
+ https://pypi.org/project/cfn-lint/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+
+RDEPEND="
+ >=dev-python/aws-sam-translator-1.109.0[${PYTHON_USEDEP}]
+ dev-python/jsonpatch[${PYTHON_USEDEP}]
+ >=dev-python/jschema-to-python-1.2.3[${PYTHON_USEDEP}]
+ <dev-python/jsonschema-5[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/junit-xml[${PYTHON_USEDEP}]
+ <dev-python/networkx-4[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-5.4[${PYTHON_USEDEP}]
+ >=dev-python/regex-2021.7.1[${PYTHON_USEDEP}]
+ >=dev-python/sarif-om-1.0.4[${PYTHON_USEDEP}]
+ >=dev-python/sympy-1.14.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ >=dev-python/setuptools-77.0.3[${PYTHON_USEDEP}]
+ test? (
+ dev-python/defusedxml[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # different line wrapping somehow
+ test/unit/module/template/test_template.py::TestTemplate::test_build_graph
+ # requires git repo
+ test/unit/module/maintenance/test_update_documentation.py::TestUpdateDocumentation::test_update_docs
+ # TODO: suddenly started failing in older versions too
+ # https://github.com/aws-cloudformation/cfn-lint/issues/4207
+ test/integration/test_good_templates.py
+ test/unit/module/override/test_exclude.py::TestExclude::test_success_run
+ test/unit/module/test_api.py::TestLintFile::test_good_template
+ test/unit/module/test_rules_collections.py::TestRulesCollection::test_success_run
+ # crashes on 3.12+, probably pygraphviz
+ test/unit/module/test_api.py::TestLintByConfig::test_graph
+ )
+
+ # from tox.ini
+ local -x AWS_DEFAULT_REGION=us-east-1
+ epytest
+}
diff --git a/dev-python/clang/Manifest b/dev-python/clang/Manifest
index 789cad0c250d..9319e609e047 100644
--- a/dev-python/clang/Manifest
+++ b/dev-python/clang/Manifest
@@ -13,3 +13,4 @@ DIST llvm-project-21.1.8.src.tar.xz 158958576 BLAKE2B 0d3d4ee920f8e5db50e9815261
DIST llvm-project-21.1.8.src.tar.xz.sig 119 BLAKE2B cffc1825f5778a3e3c128ec3e856ff6ee50687319d621cdf42e895abf67e05cc51cb7493308e2b506ab60dbdbaca7aa75eb9f78d91d42c81f9682a36f4042e9d SHA512 10f58eff58ed6e701d0f123b15e68c82ab8cbdf99b1c86c0d83e3b8553e90ea51055e30327e8e442ded57c8f503e2a2de9ee075e9c28b5ba815a0f8922f8671c
DIST llvm-project-22.1.5.src.tar.xz 167058820 BLAKE2B b0d4bc4db8d03a2201620dec0fcf5c946d86ac152c0feef4252e211eec4542e2fc849e2bafc8bcb57982959d005d70e9a7bd81296fed04f819b7de3f2fc15c43 SHA512 68de113906ec0c843a9346ecd06bff352146869f1f28b5600ff907125d77202692b6f68bd169bcd74ae5b82e0ad5548ea99c2405540abea36880d80e373744ff
DIST llvm-project-22.1.5.src.tar.xz.sig 119 BLAKE2B c756bb5d4ebc9fc3b61115495c75574312ad287dc4bdfc8408da7dcfc781f26c5804d8a4a46af32ad809db80a154aff6cad308742e1e04ca4a93249d6f1a55b4 SHA512 36baf347f79c26705136a7d342e8ee0a8a42939bb1db2d9ce91666b1edbbb04194ff63bc41899e4498cd819e6c2bd6944ea68d972e074e113f48d08e6544c368
+DIST llvm-project-8789401c6f0b2c53ba348860c1b0c5df1fa40c8c.tar.gz 271359638 BLAKE2B 31d1c91b535f129cac4b1da7ce2e6f0765231ebe6a5b1cb83f00d56d68820cdd029f7d2fdf602148e37bc9a22d99b71e25284eab74b8d52fa87ed4636712171f SHA512 4ca908b0b5d7ae9a2b334d033d2c11b557dcc3305b9107017965ae612716beade09a0c73e1a5f5eab1c9794728558d4a981715bb9b01d5ba2c2c5c6c53d1a9b6
diff --git a/dev-python/clang/clang-23.0.0_pre20260512.ebuild b/dev-python/clang/clang-23.0.0_pre20260512.ebuild
new file mode 100644
index 000000000000..0a3a20350207
--- /dev/null
+++ b/dev-python/clang/clang-23.0.0_pre20260512.ebuild
@@ -0,0 +1,49 @@
+# 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_{10..14} )
+inherit distutils-r1 llvm.org
+
+DESCRIPTION="Python bindings for llvm-core/clang"
+HOMEPAGE="https://llvm.org/"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# The module is opening libclang.so directly, and doing some blasphemy
+# on top of it.
+DEPEND="
+ >=llvm-core/clang-${PV}:*
+ !llvm-core/llvm:0[clang(-),python(-)]
+ !llvm-core/clang:0[python(-)]
+"
+RDEPEND="
+ ${DEPEND}
+ ${PYTHON_DEPS}
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ llvm-core/clang:${LLVM_MAJOR}
+ )
+"
+
+LLVM_COMPONENTS=( clang/{bindings/python,include} )
+llvm.org_set_globals
+
+distutils_enable_tests unittest
+
+python_test() {
+ # tests rely on results from a specific clang version, so override
+ # the search path
+ local -x CLANG_LIBRARY_PATH=${BROOT}/usr/lib/llvm/${LLVM_MAJOR}/$(get_libdir)
+ local -x CLANG_NO_DEFAULT_CONFIG=1
+ eunittest
+}
diff --git a/dev-python/crispy-bootstrap3/crispy-bootstrap3-2024.1.ebuild b/dev-python/crispy-bootstrap3/crispy-bootstrap3-2024.1.ebuild
index 8b831964569f..70d88fb87505 100644
--- a/dev-python/crispy-bootstrap3/crispy-bootstrap3-2024.1.ebuild
+++ b/dev-python/crispy-bootstrap3/crispy-bootstrap3-2024.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2023-2025 Gentoo Authors
+# Copyright 2023-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -23,12 +23,22 @@ SLOT="0"
KEYWORDS="~amd64 ~arm64 ~x86"
RDEPEND="
- dev-python/django-crispy-forms[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- dev-python/pytest-django[${PYTHON_USEDEP}]
- )
+ >=dev-python/django-5.2[${PYTHON_USEDEP}]
+ >=dev-python/django-crispy-forms-2.0[${PYTHON_USEDEP}]
"
+PATCHES=( "${FILESDIR}"/${P}-django52Py.patch )
+
+python_prepare_all() {
+ pushd tests/results/bootstrap3/test_form_helper 2>/dev/null
+ cp bootstrap_form_show_errors_bs3_true_gte5{0,2}.html || die
+ cp bootstrap_form_show_errors_bs3_false_gte5{0,2}.html || die
+ cp test_form_show_errors_non_field_errors_true_gte5{0,2}.html || die
+ cp test_form_show_errors_non_field_errors_false_gte5{0,2}.html || die
+ popd
+ eapply "${FILESDIR}"/${P}-django52.patch
+ distutils-r1_python_prepare_all
+}
+
+EPYTEST_PLUGINS=( pytest-django )
distutils_enable_tests pytest
diff --git a/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52.patch b/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52.patch
new file mode 100644
index 000000000000..302f0707281d
--- /dev/null
+++ b/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52.patch
@@ -0,0 +1,125 @@
+--- a/tests/results/bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_true_gte52.html 2026-05-12 08:54:40.844588615 +0200
++++ b/tests/results/bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_true_gte52.html 2026-05-12 08:56:08.969609620 +0200
+@@ -3,7 +3,7 @@
+ <label for="id_email" class=" control-label requiredField"> email<span class="asteriskField">*</span> </label>
+ <div class=" controls">
+ <div class="input-group"><input type="text" name="email" value="invalidemail" maxlength="30"
+- aria-describedby="id_email_helptext" aria-invalid="true"
++ aria-describedby="id_email_helptext id_email_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_email" />
+ <span class="input-group-addon">whatever</span></div>
+ <span id="error_1_id_email" class="help-block"><strong>Enter a valid email address.</strong></span>
+@@ -15,7 +15,7 @@
+ <div class=" controls">
+ <div class="input-group">
+ <span class="input-group-addon">blabla</span>
+- <input type="text" name="first_name" value="first_name_too_long" maxlength="5" aria-invalid="true"
++ <input type="text" name="first_name" value="first_name_too_long" maxlength="5" aria-describedby="id_first_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_first_name" />
+ </div>
+
+@@ -27,7 +27,7 @@
+ <div class=" controls">
+ <div class="input-group">
+ <span class="input-group-addon">foo</span>
+- <input type="text" name="last_name" value="last_name_too_long" maxlength="5" aria-invalid="true"
++ <input type="text" name="last_name" value="last_name_too_long" maxlength="5" aria-describedby="id_last_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_last_name" />
+ <span class="input-group-addon">bar</span>
+ </div>
+--- a/tests/results/bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_false_gte52.html 2026-05-12 08:58:43.242895175 +0200
++++ b/tests/results/bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_false_gte52.html 2026-05-12 08:59:34.010330008 +0200
+@@ -3,7 +3,7 @@
+ <label for="id_email" class=" control-label requiredField"> email<span class="asteriskField">*</span> </label>
+ <div class=" controls">
+ <div class="input-group"><input type="text" name="email" value="invalidemail" maxlength="30"
+- aria-describedby="id_email_helptext" aria-invalid="true"
++ aria-describedby="id_email_helptext id_email_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_email" />
+ <span class="input-group-addon">whatever</span></div>
+ <div id="hint_id_email" class="help-block">Insert your email</div>
+@@ -14,7 +14,7 @@
+ <div class=" controls">
+ <div class="input-group">
+ <span class="input-group-addon">blabla</span>
+- <input type="text" name="first_name" value="first_name_too_long" maxlength="5" aria-invalid="true"
++ <input type="text" name="first_name" value="first_name_too_long" maxlength="5" aria-describedby="id_first_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_first_name" />
+ </div>
+ </div>
+@@ -24,7 +24,7 @@
+ <div class=" controls">
+ <div class="input-group">
+ <span class="input-group-addon">foo</span>
+- <input type="text" name="last_name" value="last_name_too_long" maxlength="5" aria-invalid="true"
++ <input type="text" name="last_name" value="last_name_too_long" maxlength="5" aria-describedby="id_last_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_last_name" />
+ <span class="input-group-addon">bar</span>
+ </div>
+--- a/tests/results/bootstrap3/test_form_helper/test_form_show_errors_non_field_errors_true_gte52.html 2026-05-12 09:05:52.812112989 +0200
++++ b/tests/results/bootstrap3/test_form_helper/test_form_show_errors_non_field_errors_true_gte52.html 2026-05-12 09:08:58.292049212 +0200
+@@ -11,7 +11,7 @@
+ <div id="div_id_email" class="form-group has-error"> <label for="id_email" class="control-label requiredField">
+ email<span class="asteriskField">*</span> </label>
+ <div class="controls "> <input type="text" name="email" maxlength="30"
+- aria-describedby="id_email_helptext" aria-invalid="true"
++ aria-describedby="id_email_helptext id_email_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_email"> <span id="error_1_id_email"
+ class="help-block"><strong>This field is required.</strong></span>
+ <div id="hint_id_email" class="help-block">Insert your email</div>
+@@ -29,13 +29,13 @@
+ </div>
+ <div id="div_id_first_name" class="form-group has-error"> <label for="id_first_name"
+ class="control-label requiredField"> first name<span class="asteriskField">*</span> </label>
+- <div class="controls "> <input type="text" name="first_name" maxlength="5" aria-invalid="true"
++ <div class="controls "> <input type="text" name="first_name" maxlength="5" aria-describedby="id_first_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_first_name"> <span
+ id="error_1_id_first_name" class="help-block"><strong>This field is required.</strong></span> </div>
+ </div>
+ <div id="div_id_last_name" class="form-group has-error"> <label for="id_last_name"
+ class="control-label requiredField"> last name<span class="asteriskField">*</span> </label>
+- <div class="controls "> <input type="text" name="last_name" maxlength="5" aria-invalid="true"
++ <div class="controls "> <input type="text" name="last_name" maxlength="5" aria-describedby="id_last_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_last_name"> <span
+ id="error_1_id_last_name" class="help-block"><strong>This field is required.</strong></span> </div>
+ </div>
+@@ -46,4 +46,4 @@
+ id="id_datetime_field_1"> <span id="error_1_id_datetime_field" class="help-block"><strong>This field is
+ required.</strong></span> </div>
+ </div>
+-</form>
+\ No newline at end of file
++</form>
+--- a/tests/results/bootstrap3/test_form_helper/test_form_show_errors_non_field_errors_false_gte52.html 2026-05-12 09:07:54.198762179 +0200
++++ b/tests/results/bootstrap3/test_form_helper/test_form_show_errors_non_field_errors_false_gte52.html 2026-05-12 09:10:38.733931881 +0200
+@@ -6,7 +6,7 @@
+ <div id="div_id_email" class="form-group"> <label for="id_email" class="control-label requiredField"> email<span
+ class="asteriskField">*</span> </label>
+ <div class="controls "> <input type="text" name="email" maxlength="30"
+- aria-describedby="id_email_helptext" aria-invalid="true"
++ aria-describedby="id_email_helptext id_email_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_email">
+ <div id="hint_id_email" class="help-block">Insert your email</div>
+ </div>
+@@ -23,12 +23,12 @@
+ </div>
+ <div id="div_id_first_name" class="form-group"> <label for="id_first_name" class="control-label requiredField">
+ first name<span class="asteriskField">*</span> </label>
+- <div class="controls "> <input type="text" name="first_name" maxlength="5" aria-invalid="true"
++ <div class="controls "> <input type="text" name="first_name" maxlength="5" aria-describedby="id_first_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_first_name"> </div>
+ </div>
+ <div id="div_id_last_name" class="form-group"> <label for="id_last_name" class="control-label requiredField"> last
+ name<span class="asteriskField">*</span> </label>
+- <div class="controls "> <input type="text" name="last_name" maxlength="5" aria-invalid="true"
++ <div class="controls "> <input type="text" name="last_name" maxlength="5" aria-describedby="id_last_name_error" aria-invalid="true"
+ class="textinput textInput inputtext form-control" required id="id_last_name"> </div>
+ </div>
+ <div id="div_id_datetime_field" class="form-group">
+@@ -37,4 +37,4 @@
+ id="id_datetime_field_0"><input type="text" name="datetime_field_1" class="timeinput" required aria-invalid="true"
+ id="id_datetime_field_1"> </div>
+ </div>
+-</form>
+\ No newline at end of file
++</form>
diff --git a/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52Py.patch b/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52Py.patch
new file mode 100644
index 000000000000..26104c0d6b68
--- /dev/null
+++ b/dev-python/crispy-bootstrap3/files/crispy-bootstrap3-2024.1-django52Py.patch
@@ -0,0 +1,53 @@
+--- a/tests/test_form_helper.py 2026-05-12 09:33:29.599682337 +0200
++++ b/tests/test_form_helper.py 2026-05-12 09:36:56.323382756 +0200
+@@ -139,6 +139,11 @@
+ "bootstrap3/test_form_helper/"
+ "test_form_show_errors_non_field_errors_true_lte40.html"
+ )
++ elif django.VERSION >= (5, 2):
++ expected = parse_expected(
++ "bootstrap3/test_form_helper/"
++ "test_form_show_errors_non_field_errors_true_gte52.html"
++ )
+ elif django.VERSION >= (5, 0):
+ # Added 'aria-describedby' for fields with help_text
+ # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
+@@ -162,6 +167,11 @@
+ "bootstrap3/test_form_helper/"
+ "test_form_show_errors_non_field_errors_false_lte40.html"
+ )
++ elif django.VERSION >= (5, 2):
++ expected = parse_expected(
++ "bootstrap3/test_form_helper/"
++ "test_form_show_errors_non_field_errors_false_gte52.html"
++ )
+ elif django.VERSION >= (5, 0):
+ # Added 'aria-describedby' for fields with help_text
+ # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
+@@ -542,7 +552,11 @@
+ form.is_valid()
+
+ form.helper.form_show_errors = True
+- if django.VERSION >= (5, 0):
++ if django.VERSION >= (5, 2):
++ expected = parse_expected(
++ "bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_true_gte52.html"
++ )
++ elif django.VERSION >= (5, 0):
+ # Added 'aria-describedby' for fields with help_text
+ # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
+ expected = parse_expected(
+@@ -555,7 +569,12 @@
+ assert parse_form(form) == expected
+
+ form.helper.form_show_errors = False
+- if django.VERSION >= (5, 0):
++ if django.VERSION >= (5, 2):
++ expected = parse_expected(
++ "bootstrap3/test_form_helper/"
++ "bootstrap_form_show_errors_bs3_false_gte52.html"
++ )
++ elif django.VERSION >= (5, 0):
+ # Added 'aria-describedby' for fields with help_text
+ # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
+ expected = parse_expected(
diff --git a/dev-python/cvxopt/Manifest b/dev-python/cvxopt/Manifest
index 5f8d00a982e5..100b07b035dd 100644
--- a/dev-python/cvxopt/Manifest
+++ b/dev-python/cvxopt/Manifest
@@ -1 +1,2 @@
DIST cvxopt-1.3.2.gh.tar.gz 4095027 BLAKE2B ad4dfba1fe9c5be700ba61268e9d245355493c0334688b7a08bd4b5c4127da7a276cc660a1c1f4fe4df2359f9d2a8e3c4907d57d23c29d8caaf0329f6834cc30 SHA512 a6f9006b8b83445d781b1ba876e5ecefe724cf8666f47744b010e9c61fa1786dbd6233459a6e6a1a333ef9ac075d280076b2aeee3a2636d27541a615c5607b34
+DIST cvxopt-1.3.3.gh.tar.gz 8842113 BLAKE2B d6bbec5c9e1260b6eb3123b176187f6821ee7609b2e536375b9af076bec9b41fda588e5bdfa81111a126fa931378bd5585b531b0bf3ae8091f12997ef00a5540 SHA512 839183c41322dce6e63ead69e0cf4252cf2e434c9e9ce8a71033c493e18e395f48f5c402d1a7a6e53c4ae12da9ebfb47997909df84cfda3fd6c2845fd1e1c30b
diff --git a/dev-python/cvxopt/cvxopt-1.3.3.ebuild b/dev-python/cvxopt/cvxopt-1.3.3.ebuild
new file mode 100644
index 000000000000..29def1876270
--- /dev/null
+++ b/dev-python/cvxopt/cvxopt-1.3.3.ebuild
@@ -0,0 +1,176 @@
+# 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_{10..14} )
+
+inherit distutils-r1 toolchain-funcs
+
+DESCRIPTION="Python package for convex optimization"
+HOMEPAGE="
+ https://cvxopt.org/
+ https://github.com/cvxopt/cvxopt/
+ https://pypi.org/project/cvxopt/
+"
+# no sdist, as of 1.3.1
+SRC_URI="
+ https://github.com/${PN}/${PN}/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="+dsdp examples fftw +glpk gsl"
+
+DEPEND="
+ virtual/blas
+ virtual/lapack
+ sci-libs/amd:0=
+ sci-libs/cholmod:0=
+ sci-libs/colamd:0=
+ sci-libs/suitesparseconfig:0=
+ sci-libs/umfpack:0=
+ dsdp? ( sci-libs/dsdp:0= )
+ fftw? ( sci-libs/fftw:3.0= )
+ glpk? ( >=sci-mathematics/glpk-4.49:0= )
+ gsl? ( sci-libs/gsl:0= )
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ >=dev-python/setuptools-scm-6.2[${PYTHON_USEDEP}]
+ virtual/pkgconfig
+"
+
+distutils_enable_sphinx doc/source \
+ dev-python/sphinx-rtd-theme
+distutils_enable_tests pytest
+
+# The BLAS_LIB and LAPACK_LIB variables (among others) in cvxopt's
+# setup.py are passed in as colon-delimited strings. So, for example,
+# if your blas "l" flags are "-lblas -lcblas", then cvxopt wants
+# "blas;cblas" for BLAS_LIB.
+#
+# The following function takes a flag type ("l", "L", or "I") as its
+# first argument and a list of packages as its remaining arguments. It
+# outputs a list of libraries, library paths, or include paths,
+# respectively, for the given packages, retrieved using pkg-config and
+# deduplicated, in the appropriate format.
+#
+cvxopt_output() {
+ local FLAGNAME="${1}"
+ shift
+ local PACKAGES="${@}"
+
+ local PKGCONFIG_MODE
+ case "${FLAGNAME}" in
+ l) PKGCONFIG_MODE="--libs-only-l";;
+ L) PKGCONFIG_MODE="--libs-only-L";;
+ I) PKGCONFIG_MODE="--cflags-only-I";;
+ *) echo "invalid flag name: ${FLAGNAME}"; exit 1;;
+ esac
+
+ local CVXOPT_OUTPUT=""
+ local PKGCONFIG_ITEM
+ for PKGCONFIG_ITEM in $($(tc-getPKG_CONFIG) ${PKGCONFIG_MODE} ${PACKAGES})
+ do
+ # First strip off the leading "-l", "-L", or "-I", and replace
+ # it with a semicolon...
+ PKGCONFIG_ITEM=";${PKGCONFIG_ITEM#-${FLAGNAME}}"
+
+ # Now check to see if this element is already present in the
+ # list, and skip it if it is. This eliminates multiple entries
+ # from winding up in the list when multiple package arguments are
+ # passed to this function.
+ if [[ "${CVXOPT_OUTPUT}" != "${CVXOPT_OUTPUT%${PKGCONFIG_ITEM}}" ]]
+ then
+ # It was already the last entry in the list, so skip it.
+ continue
+ elif [[ "${CVXOPT_OUTPUT}" != "${CVXOPT_OUTPUT%${PKGCONFIG_ITEM};*}" ]]
+ then
+ # It was an earlier entry in the list. These two cases are
+ # separate to ensure that we can e.g. find ";m" at the end
+ # of the list, but that we don't find ";metis" in the process.
+ continue
+ fi
+
+ # It isn't in the list yet, so append it.
+ CVXOPT_OUTPUT+="${PKGCONFIG_ITEM}"
+ done
+
+ # Strip the leading ";" from ";foo;bar" before output.
+ echo "${CVXOPT_OUTPUT#;}"
+}
+
+src_configure() {
+ # Mandatory dependencies.
+ export CVXOPT_BLAS_LIB="$(cvxopt_output l blas)"
+ export CVXOPT_BLAS_LIB_DIR="${EPREFIX}/usr/$(get_libdir);$(cvxopt_output L blas)"
+ export CVXOPT_LAPACK_LIB="$(cvxopt_output l lapack)"
+ export CVXOPT_SUITESPARSE_LIB_DIR="${EPREFIX}/usr/$(get_libdir)"
+
+ # Most of these CVXOPT_* variables can be blank or have "empty"
+ # entries and the resulting command-line with e.g. "-L -L/some/path"
+ # won't hurt anything. The INC_DIR variables, however, cause
+ # problems, because at least gcc doesn't like a bare "-I". We
+ # pre-populate these variable with something safe so that setup.py
+ # doesn't look in the wrong place if pkg-config doesn't return any
+ # extra -I directories. This is
+ #
+ # https://github.com/cvxopt/cvxopt/issues/167
+ #
+ CVXOPT_SUITESPARSE_INC_DIR="${EPREFIX}/usr/include"
+ export CVXOPT_SUITESPARSE_INC_DIR
+
+ # optional dependencies
+ if use dsdp; then
+ # no pkg-config file at the moment
+ export CVXOPT_BUILD_DSDP=1
+ export CVXOPT_DSDP_LIB_DIR="${EPREFIX}/usr/$(get_libdir)"
+ export CVXOPT_DSDP_INC_DIR="${EPREFIX}/usr/include"
+ fi
+
+ if use fftw; then
+ export CVXOPT_BUILD_FFTW=1
+ export CVXOPT_FFTW_LIB_DIR="${EPREFIX}/usr/$(get_libdir);$(cvxopt_output L fftw3)"
+ CVXOPT_FFTW_INC_DIR="${EPREFIX}/usr/include"
+ FFTW_LOCAL_INCS="$(cvxopt_output I fftw3)"
+ if [[ -n "${FFTW_LOCAL_INCS}" ]]; then
+ CVXOPT_FFTW_INC_DIR+=";${FFTW_LOCAL_INCS}"
+ fi
+ export CVXOPT_FFTW_INC_DIR
+ fi
+
+ if use glpk; then
+ # no pkg-config file at the moment
+ export CVXOPT_BUILD_GLPK=1
+ export CVXOPT_GLPK_LIB_DIR="${EPREFIX}/usr/$(get_libdir)"
+ export CVXOPT_GLPK_INC_DIR="${EPREFIX}/usr/include"
+ fi
+
+ if use gsl; then
+ export CVXOPT_BUILD_GSL=1
+ export CVXOPT_GSL_LIB_DIR="${EPREFIX}/usr/$(get_libdir);$(cvxopt_output L gsl)"
+ CVXOPT_GSL_INC_DIR="${EPREFIX}/usr/include"
+ GSL_LOCAL_INCS="$(cvxopt_output I gsl)"
+ if [[ -n "${GSL_LOCAL_INCS}" ]]; then
+ CVXOPT_GSL_INC_DIR+=";${GSL_LOCAL_INCS}"
+ fi
+ export CVXOPT_GSL_INC_DIR
+ fi
+
+ export SETUPTOOLS_SCM_PRETEND_VERSION=${PV}
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ if use examples; then
+ dodoc -r examples
+ docompress -x "/usr/share/doc/${PF}/examples"
+ fi
+}
diff --git a/dev-python/hypothesis/Manifest b/dev-python/hypothesis/Manifest
index e471e31662bd..7f6463ba55f6 100644
--- a/dev-python/hypothesis/Manifest
+++ b/dev-python/hypothesis/Manifest
@@ -2,3 +2,4 @@ DIST hypothesis-6.151.14.gh.tar.gz 9871044 BLAKE2B bed431dcd481f5af11043fd0beca9
DIST hypothesis-6.151.9.gh.tar.gz 9864451 BLAKE2B 9d9c2800cf1212e743a599c261c78c0a7d349e58075a443e0d10e6373b1582e059abde416cec4f3a8185ae424725f93da8ab4e43dd70bd0f86071d69aca94def SHA512 3e41bdd077a18fe72360547bc03f2c3d7218e8cd6cb563fffd6024427bfa5ce0764ca9c7ef0dafdded896625128fc14b9d3f8c4564aa8a509545abf0ad24adbf
DIST hypothesis-6.152.4.gh.tar.gz 9602982 BLAKE2B 7eb3bf424f35707fa323affc9e5e00c35716c32ac69acfdbc7981634f30abf20dee20a8271c21e561b868e24f175a12f484d0e436132ac8194ad48dc361c1ebe SHA512 8f7490051c49f1a3d7b91b00a63527600ff8aba03456bcb2360a9c6a004eea67995354cadf40eabcdaec0d7cd53ecac013963e2c6e19be3e348e79f9e40d9e8e
DIST hypothesis-6.152.5.gh.tar.gz 9603889 BLAKE2B cc892069eb1b9d28073974cd5f5d23b7c32f3679ebe127acae9783b71d5a2d9dbfb5b1390f102447f62a5c557e34717911d46de4020e9cef6f93a85a24080848 SHA512 ff36abf597a43bf527dafc85e3bce84d352419650cd6a3854bcaee5bb91443ad8651cce9b2e9a7cb2f69f076e98531e323a14fb65ae05a202142a1856dbd5756
+DIST hypothesis-6.152.6.gh.tar.gz 9606311 BLAKE2B 96664ceb08b3870f71ca0b93a9214ed6150d0556660e9e20b0756c2778295af6cacd5c5a1f3b600695013880a274bb4517110cbeaf8c2dcf818ab8166814e732 SHA512 535947d3e5eecd1a0a45805a3011a82e992fc76bfa6ece63e2b8af85f22e93229a28c1746a64201886160432b087c0bb58045a38e3867efd8285c8b62e5814aa
diff --git a/dev-python/hypothesis/hypothesis-6.152.6.ebuild b/dev-python/hypothesis/hypothesis-6.152.6.ebuild
new file mode 100644
index 000000000000..2c65b19aa496
--- /dev/null
+++ b/dev-python/hypothesis/hypothesis-6.152.6.ebuild
@@ -0,0 +1,110 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+CLI_COMPAT=( python3_{11..13} )
+PYTHON_COMPAT=( "${CLI_COMPAT[@]}" pypy3_11 python3_{14..15} python3_{13..15}t )
+PYTHON_REQ_USE="threads(+),sqlite"
+
+inherit distutils-r1 optfeature
+
+TAG=hypothesis-python-${PV}
+MY_P=hypothesis-${TAG}
+DESCRIPTION="A library for property based testing"
+HOMEPAGE="
+ https://github.com/HypothesisWorks/hypothesis/
+ https://pypi.org/project/hypothesis/
+"
+SRC_URI="
+ https://github.com/HypothesisWorks/hypothesis/archive/${TAG}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+S="${WORKDIR}/${MY_P}/hypothesis-python"
+
+LICENSE="MPL-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="cli"
+
+RDEPEND="
+ >=dev-python/sortedcontainers-2.1.0[${PYTHON_USEDEP}]
+ cli? (
+ $(python_gen_cond_dep '
+ dev-python/black[${PYTHON_USEDEP}]
+ dev-python/click[${PYTHON_USEDEP}]
+ ' "${CLI_COMPAT[@]}")
+ )
+"
+BDEPEND="
+ test? (
+ >=dev-python/attrs-22.2.0[${PYTHON_USEDEP}]
+ dev-python/pexpect[${PYTHON_USEDEP}]
+ >=dev-python/pytest-8[${PYTHON_USEDEP}]
+ )
+"
+PDEPEND="
+ dev-python/hypothesis-gentoo[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
+EPYTEST_PLUGINS=( "${PN}" pytest-xdist )
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_test() {
+ # NB: paths need to be relative to pytest.ini,
+ # i.e. start with hypothesis-python/
+ local EPYTEST_DESELECT=(
+ # broken somehow (xdist?)
+ 'hypothesis-python/tests/pytest/test_constant_collection_timing.py::test_constant_collection_timing[True]'
+ # used to fail for a few impls, now fails everywhere
+ 'hypothesis-python/tests/cover/test_lambda_formatting.py::test_modifying_lambda_source_code_returns_unknown[False]'
+ )
+ local EPYTEST_IGNORE=(
+ # require syrupy
+ tests/cover/test_custom_reprs.py
+ )
+
+ case ${EPYTHON} in
+ python3.15*)
+ EPYTEST_DESELECT+=(
+ 'hypothesis-python/tests/cover/test_lookup.py::test_resolves_forwardrefs_to_builtin_types[sentinel]'
+ 'hypothesis-python/tests/cover/test_lookup.py::test_resolves_builtin_types[sentinel]'
+ )
+ ;;
+ esac
+
+ local -x HYPOTHESIS_NO_PLUGINS=1
+ epytest -o filterwarnings= tests/{cover,pytest,quality}
+}
+
+src_install() {
+ local HAD_CLI=
+
+ distutils-r1_src_install
+
+ if [[ ! ${HAD_CLI} ]]; then
+ rm -r "${ED}/usr/bin" || die
+ fi
+}
+
+python_install() {
+ distutils-r1_python_install
+ if use cli && has "${EPYTHON}" "${CLI_COMPAT[@]/_/.}"; then
+ HAD_CLI=1
+ else
+ rm -r "${D}$(python_get_scriptdir)" || die
+ fi
+}
+
+pkg_postinst() {
+ optfeature "datetime support" dev-python/pytz
+ optfeature "dateutil support" dev-python/python-dateutil
+ optfeature "numpy support" dev-python/numpy
+ optfeature "django support" dev-python/django dev-python/pytz
+ optfeature "pandas support" dev-python/pandas
+ optfeature "pytest support" dev-python/pytest
+}
diff --git a/dev-python/idna/Manifest b/dev-python/idna/Manifest
index 4be183e04d67..d45bf5d8eda7 100644
--- a/dev-python/idna/Manifest
+++ b/dev-python/idna/Manifest
@@ -1,2 +1,4 @@
DIST idna-3.14.tar.gz 198272 BLAKE2B e7c7084109b82c797a9d04074e77533eedd1b339e334a9f48beee4405c1f62b9bcad02ec726445c71b96354088cedc23ee3b9cd3772a77b004f06a2f66382e76 SHA512 be45700d70b8527445c00c9f760311a448d1a38116883e69549405ebc89b78dded0a939625564841c44c51efaad03e2054ba883f284b152552b9fe84ffdb229b
DIST idna-3.14.tar.gz.provenance 8986 BLAKE2B a9cbeae466fc385c997838513fe35efc862741be2f6b80f0c1151272b0bb473d6ed7efaa8584be1d647d8ed76127a524c7aaa102b248d16c1f9d51baf71af0a6 SHA512 e982ee5071a6a3ba7760c9e622419e47fce5fd210583ba78e70c5ac07a78adb3b2d6479020a7f2c8988b4a45b50b3968412a86d054e57df176c8817d1b54338b
+DIST idna-3.15.tar.gz 199245 BLAKE2B fa738fd388a5a7d5a67db32e117b4e226c525673981e63a950d8044b9df49a6af5ce7b6db146455233b294648a79b1ca20b14cbe13283ed11a02413120a54338 SHA512 8cd0efd9f82d1e5ec73b06202fed42c54e9aee4ebf5612fe29cb6c76f459d24027e545339dc3e79ad9abd0849b0e31bca42bf41f36c87391d9707f92b8326e26
+DIST idna-3.15.tar.gz.provenance 9268 BLAKE2B 83321fc9054407e98c6d1681481edbab71965b37ef88d85a37d50cb2611166d35adbd3571041e1e3b20a7344cd8b4f8840a322df8acc771d3d3d046703bf386f SHA512 413242a897960230b76e5c4f50cbd6e7560bd2694e9bb834ea758958cf359218587cde31c34f377d3abf3447cea9f39580bd89a88d52518b0b4aa97260454228
diff --git a/dev-python/idna/idna-3.15.ebuild b/dev-python/idna/idna-3.15.ebuild
new file mode 100644
index 000000000000..aa84e127089d
--- /dev/null
+++ b/dev-python/idna/idna-3.15.ebuild
@@ -0,0 +1,23 @@
+# 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_USE_PEP517=flit
+PYPI_VERIFY_REPO=https://github.com/kjd/idna
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Internationalized Domain Names in Applications (IDNA)"
+HOMEPAGE="
+ https://github.com/kjd/idna/
+ https://pypi.org/project/idna/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+
+distutils_enable_tests unittest
diff --git a/dev-python/imap-tools/Manifest b/dev-python/imap-tools/Manifest
index 8f0c3bbabe7b..5cac0a90a37d 100644
--- a/dev-python/imap-tools/Manifest
+++ b/dev-python/imap-tools/Manifest
@@ -1,5 +1,5 @@
-DIST imap-tools-1.11.1.gh.tar.gz 257425 BLAKE2B e31c805ec30b035e51260957c44f5d98ef0a24f3b56267f4130468026cb05b5c7f91d89d30145060ede4faa390081faabd20176b1e28ab943deee063c45a97f5 SHA512 cb34ab59eb9d98ce11009b22975424b8c5fcaca1332af9308004178dd6b794c640de5d9b931502c2c643f398220d37a5d932f9d08f3abe7a0bde5ca7fc72093c
DIST imap-tools-1.12.1.gh.tar.gz 258469 BLAKE2B 4d4d9a538e19a8eda16a737555bf2d8191bb1378b7c73e93abd5bd2c23228ed9e2ffeb2b3f9ce05cb30d5d7b7f0ea26d47b2e66c94c656fbf3a5e42239a8c687 SHA512 68c7dd9c41f491e6c66e526f154d0343e8f0fa37aa8238755831011d86896ebd2fad0e3aa108964296563fd8ca56b33a6f4d91870de67d20c5934ffa90a2c795
-EBUILD imap-tools-1.11.1.ebuild 730 BLAKE2B a6d101885c746149a060caea18b381069b5b10de522da69480f8890d172599df4665158b225df8f7a021b3beaf330995fd848d0396fa113eb7b54c228e88b856 SHA512 d0b30c01a91252e92ac05c595078d2bff779e25aa8890203fbab85a6c4ab396c71d12708a40361ebb04fafb5df7d5788c64d11f2806bc78f051138f0237b32a4
+DIST imap-tools-1.13.0.gh.tar.gz 258708 BLAKE2B 251b774e60a73034d0b5fd97bc36e7bb8f763524535b944651e34418301d836a808aa88757313c0615b87fa839c12de275aac97d07990d9ee4d542fc50e74ece SHA512 e4d1d974a61f77f9f1220206595d3f82c14296b36dae80a60007d51fb769acfe4a2c8eb69008b8d169d23d182bd1e5c9986ff033661d0138498aa3e319317ce0
EBUILD imap-tools-1.12.1.ebuild 730 BLAKE2B a6d101885c746149a060caea18b381069b5b10de522da69480f8890d172599df4665158b225df8f7a021b3beaf330995fd848d0396fa113eb7b54c228e88b856 SHA512 d0b30c01a91252e92ac05c595078d2bff779e25aa8890203fbab85a6c4ab396c71d12708a40361ebb04fafb5df7d5788c64d11f2806bc78f051138f0237b32a4
+EBUILD imap-tools-1.13.0.ebuild 730 BLAKE2B a6d101885c746149a060caea18b381069b5b10de522da69480f8890d172599df4665158b225df8f7a021b3beaf330995fd848d0396fa113eb7b54c228e88b856 SHA512 d0b30c01a91252e92ac05c595078d2bff779e25aa8890203fbab85a6c4ab396c71d12708a40361ebb04fafb5df7d5788c64d11f2806bc78f051138f0237b32a4
MISC metadata.xml 447 BLAKE2B 59e17459538187a7c9da7fbe7283f25c5131bf3188563709971176266ee42c8e27cdbf744cab7fe77c9b81b618c1246feb6450e969fb2bbe8ec996958315d158 SHA512 2d90e11910d114c0a84231c76b0103e3f4f7187294c68eb1542d396b0122baf3b066813fa95fd9386a6fbaeb778e43e8cc095747aeb7012d26d355c99e2e06ad
diff --git a/dev-python/imap-tools/imap-tools-1.11.1.ebuild b/dev-python/imap-tools/imap-tools-1.13.0.ebuild
index d03f0b657f76..d03f0b657f76 100644
--- a/dev-python/imap-tools/imap-tools-1.11.1.ebuild
+++ b/dev-python/imap-tools/imap-tools-1.13.0.ebuild
diff --git a/dev-python/inline-snapshot/Manifest b/dev-python/inline-snapshot/Manifest
index a550e43a429a..b1a347b8536b 100644
--- a/dev-python/inline-snapshot/Manifest
+++ b/dev-python/inline-snapshot/Manifest
@@ -2,3 +2,5 @@ DIST inline_snapshot-0.32.6.tar.gz 2627401 BLAKE2B bc5e6d2df47ee092fa26ed9f22066
DIST inline_snapshot-0.32.6.tar.gz.provenance 9438 BLAKE2B 8756279a2d22a5945eed8e973699399df90b12c021ecf501bc23c36cd3ac4deb0ddf0bc26e176fcefe4242381952ffa67a0348aa8b981bfbecd6d17b5009fd9f SHA512 0cafbbe3455c5e8c3938fa823c0acf0ab283d01e26ecacf9e4ab7a96dc5859f13d493c16246eac81b7770110ce7607500e27216dcf2247d29861b9631a9f5c49
DIST inline_snapshot-0.32.7.tar.gz 2630267 BLAKE2B 5e063da1ab736d6506af9bb282e5ba5a3f36af7f8c69411ade923f8daf84c6abc32882bb7def4a8ff65c42c295f883116539eb7c529c93fafbfd22960121397a SHA512 2e417a21e9fa1d315981ab449c3682a3d925035cb6d5dc66cfb77f635e46c12fce9727aaa0c9ad37aeb6e1aa1a3f2fa3a9326e6c0f9e68777bc0f7a62dcd7228
DIST inline_snapshot-0.32.7.tar.gz.provenance 9387 BLAKE2B 7205386789ed7c4ceaa12a2212df10c490286c1b18f33eddef705bb9276a6515cc6ac4439e390a754fdf931361b4644ccbf140e6a669dfea21e780ba47cc5f6a SHA512 5c6ec866395cbdf1b2d08f9a7bcbe0d07a2d9ff1a714ec4fc0cb41115d74ec9eda861f6779c73bdbf6d5899c2b93f70119a32e0d4028c6b09e411588b7683876
+DIST inline_snapshot-0.33.0.tar.gz 2637158 BLAKE2B 1bc372dd7f4a546410570b7a2a02ed65722d3448f8f2bc6e4f7cae926370f3ba74fc33f1b1162e4f6563f1f94273c592da4a5f8f573557235d8a5064b8c22c88 SHA512 17af4c5992dfc04809df804ab7167063d01166073e8017eeb08e60cef8ada642955eb2090e0e86807aacd3a6feddceed0cf3c37667fed5b732d076e8449ced13
+DIST inline_snapshot-0.33.0.tar.gz.provenance 9520 BLAKE2B 812259517d0fb1a0ba26b25986a8335810fe9542b581f7ced793cf3f1e64d6e10fbf2934252adc4352b113535028cc8a158ffe8c99aef993acbd08bcae35adea SHA512 241f66837bd510f10b2897fe8de4815d6352e78d0a9153ffb4be5fbd0be80fca693e5cf3c30ae32a3042a3294b175b865999a628607ecec414c81f7768570d6d
diff --git a/dev-python/inline-snapshot/inline-snapshot-0.33.0.ebuild b/dev-python/inline-snapshot/inline-snapshot-0.33.0.ebuild
new file mode 100644
index 000000000000..96d8727f953a
--- /dev/null
+++ b/dev-python/inline-snapshot/inline-snapshot-0.33.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=hatchling
+PYPI_VERIFY_REPO=https://github.com/15r10nk/inline-snapshot
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Create and update inline snapshots in your Python tests"
+HOMEPAGE="
+ https://15r10nk.github.io/inline-snapshot/
+ https://github.com/15r10nk/inline-snapshot/
+ https://pypi.org/project/inline-snapshot/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/asttokens-2.0.5[${PYTHON_USEDEP}]
+ >=dev-python/executing-2.2.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-8.3.4[${PYTHON_USEDEP}]
+ >=dev-python/rich-13.7.1[${PYTHON_USEDEP}]
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/attrs[${PYTHON_USEDEP}]
+ >=dev-python/black-23.3.0[${PYTHON_USEDEP}]
+ >=dev-python/dirty-equals-0.7.0[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-6.75.5[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/mypy[${PYTHON_USEDEP}]
+ ' 'python*')
+ >=dev-python/pydantic-2[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
+EPYTEST_PLUGINS=( "${PN}" pytest-{freezer,mock,xdist} )
+# TODO: EPYTEST_XDIST=1 gotten flaky with 0.33.0
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # requires pyright
+ 'tests/test_typing.py::test_typing_args[pyright]'
+ 'tests/test_typing.py::test_typing_call[pyright]'
+ # TODO
+ tests/test_formating.py::test_format_command_fail
+ 'tests/test_docs.py::test_docs[categories.md]'
+ 'tests/test_docs.py::test_docs[code_generation.md]'
+ 'tests/test_docs.py::test_docs[testing.md]'
+ )
+
+ local -x PYTHONPATH=${S}/src
+ epytest
+}
diff --git a/dev-python/installer/Manifest b/dev-python/installer/Manifest
index 2dad2ff96f1e..057413dffd01 100644
--- a/dev-python/installer/Manifest
+++ b/dev-python/installer/Manifest
@@ -1,2 +1,6 @@
DIST installer-0.7.0-py3-none-any.whl.zip 453838 BLAKE2B 59bb698e7a4232a5254b6f6c4a042c68a22a26e15c1205707d3c9734513e92bf4518a09341619eab9ef0023ee65fcaa9837a4befb7a2452f1592411654374595 SHA512 8e10013521238ef8fb2f5ab4bd00f6154c05046011cad8824d96b7cdc4ed235b87e534d1e163a47a11dbfb5bb3cf19d9a2ea3edd1e9c9ce5fbc9a375010c36dc
DIST installer-0.7.0.tar.gz 474349 BLAKE2B 76b86d14c0f4f0eba091ff08ef27e1b2f23c93318d197b3c41f5fef45eb11acc54bb1d35e3afc1e0dd98b30cc4cd3d9963ab1ba0bfe9d294ee3d0933ddaa24db SHA512 e89c2d28ca73d9c4291d645dda675fdcfcaba2e4f8765b9fa4a2f211e27711510f3d171b96a6b024c11808ba7f06b7b560a7cb31fafba815bd5c7396f26789f7
+DIST installer-1.0.1-py3-none-any.whl 464455 BLAKE2B 2856ed291d82acae94af2ea622554356f960175bb7961da11d2e434eb80fbc5346e24e01a0603c55a2bd8a22e44be1d8200a872d35d88d339e91461ac62e004c SHA512 655b26bea8a979a23f752346e54117b2513bfa8cc7932efa4ed8d6ccccc52f320d84904d989c235321cf69688eeec806e749632cfd57873dc91b59524823c85c
+DIST installer-1.0.1-py3-none-any.whl.provenance 9282 BLAKE2B 1b2400ad2db330c2f0e1a72deae66779fe4261bbd7433b13b87cd9be8d0bc7a273f681ca77136cbaf7c7edc2c132b16d0e30a86b2a56bd194654cc07cca26041 SHA512 5831d2c3608ee8fa5477283b6dfddaedb6730da5da0568261b17e22117c6c4a5a2ae21ed0d6d5549cbcab88f9dd3823462a1fff487ec5335ac1dff867e715a63
+DIST installer-1.0.1.tar.gz 481132 BLAKE2B 95bf26cb5d14c934f8126b656aec519a51199ec9ea95bc903016a170cbc906a884f4571a060c175ca4bb47f27cabf265c91c5c769b62d51158ee66a128aae040 SHA512 cabc4efb8ce66ce85c2139e264f66c449f9e5cf1f8c860afa7f147daf0b983716fe02182ef1f6e4abbc4b6be34d75738a0281c77dda9d48a075c212301278a73
+DIST installer-1.0.1.tar.gz.provenance 9321 BLAKE2B 6df8598216f029c7e524e28ac045fb4f89c529c1e79c6ac15ebe1d68a74b787b3d83855079cc5148f5f14b96b3bca44fdc446643e296dc352c9aa7a3fd1af34e SHA512 593b2a63d4cca980faf0eb1c0125117afeb94c580bac5680e1fdc71e27bfb2cd232fe9c986e2eb5a5b4316e31613eeea428f6800ebcc7f7389321af37c718217
diff --git a/dev-python/installer/installer-1.0.1.ebuild b/dev-python/installer/installer-1.0.1.ebuild
new file mode 100644
index 000000000000..10ef0f43e6e2
--- /dev/null
+++ b/dev-python/installer/installer-1.0.1.ebuild
@@ -0,0 +1,71 @@
+# 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=no
+PYPI_VERIFY_REPO=https://github.com/pypa/installer
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+WHEEL_NAME=$(pypi_wheel_name)
+DESCRIPTION="A library for installing Python wheels"
+HOMEPAGE="
+ https://pypi.org/project/installer/
+ https://github.com/pypa/installer/
+ https://installer.readthedocs.io/en/latest/
+"
+SRC_URI+="
+ $(pypi_wheel_url)
+ verify-provenance? (
+ $(pypi_provenance_url "${WHEEL_NAME}") -> ${WHEEL_NAME}.provenance
+ )
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+
+BDEPEND="
+ app-arch/unzip
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+src_unpack() {
+ if use verify-provenance; then
+ pypi_verify_provenance "${DISTDIR}/${WHEEL_NAME}"{,.provenance}
+ fi
+
+ pypi_src_unpack
+
+ cp "${DISTDIR}/${WHEEL_NAME}" "${WHEEL_NAME}.zip" || die
+ unpack "./${WHEEL_NAME}.zip"
+}
+
+python_compile() {
+ python_domodule src/installer "${WORKDIR}"/*.dist-info
+}
+
+python_test() {
+ local EPYTEST_DESELECT=()
+
+ case ${EPYTHON} in
+ python3.15*)
+ EPYTEST_DESELECT+=(
+ # extra warnings for os.path.commonprefix()
+ tests/test_core.py::TestInstall::test_skips_pycache_and_warns
+ )
+ ;;
+ esac
+
+ epytest
+}
+
+python_install() {
+ distutils-r1_python_install
+ python_optimize
+}
diff --git a/dev-python/ipyparallel/Manifest b/dev-python/ipyparallel/Manifest
index c100d966538e..b4aeca02e01a 100644
--- a/dev-python/ipyparallel/Manifest
+++ b/dev-python/ipyparallel/Manifest
@@ -1,2 +1,4 @@
DIST ipyparallel-9.1.0.tar.gz 4427086 BLAKE2B f219325a7ce0a4ac4f0d215cfa9fac2431074b663fbc3ac316b30031f145ae8291598f54a0bdc923f43d70d65482f65ebc3a51c52b49e627f7ea676a31cda556 SHA512 f62689a5991e7d923d796a1a2caf03c7f0ed4ffc41f70d77002aac9ae24be67b2268e386b3652819c3826beb94b245593874564b707251efdcf4ebe4a9293706
DIST ipyparallel-9.1.0.tar.gz.provenance 9517 BLAKE2B 09a65b092c7241a9812a4c0912e555f637b4b95a6f6fba9d4e958ba35aef7effa0845ec72b3a22d9bd1b07cddd1a93cf89eef2bb20a3c874100b297e2f997551 SHA512 05da5c203eaf715b37d0310a8ce52edd53ad7ceb891056387aebdd8cf1461e72e6b170ded87225370744dd2dceadf8389b512a87217fe2f72ac811c35939c03a
+DIST ipyparallel-9.2.0.tar.gz 4427734 BLAKE2B 80fbe45cda795cff94850c06fad8adcbf455e2e9bcf62df2e0fa4e1d6001fee8ed846eb2de8b2ec53c10906046b87e463af7d561fe97d56e47f708c9b777cdde SHA512 786ee9ca6fef68f1704370732e861c31a3c32f50f0d1eff7862108f4520e528049d5e5f27e52a94bf3027e9a766f7c42e7e033faeaaf7c9bdf85aa71f05454cb
+DIST ipyparallel-9.2.0.tar.gz.provenance 9520 BLAKE2B ad66522837f4a50c6090999b053540b6f0a4446d09287ffb77fa3575051a7f43e17b0780c638d5dd2a1f8a4da77d15915c262451b23c5f8dc7488aaf065d3ca6 SHA512 654549ee1bad4ace3c7b57d7bf044aa32478b030e2446542cb3ae20883e90cb0a71e34c096bcb9846bb64a9967e3ba1b0db74ea053d047a4dcd5ee51b46f3ea5
diff --git a/dev-python/ipyparallel/ipyparallel-9.2.0.ebuild b/dev-python/ipyparallel/ipyparallel-9.2.0.ebuild
new file mode 100644
index 000000000000..81439857d795
--- /dev/null
+++ b/dev-python/ipyparallel/ipyparallel-9.2.0.ebuild
@@ -0,0 +1,77 @@
+# 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/ipython/ipyparallel
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Interactive Parallel Computing with IPython"
+HOMEPAGE="
+ https://ipyparallel.readthedocs.io/
+ https://github.com/ipython/ipyparallel/
+ https://pypi.org/project/ipyparallel/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ dev-python/decorator[${PYTHON_USEDEP}]
+ >=dev-python/pyzmq-25[${PYTHON_USEDEP}]
+ >=dev-python/traitlets-5[${PYTHON_USEDEP}]
+ >=dev-python/ipython-5[${PYTHON_USEDEP}]
+ >=dev-python/jupyter-client-7[${PYTHON_USEDEP}]
+ dev-python/jupyter-server[${PYTHON_USEDEP}]
+ >=dev-python/ipykernel-6.9.1[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ >=dev-python/python-dateutil-2.1[${PYTHON_USEDEP}]
+ dev-python/tqdm[${PYTHON_USEDEP}]
+ >=dev-python/tornado-6.1[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/flit-core[${PYTHON_USEDEP}]
+ test? (
+ dev-python/testpath[${PYTHON_USEDEP}]
+ )
+"
+
+# TODO: package myst_parser
+# distutils_enable_sphinx docs/source
+EPYTEST_PLUGINS=( pytest-asyncio )
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # we don't run a mongo instance for tests
+ ipyparallel/tests/test_mongodb.py::TestMongoBackend
+ # TODO
+ ipyparallel/tests/test_util.py::test_disambiguate_ip
+ # Gets upset that a timeout _doesn't_ occur, presumably because
+ # we're cranking up too many test timeouts. Oh well.
+ # bug #823458#c3
+ ipyparallel/tests/test_asyncresult.py::AsyncResultTest::test_wait_for_send
+ # We could patch the timeout for these too but they're going to be inherently
+ # fragile anyway based on what they do.
+ ipyparallel/tests/test_client.py::TestClient::test_activate
+ ipyparallel/tests/test_client.py::TestClient::test_lazy_all_targets
+ ipyparallel/tests/test_client.py::TestClient::test_wait_for_engines
+)
+
+src_configure() {
+ export IPP_DISABLE_JS=1
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+ # move /usr/etc stuff to /etc
+ mv "${ED}/usr/etc" "${ED}/etc" || die
+}
+
+pkg_postinst() {
+ optfeature "Jupyter Notebook integration" dev-python/notebook
+}
diff --git a/dev-python/lit/Manifest b/dev-python/lit/Manifest
index 789cad0c250d..9319e609e047 100644
--- a/dev-python/lit/Manifest
+++ b/dev-python/lit/Manifest
@@ -13,3 +13,4 @@ DIST llvm-project-21.1.8.src.tar.xz 158958576 BLAKE2B 0d3d4ee920f8e5db50e9815261
DIST llvm-project-21.1.8.src.tar.xz.sig 119 BLAKE2B cffc1825f5778a3e3c128ec3e856ff6ee50687319d621cdf42e895abf67e05cc51cb7493308e2b506ab60dbdbaca7aa75eb9f78d91d42c81f9682a36f4042e9d SHA512 10f58eff58ed6e701d0f123b15e68c82ab8cbdf99b1c86c0d83e3b8553e90ea51055e30327e8e442ded57c8f503e2a2de9ee075e9c28b5ba815a0f8922f8671c
DIST llvm-project-22.1.5.src.tar.xz 167058820 BLAKE2B b0d4bc4db8d03a2201620dec0fcf5c946d86ac152c0feef4252e211eec4542e2fc849e2bafc8bcb57982959d005d70e9a7bd81296fed04f819b7de3f2fc15c43 SHA512 68de113906ec0c843a9346ecd06bff352146869f1f28b5600ff907125d77202692b6f68bd169bcd74ae5b82e0ad5548ea99c2405540abea36880d80e373744ff
DIST llvm-project-22.1.5.src.tar.xz.sig 119 BLAKE2B c756bb5d4ebc9fc3b61115495c75574312ad287dc4bdfc8408da7dcfc781f26c5804d8a4a46af32ad809db80a154aff6cad308742e1e04ca4a93249d6f1a55b4 SHA512 36baf347f79c26705136a7d342e8ee0a8a42939bb1db2d9ce91666b1edbbb04194ff63bc41899e4498cd819e6c2bd6944ea68d972e074e113f48d08e6544c368
+DIST llvm-project-8789401c6f0b2c53ba348860c1b0c5df1fa40c8c.tar.gz 271359638 BLAKE2B 31d1c91b535f129cac4b1da7ce2e6f0765231ebe6a5b1cb83f00d56d68820cdd029f7d2fdf602148e37bc9a22d99b71e25284eab74b8d52fa87ed4636712171f SHA512 4ca908b0b5d7ae9a2b334d033d2c11b557dcc3305b9107017965ae612716beade09a0c73e1a5f5eab1c9794728558d4a981715bb9b01d5ba2c2c5c6c53d1a9b6
diff --git a/dev-python/lit/lit-23.0.0_pre20260512.ebuild b/dev-python/lit/lit-23.0.0_pre20260512.ebuild
new file mode 100644
index 000000000000..d9be9ae795ab
--- /dev/null
+++ b/dev-python/lit/lit-23.0.0_pre20260512.ebuild
@@ -0,0 +1,41 @@
+# 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_{10..14} )
+
+inherit distutils-r1 llvm.org
+
+DESCRIPTION="A stand-alone install of the LLVM suite testing tool"
+HOMEPAGE="https://llvm.org/"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+# Tests require 'FileCheck' and 'not' utilities (from llvm)
+BDEPEND="
+ test? (
+ dev-python/psutil[${PYTHON_USEDEP}]
+ llvm-core/llvm
+ )
+"
+
+LLVM_COMPONENTS=( llvm/utils/lit )
+llvm.org_set_globals
+
+# TODO: move the manpage generation here (from llvm-core/llvm)
+
+src_prepare() {
+ cd "${WORKDIR}" || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local -x LIT_PRESERVES_TMP=1
+ local litflags=$(get_lit_flags)
+ ./lit.py ${litflags//;/ } tests || die
+}
diff --git a/dev-python/mypy/Manifest b/dev-python/mypy/Manifest
index ac25c936f120..a3cb4ebc240e 100644
--- a/dev-python/mypy/Manifest
+++ b/dev-python/mypy/Manifest
@@ -1,3 +1,4 @@
DIST mypy-1.18.2.gh.tar.gz 3468958 BLAKE2B 7c80d839829e2982604c8ed0ee82ca390b9372fb057baaf5ad4b4a8d2dc7ce538b7246342b4691e5c950666360a9788421f540febbc2b19412af80cd4d828907 SHA512 f3cbfdf338b5d994bc077e66721e26a635926d79985f8200af0bd6aa841b076703fa2c798c6d2ceadd7c8c69d4a86af11c5a8f551f13a7fd2b510721af466c54
DIST mypy-1.20.2.gh.tar.gz 3837137 BLAKE2B cc28ad8a145d27dd4f6f395496e44ed80859df634e89fe7d584975107534cf063db97817b5b94665e2b7629ca1fa67c75c0ed2978237f10d68606c33bc6e79d3 SHA512 55affb5d086b18ea16b5cc9fd4bb2fbc99987d444f2c0b6c64aaa9dd87a7790f99385b922eb6afbd5fe0c0ff0a5da9f69ab03bb3d8aac350aa5b2f85174fc130
DIST mypy-2.0.0.gh.tar.gz 3889137 BLAKE2B 8d136d7a07b835514130d258cfc8d70c41b42380e7d8a2deed0df5a7012a083baab7883ca84e4590a724ab9b8429addab7bec0eb4cbc26322d00511d0d818ebe SHA512 07f6009f214da6a014593a3e705b667cb8648fccc4dd84592d0946844826912161179bced0259fc728d3c1828fb59e93ac2945fb95662b09b83190a805465611
+DIST mypy-2.1.0.gh.tar.gz 3916741 BLAKE2B 37bf2f6d79377ebde68537119c0b58ae9cf6868421329b1d5b814e48788749e53cd34053bb5472385881b167cc8af7fdd85cef3c63792868668286516fe27462 SHA512 ae24addeaa7c7f51b43df718482be368e9078c16c42c2449cabed74b98d3a36a701235b092d044c3e452ec84ee26806090f2d38e173d752e8511a178e12cd761
diff --git a/dev-python/mypy/mypy-2.1.0.ebuild b/dev-python/mypy/mypy-2.1.0.ebuild
new file mode 100644
index 000000000000..f2a92bfa1ffe
--- /dev/null
+++ b/dev-python/mypy/mypy-2.1.0.ebuild
@@ -0,0 +1,146 @@
+# 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_{10..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 ~arm64 ~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.3.0[${PYTHON_USEDEP}]
+ >=dev-python/librt-0.11.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.6.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_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_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.14*)
+ 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/nuitka/Manifest b/dev-python/nuitka/Manifest
index 32dea0db83ec..343c07533e6f 100644
--- a/dev-python/nuitka/Manifest
+++ b/dev-python/nuitka/Manifest
@@ -1,2 +1,2 @@
-DIST nuitka-4.0.7.tar.gz 4421537 BLAKE2B 038d091f2ee8628a1f79f20f2739ea7b9e9e6305e5eb83bbedcc709702eef85061fcf062416991e0ff8b499d1a14a20c2afc84118fdd33a3837c786ed81fe1d8 SHA512 e29c8e037b651310cd8c937ee542b5d1d52e2ebd4b7ee475de87dfbebc47c40c8576a44c00a7d2ce2bcfeee1f13eb942ce1c28a31ae5e779cc5e6f06ca9d6485
DIST nuitka-4.0.8.tar.gz 4422692 BLAKE2B c25756242cc778f63d008c76f23a145fa42187bc7a1c51eb95c36547ef819291618a906f33f676473cce9a0877564e8d7184a2f5c137931fd9f1e5ff8715f4c9 SHA512 570564d3ef298b8183b7966408a1d024c0f2218fc613936407a341b5b7771dde35382dedaf9c0976cc9b90db95dbddeba0fb824d421d10d29b2187f3034b9179
+DIST nuitka-4.1.tar.gz 4543258 BLAKE2B 37bb8d5b5a8cb89cf3f8deadb3f995995c2dfe5cac928a14fca857e61aa4e6aa0c3a842c2453346032965cbf2d600a20f1d245f256d41ee55a4abe94d3f7d898 SHA512 d5b5b56214e5ceeffe0fd0b0456e197f094ebec22573c53b998021538362ac6bceaeb8ef25a2e15c8362825b2ad8e3ba2ed6080199e09703ef5e29f53796411d
diff --git a/dev-python/nuitka/nuitka-4.0.7.ebuild b/dev-python/nuitka/nuitka-4.1.ebuild
index 716e2509a99e..716e2509a99e 100644
--- a/dev-python/nuitka/nuitka-4.0.7.ebuild
+++ b/dev-python/nuitka/nuitka-4.1.ebuild
diff --git a/dev-python/pandas/Manifest b/dev-python/pandas/Manifest
index 7631b6c9eda4..fa21465ae279 100644
--- a/dev-python/pandas/Manifest
+++ b/dev-python/pandas/Manifest
@@ -1,3 +1,5 @@
DIST pandas-2.3.3.tar.gz 4495223 BLAKE2B c31604617900d439020dcdd66fcbca1cf3b720b6f4dd8ea51891946ad04774754cf7636a2ffb9fe746d15911a88153d36d4033b6a0207e9c7a1653a0f677570d SHA512 4179acb9fd9d1c5d543bb19b22483b4c2b17a36d5b10270a02ff4d8370b43c16a93673bf5509a5b1d1c960c0fde9238bbbf5b309c6745d2abf3d934535f3fd85
DIST pandas-3.0.2.tar.gz 4645855 BLAKE2B 9d8ccd481d42040a45b990c84acd1ef7ca842bc3e0f80827875aabdf8c4278a2b2f0cedacfd8b73dca4ef36037162fef63e1feffb46d4522c6cc794d9a2052d6 SHA512 71a50f40812f0a5ac80068cc79fb3ec8685f9e21b15ba6cda136465b1258aef5fd8ab4d9b677ef53c6b3f3e8d9939a058457594754c34f9aa6748fc641720ab3
DIST pandas-3.0.2.tar.gz.provenance 9326 BLAKE2B 11ae41e6c60a15415cbed7f43ecd90a23bd8a465588c73002d197706fc2d5680cfb1471a0f5061d27310f01101c99514ed7088649101d49515722093cd54d7a5 SHA512 402b810942056a62eba500802b1bdf5e8db28df3b47e0fb71340a360ee2c2348a0875b877f72e7c6de21f04980d72a8f547838e050a9bbcbd7bcfea0eb117b02
+DIST pandas-3.0.3.tar.gz 4651414 BLAKE2B 8e3da7b646d67025f7e00baff960658326e973a270a6432210e60a1044b33c317a00a8755c5633c64faa337cd66d8fbfb2cfe768916254a7b55f6fc7a49ebc8f SHA512 000b859c42aabf9364bf4e35fcd728a7a4ff4cfdbc7d2d40b4d3739087e1d03704438a2705e9e04a4025f6d98559bbe4c2f4f695c91b2ba4c4347b0444d48202
+DIST pandas-3.0.3.tar.gz.provenance 9318 BLAKE2B f414b7ef172a368dfd3671d637ab14856b62ae5eea6f630a0d638edcda83799e319674e2e03fd6a5d495baec81914d5cb8fce1335effdf8a295b83e812a3ad8a SHA512 f417d27fe7fc0894f93656196fc65f72bd9b7ed0f287267e2da4624e9c2c3e12070135a011aef379e415a98939cf459bf8e6cbb4a0bd93bcfde5683d79d0140e
diff --git a/dev-python/pandas/pandas-3.0.3.ebuild b/dev-python/pandas/pandas-3.0.3.ebuild
new file mode 100644
index 000000000000..feeb308f7289
--- /dev/null
+++ b/dev-python/pandas/pandas-3.0.3.ebuild
@@ -0,0 +1,191 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=meson-python
+PYPI_VERIFY_REPO=https://github.com/pandas-dev/pandas
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="threads(+)"
+
+VIRTUALX_REQUIRED="manual"
+
+inherit distutils-r1 optfeature pypi toolchain-funcs virtualx
+
+DESCRIPTION="Powerful data structures for data analysis and statistics"
+HOMEPAGE="
+ https://pandas.pydata.org/
+ https://github.com/pandas-dev/pandas/
+ https://pypi.org/project/pandas/
+"
+
+LICENSE="BSD"
+SLOT="0"
+if [[ ${PV} != *_rc* ]]; then
+ KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+fi
+IUSE="big-endian full-support minimal test X"
+RESTRICT="!test? ( test )"
+
+RECOMMENDED_DEPEND="
+ >=dev-python/bottleneck-1.3.4[${PYTHON_USEDEP}]
+ >=dev-python/numexpr-2.8.0[${PYTHON_USEDEP}]
+"
+
+# TODO: add pandas-gbq to the tree
+# TODO: Re-add dev-python/statsmodel[python3_11] dep once it supports python3_11
+# https://github.com/statsmodels/statsmodels/issues/8287
+OPTIONAL_DEPEND="
+ >=dev-python/beautifulsoup4-4.14.2[${PYTHON_USEDEP}]
+ dev-python/blosc[${PYTHON_USEDEP}]
+ >=dev-python/html5lib-1.1[${PYTHON_USEDEP}]
+ >=dev-python/jinja2-3.1.2[${PYTHON_USEDEP}]
+ >=dev-python/lxml-4.8.0[${PYTHON_USEDEP}]
+ >=dev-python/matplotlib-3.6.1[${PYTHON_USEDEP}]
+ >=dev-python/openpyxl-3.0.7[${PYTHON_USEDEP}]
+ >=dev-python/sqlalchemy-1.4.36[${PYTHON_USEDEP}]
+ >=dev-python/tabulate-0.8.10[${PYTHON_USEDEP}]
+ >=dev-python/xarray-2022.3.0[${PYTHON_USEDEP}]
+ >=dev-python/xlrd-2.0.1[${PYTHON_USEDEP}]
+ >=dev-python/xlsxwriter-3.0.3[${PYTHON_USEDEP}]
+ >=dev-python/xlwt-1.3.0[${PYTHON_USEDEP}]
+ !arm? ( !hppa? ( !ppc? ( !x86? (
+ >=dev-python/scipy-1.8.1[${PYTHON_USEDEP}]
+ dev-python/statsmodels[${PYTHON_USEDEP}]
+ ) ) ) )
+ !big-endian? (
+ >=dev-python/tables-3.7.0[${PYTHON_USEDEP}]
+ )
+ X? (
+ || (
+ >=dev-python/qtpy-2.2.0[${PYTHON_USEDEP}]
+ x11-misc/xclip
+ x11-misc/xsel
+ )
+ )
+"
+DEPEND="
+ >=dev-python/numpy-2.3.3:=[${PYTHON_USEDEP}]
+"
+COMMON_DEPEND="
+ ${DEPEND}
+ >=dev-python/python-dateutil-2.8.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${COMMON_DEPEND}
+ >=dev-build/meson-1.2.1
+ >=dev-python/cython-3.1.0[${PYTHON_USEDEP}]
+ >=dev-python/versioneer-0.28[${PYTHON_USEDEP}]
+ test? (
+ ${VIRTUALX_DEPEND}
+ ${RECOMMENDED_DEPEND}
+ ${OPTIONAL_DEPEND}
+ dev-libs/apache-arrow[brotli,parquet,snappy]
+ >=dev-python/beautifulsoup4-4.14.2[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-6.46.1[${PYTHON_USEDEP}]
+ >=dev-python/openpyxl-3.0.10[${PYTHON_USEDEP}]
+ >=dev-python/pyarrow-10.0.1[parquet,${PYTHON_USEDEP}]
+ >=dev-python/pymysql-1.0.2[${PYTHON_USEDEP}]
+ >=dev-python/xlsxwriter-3.0.3[${PYTHON_USEDEP}]
+ x11-misc/xclip
+ x11-misc/xsel
+ )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ !minimal? ( ${RECOMMENDED_DEPEND} )
+ full-support? ( ${OPTIONAL_DEPEND} )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_test() {
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # missing test data
+ pandas/tests/io/pytables/test_compat.py
+ )
+ # Note; deselects relative to pandas/
+ local EPYTEST_DESELECT=(
+ # require -Werror
+ # https://github.com/pandas-dev/pandas/pull/63436
+ tests/config/test_config.py::TestConfig::test_case_insensitive
+
+ # deprecation warning
+ 'tests/computation/test_eval.py::TestEval::test_scalar_unary[numexpr-pandas]'
+ )
+
+ if ! tc-has-64bit-time_t; then
+ EPYTEST_DESELECT+=(
+ # Needs 64-bit time_t (TODO: split into 32-bit arch only section)
+ tests/tseries/offsets/test_year.py::test_add_out_of_pydatetime_range
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BusinessDay]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BusinessHour]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BusinessMonthEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BusinessMonthBegin]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BQuarterEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-BQuarterBegin]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-CustomBusinessDay]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-CustomBusinessHour]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-CustomBusinessMonthEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-CustomBusinessMonthBegin]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-MonthEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-MonthBegin]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-SemiMonthBegin]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-SemiMonthEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-QuarterEnd]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-LastWeekOfMonth]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-WeekOfMonth]'
+ 'tests/tseries/offsets/test_common.py::test_apply_out_of_range[tzlocal()-Week]'
+ )
+ fi
+
+ if ! has_version "dev-python/scipy[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/plotting/test_misc.py::test_savefig
+ )
+ fi
+
+ case ${EPYTHON} in
+ python3.14)
+ EPYTEST_DESELECT+=(
+ # crashing
+ tests/resample/test_resampler_grouper.py::test_tab_complete_ipython6_warning
+ )
+ ;;
+ esac
+
+ local -x LC_ALL=C.UTF-8
+ cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
+ "${EPYTHON}" -c "import pandas; pandas.show_versions()" || die
+ # nonfatal from virtx
+ # --no-strict-data-files is necessary since upstream prevents data
+ # files from even being included in GitHub archives, sigh
+ # https://github.com/pandas-dev/pandas/issues/54907
+ nonfatal epytest pandas/tests \
+ --no-strict-data-files -o xfail_strict=false \
+ -m "not single_cpu and not slow and not network and not db" ||
+ die "Tests failed with ${EPYTHON}"
+}
+
+pkg_postinst() {
+ optfeature "accelerating certain types of NaN evaluations, using specialized cython routines to achieve large speedups." dev-python/bottleneck
+ optfeature "accelerating certain numerical operations, using multiple cores as well as smart chunking and caching to achieve large speedups" ">=dev-python/numexpr-2.1"
+ optfeature "needed for pandas.io.html.read_html" dev-python/beautifulsoup4 dev-python/html5lib dev-python/lxml
+ optfeature "for msgpack compression using blosc" dev-python/blosc
+ optfeature "Template engine for conditional HTML formatting" dev-python/jinja2
+ optfeature "Plotting support" dev-python/matplotlib
+ optfeature "Needed for Excel I/O" ">=dev-python/openpyxl-3.0.10" dev-python/xlsxwriter dev-python/xlrd dev-python/xlwt
+ optfeature "necessary for HDF5-based storage" ">=dev-python/tables-3.7.0"
+ optfeature "R I/O support" dev-python/rpy2
+ optfeature "Needed for parts of pandas.stats" dev-python/statsmodels
+ optfeature "SQL database support" ">=dev-python/sqlalchemy-1.4.36"
+ optfeature "miscellaneous statistical functions" dev-python/scipy
+ optfeature "necessary to use pandas.io.clipboard.read_clipboard support" dev-python/qtpy x11-misc/xclip x11-misc/xsel
+}
diff --git a/dev-python/pbs-installer/Manifest b/dev-python/pbs-installer/Manifest
index 249c1f3cd832..661749a52d97 100644
--- a/dev-python/pbs-installer/Manifest
+++ b/dev-python/pbs-installer/Manifest
@@ -1,2 +1,4 @@
+DIST pbs_installer-2026.5.10.tar.gz 72513 BLAKE2B c20f78d1e026c94b4f9a09036fde6eb5fb43a8575a44618a335e34da6e5f82f72317c0e5ce413d149846a696c687f365847daaf7a416491e0b008814db9cc9d4 SHA512 5cc33c12789a4e31ccbad598da5694e939de8e3614db0d55cd3e99d666543df2946351b10593379f88d3eae493ce7ea97bb24a666a206577b5c0731da30e9e86
+DIST pbs_installer-2026.5.10.tar.gz.provenance 9932 BLAKE2B 3d366fd8f3306ce1e66c338bec1cb776b925ef37081366a946182ce68b3781b0ebca32eba55d29e36f734d1554b34486963116b2360d77693313a53fe78c3640 SHA512 c5394edb6f18fd767af548242ba97738e4a1e062d3467abb30060b7950b305e78895311811abb8389d247727f3eb2478c0efeaa6d1e6970c292c6c4ae7f95506
DIST pbs_installer-2026.5.8.tar.gz 71877 BLAKE2B b85346c84c7e2b8859c44a13e844f015feb6f77938c853aa2f31f6572e23bddc8f4fcff2c0a21c814f20517953ed0f273bd5f6cb2ce1bcca0eb20bad8c78e674 SHA512 e3c3fad7358af454c08e31132a74d77afcbb3400e71c31d87440b194e21f00ebb7c663732329e3f5cad224c99d46a84c6958451379c2f0751afe1b372328be0d
DIST pbs_installer-2026.5.8.tar.gz.provenance 9611 BLAKE2B e5191bb1aaf8f1d3cb427ebe6e27186eeac4392db5cdf4bfefdea45361ac490e198e3a30e8f66c42d2be6d317aba4ec477e5c6cebc4cd5d8889b9358cc37eb98 SHA512 d8e146b3939996443e87d1f9ee0814863c9d0274f5390868245bebdc7ac9f379d7fcbd69c6e6a9e65be68b3dc105b05263eae14745b5ad44fb9c23efd6d60fe8
diff --git a/dev-python/pbs-installer/pbs-installer-2026.5.10.ebuild b/dev-python/pbs-installer/pbs-installer-2026.5.10.ebuild
new file mode 100644
index 000000000000..557165ae6a2a
--- /dev/null
+++ b/dev-python/pbs-installer/pbs-installer-2026.5.10.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=pdm-backend
+PYPI_VERIFY_REPO=https://github.com/frostming/pbs-installer
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Installer for Python Build Standalone"
+HOMEPAGE="
+ https://pypi.org/project/pbs-installer/
+ https://github.com/frostming/pbs-installer/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+# httpx is needed to download builds
+# zstandard is needed to install them
+RDEPEND="
+ $(python_gen_cond_dep '
+ >=dev-python/backports-zstd-1.0.0[${PYTHON_USEDEP}]
+ ' 3.11 3.12 3.13)
+ <dev-python/httpx-1[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.27.0[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests import-check
diff --git a/dev-python/pillow/metadata.xml b/dev-python/pillow/metadata.xml
index ecc6f5f5ac40..6e2cce603760 100644
--- a/dev-python/pillow/metadata.xml
+++ b/dev-python/pillow/metadata.xml
@@ -9,7 +9,13 @@
<remote-id type="cpe">cpe:/a:python:pillow</remote-id>
</upstream>
<use>
- <flag name="imagequant">Build with Image Quantization Library support</flag>
+ <flag name="imagequant">
+ Build with Image Quantization Library support
+ </flag>
+ <flag name="raqm">
+ Support setting text direction, language or font features.
+ Requires <pkg>media-libs/raqm</pkg>.
+ </flag>
</use>
<origin>gentoo-staging</origin>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/pillow/pillow-12.2.0-r1.ebuild b/dev-python/pillow/pillow-12.2.0-r1.ebuild
new file mode 100644
index 000000000000..9bc308a40218
--- /dev/null
+++ b/dev-python/pillow/pillow-12.2.0-r1.ebuild
@@ -0,0 +1,178 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+# setuptools wrapper
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE='tk?,threads(+)'
+
+inherit distutils-r1 multiprocessing toolchain-funcs virtualx
+
+MY_PN=Pillow
+MY_P=${MY_PN}-${PV}
+
+# upstream always fetches from main
+TEST_IMAGE_COMMIT="7077675d2cda485d63de4aefe0fefbf6f655c5a0"
+
+DESCRIPTION="Python Imaging Library (fork)"
+HOMEPAGE="
+ https://python-pillow.github.io/
+ https://github.com/python-pillow/Pillow/
+ https://pypi.org/project/pillow/
+"
+SRC_URI="
+ https://github.com/python-pillow/Pillow/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+ test? (
+ https://github.com/python-pillow/test-images/archive/${TEST_IMAGE_COMMIT}.tar.gz
+ -> pillow-test-images-${TEST_IMAGE_COMMIT}.gh.tar.gz
+ )
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="HPND"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="avif examples imagequant +jpeg jpeg2k lcms raqm test tiff tk truetype webp xcb zlib"
+REQUIRED_USE="
+ raqm? ( truetype )
+ test? ( jpeg jpeg2k lcms tiff truetype )
+"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ avif? ( media-libs/libavif:= )
+ imagequant? ( media-gfx/libimagequant:= )
+ jpeg? ( media-libs/libjpeg-turbo:= )
+ jpeg2k? ( media-libs/openjpeg:2= )
+ lcms? ( media-libs/lcms:2= )
+ tiff? ( media-libs/tiff:=[jpeg,zlib] )
+ truetype? (
+ media-libs/freetype:2
+ media-libs/harfbuzz:=
+ raqm? ( media-libs/raqm:= )
+ )
+ webp? ( media-libs/libwebp:= )
+ xcb? ( x11-libs/libxcb )
+ zlib? ( virtual/zlib:= )
+"
+RDEPEND="
+ ${DEPEND}
+ dev-python/olefile[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/pybind11[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-77[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ virtual/pkgconfig
+ test? (
+ dev-python/defusedxml[${PYTHON_USEDEP}]
+ dev-python/packaging[${PYTHON_USEDEP}]
+ || (
+ media-gfx/imagemagick[png]
+ media-gfx/graphicsmagick[png]
+ )
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-timeout )
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ local PATCHES=(
+ # https://github.com/python-pillow/pillow/pull/7634
+ "${FILESDIR}/${PN}-10.2.0-cross.patch"
+ )
+
+ distutils-r1_src_prepare
+
+ if use test; then
+ mv "${WORKDIR}/test-images-${TEST_IMAGE_COMMIT}"/* \
+ Tests/images || die
+ fi
+
+ # just in case
+ rm -r src/thirdparty/{fribidi-shim,raqm} || die
+}
+
+usepil() {
+ usex "${1}" enable disable
+}
+
+python_configure_all() {
+ cat >> setup.cfg <<-EOF || die
+ [build_ext]
+ debug = True
+ disable_platform_guessing = True
+ $(usepil avif)_avif = True
+ $(usepil imagequant)_imagequant = True
+ $(usepil jpeg)_jpeg = True
+ $(usepil jpeg2k)_jpeg2000 = True
+ $(usepil lcms)_lcms = True
+ $(usepil raqm)_raqm = True
+ $(usepil tiff)_tiff = True
+ $(usepil truetype)_freetype = True
+ $(usepil webp)_webp = True
+ $(usepil xcb)_xcb = True
+ $(usepil zlib)_zlib = True
+ EOF
+
+ tc-export PKG_CONFIG
+ export MAX_CONCURRENCY=$(makeopts_jobs)
+}
+
+src_test() {
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # TODO (is clipboard unreliable in Xvfb?)
+ Tests/test_imagegrab.py::TestImageGrab::test_grabclipboard
+ # requires xz-utils[extra-filters]?
+ Tests/test_file_libtiff.py::TestFileLibTiff::test_lzma
+ )
+
+ case ${EPYTHON} in
+ pypy3.11)
+ EPYTEST_DESELECT+=(
+ Tests/test_imagefile.py::TestImageFile::test_parser
+ Tests/test_file_pdf.py::test_pdf_append_to_bytesio
+ )
+ ;;
+ esac
+
+ case ${ARCH} in
+ ppc)
+ EPYTEST_DESELECT+=(
+ # https://github.com/python-pillow/Pillow/issues/7008
+ # (we've reverted the upstream patch because it was worse
+ # than the original issue)
+ Tests/test_file_libtiff.py::TestFileLibTiff::test_exif_ifd
+ )
+ ;;
+ esac
+
+ "${EPYTHON}" selftest.py --installed || die "selftest failed with ${EPYTHON}"
+ # leak tests are fragile and broken under xdist
+ # nonfatal implied by xvfb
+ nonfatal epytest -k "not leak" || die "Tests failed with ${EPYTHON}"
+}
+
+python_install() {
+ python_doheader src/libImaging/*.h
+ distutils-r1_python_install
+}
+
+python_install_all() {
+ if use examples ; then
+ docinto example
+ dodoc docs/example/*
+ docompress -x /usr/share/doc/${PF}/example
+ fi
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/pygobject/Manifest b/dev-python/pygobject/Manifest
index 5205a7601e5d..129669c075b5 100644
--- a/dev-python/pygobject/Manifest
+++ b/dev-python/pygobject/Manifest
@@ -2,6 +2,8 @@ DIST pygobject-3.50.1.tar.gz 1081846 BLAKE2B 7c6fd07e913f64d925838efc6fa0603fef2
DIST pygobject-3.50.2.tar.gz 1085854 BLAKE2B 03dc6dc4bd6533d23b8f88705ef371faedf592d98405f91969b910a44a253b29bda6367a9d4f7b7d2dbea7d695a0d1dae6cfc004553f16ab4bbc0e2017c8b591 SHA512 2daed81cfcdcefbd0fc9ffb7ce80c1daa223ecc8266a29a535e47dffd1656fb54dcead1a06c943e08ca92d28ac58ed7916b3f40105b17be7e1f272b9f893f15f
DIST pygobject-3.52.3.tar.gz 1235825 BLAKE2B f9d95ff9e12b6d6fb5c36d1528ff4ef45e6799316ac21b0f79364dc438bf4e0e6670489f23e0ca4325fc21d16cc2d96fe6aff61f71b8bfe768df2c487717e6df SHA512 06085df458076120017ace7a029ac6c00757ae1882a2a50041aadd7f4c2a329a0fb4d18dde02a481c1f4d3acecbc9d8f473f4ae23fbbfc4f885f75bbc7847f24
DIST pygobject-3.52.3_0a8b2c56331a31d7f7096faaa1c1c26467b51c15_pythoncapi-compat.gh.tar.gz 50124 BLAKE2B 67bb1e60d10d72b146ae2f8ca0113939916fa67a3c71c3658343ff3742315768471e50c0254a3f9488031297d6697dbb0e8541bfe72e8b0754ede09fb9d65da8 SHA512 3fff69f471e28b47bbb537d31d182180631090c00aaf45931aad128f4cb700cdfd519ce560610b7e57132ad7d172b8f2bc4cd16cf748f218dafdadd15fc48718
+DIST pygobject-3.52.4.tar.gz 1247281 BLAKE2B eb35e3ba58d9bcfc84e724b7dded816ed3094f3b64f5b8785cc9ca656973c0f4e1518c2ad9d2008edd20da1ca6056daac0658464a4619c4b19724de6efb17618 SHA512 14779aa57ab57b62791fbe2c0e00649108e650a13ce4bb0631a5b7aece9e5094ba61c682e7ce462acecc01cd53e969ac84f783807ac5cad95e07673a1b92c1cf
+DIST pygobject-3.52.4_0a8b2c56331a31d7f7096faaa1c1c26467b51c15_pythoncapi-compat.gh.tar.gz 50124 BLAKE2B 67bb1e60d10d72b146ae2f8ca0113939916fa67a3c71c3658343ff3742315768471e50c0254a3f9488031297d6697dbb0e8541bfe72e8b0754ede09fb9d65da8 SHA512 3fff69f471e28b47bbb537d31d182180631090c00aaf45931aad128f4cb700cdfd519ce560610b7e57132ad7d172b8f2bc4cd16cf748f218dafdadd15fc48718
DIST pygobject-3.54.5.tar.gz 1274658 BLAKE2B 7541502dd4d0f62680d12ebb00f1039c6b33e9c1996500a3d0e54c6c87d719e99e32469d68cfdb04e8e8eaed70e2461739ea176e7bf98100f2329c7084425b5e SHA512 0036068922de03dfa15335b29eb27a9cfd85310b66eae4eb6cb895c427a9fbf3c65462930e981f03b9394bede6fe97639e0bdbee640373188a9c51ad03b65041
DIST pygobject-3.56.2.tar.gz 1409059 BLAKE2B 9d0ea5b94edc966d8355169d85e79ea0446544f7560832e2be85314c30e739ed71efa877c9111a2a08a388edc9353b6ea5a8678acf681dcc1612ed62493bcaf3 SHA512 8be3ac43fad2aba79bfea05616f66511378fe9b316fe33d9c622af5c7b1ab260e4a513a5f6efe26e261eb6c05763391b327b58563cc551cbd2f25266e8a1826a
DIST pygobject-3.56.3.tar.gz 1411853 BLAKE2B 032644b8a7b3e366e7c8ea9943f5a63ddca27a1c2c43a007c7e0e15dff7611b0f210e0ca43fd1e9ed63aa74f9d346becc489ec943bbb6fd9da6af2ed8a3b97fb SHA512 7267e04c02436fb88eddac463546275c7ebda7295f4d250c27a37114a589676d340c0876ad953523c20dd52cfd7d8883cefd5c1b3dd7115a96645f1a32ba0d99
diff --git a/dev-python/pygobject/pygobject-3.52.4.ebuild b/dev-python/pygobject/pygobject-3.52.4.ebuild
new file mode 100644
index 000000000000..9dd3919099c2
--- /dev/null
+++ b/dev-python/pygobject/pygobject-3.52.4.ebuild
@@ -0,0 +1,102 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=no
+GNOME_TARBALL_SUFFIX="gz"
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit gnome.org meson virtualx xdg distutils-r1
+
+DESCRIPTION="Python bindings for GObject Introspection"
+HOMEPAGE="
+ https://pygobject.gnome.org/
+ https://gitlab.gnome.org/GNOME/pygobject/
+"
+COMMIT=0a8b2c56331a31d7f7096faaa1c1c26467b51c15
+SRC_URI+="
+ https://github.com/python/pythoncapi-compat/archive/${COMMIT}.tar.gz -> \
+ ${P}_${COMMIT}_pythoncapi-compat.gh.tar.gz
+"
+LICENSE="LGPL-2.1+"
+SLOT="3"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos ~x64-solaris"
+IUSE="+cairo test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-libs/glib-2.80:2
+ >=dev-libs/gobject-introspection-1.84:=
+ dev-libs/libffi:=
+ cairo? (
+ >=dev-python/pycairo-1.16.0[${PYTHON_USEDEP}]
+ x11-libs/cairo[glib]
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ test? (
+ >=app-accessibility/at-spi2-core-2.46.0[introspection]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ x11-libs/gdk-pixbuf:2[introspection,jpeg]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ )
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}/Skip-test-using-dbus-in-sandbox.patch"
+ "${FILESDIR}/Skip-test-detecting-cycle-among-base-classes-typeerr.patch"
+)
+
+src_unpack() {
+ default
+ unpack "${P}_${COMMIT}_pythoncapi-compat.gh.tar.gz"
+}
+
+src_prepare() {
+ default
+ find "${S}/subprojects/pythoncapi-compat" -mindepth 1 ! -name meson.build -exec rm -vrf {} + || die
+ mv -v "${WORKDIR}/pythoncapi-compat-${COMMIT}"/* "${S}/subprojects/pythoncapi-compat" || die
+}
+
+python_configure() {
+ local emesonargs=(
+ $(meson_feature cairo pycairo)
+ $(meson_use test tests)
+ -Dpython="${EPYTHON}"
+ )
+ meson_src_configure
+}
+
+python_compile() {
+ meson_src_compile
+}
+
+src_test() {
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ local -x GIO_USE_VFS="local" # prevents odd issues with deleting ${T}/.gvfs
+ local -x GIO_USE_VOLUME_MONITOR="unix" # prevent udisks-related failures in chroots, bug #449484
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ local -x XDG_CACHE_HOME="${T}/${EPYTHON}"
+
+ if [[ ${EPYTHON} == python3.14* ]] ; then
+ # https://gitlab.gnome.org/GNOME/pygobject/-/issues/694
+ local -x PYTEST_ADDOPTS="-k 'not (ref_count or has_two_refs)'"
+ fi
+
+ meson_src_test --timeout-multiplier 3 || die "test for ${EPYTHON}"
+}
+
+python_install() {
+ meson_src_install
+ python_optimize
+}
diff --git a/dev-python/pytest-jobserver/pytest-jobserver-1.1.0.ebuild b/dev-python/pytest-jobserver/pytest-jobserver-1.1.0.ebuild
index 61e346c33dfd..1edcc7e5fc5e 100644
--- a/dev-python/pytest-jobserver/pytest-jobserver-1.1.0.ebuild
+++ b/dev-python/pytest-jobserver/pytest-jobserver-1.1.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~s390 ~x86"
RDEPEND="
dev-python/pytest[${PYTHON_USEDEP}]
diff --git a/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild b/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
index d71946fd650b..70d347a6c379 100644
--- a/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
+++ b/dev-python/pytest-twisted/pytest-twisted-1.14.3-r1.ebuild
@@ -1,10 +1,8 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-# mgorny: py3.14 fails on hypothesis tests for me (inside crash)
-# I suppose we can skip them but let's test a revdep first
PYTHON_COMPAT=( python3_{10..14} )
DISTUTILS_USE_PEP517=setuptools
diff --git a/dev-python/python-discovery/Manifest b/dev-python/python-discovery/Manifest
index 3bab0761b17c..f7ebe3477ba6 100644
--- a/dev-python/python-discovery/Manifest
+++ b/dev-python/python-discovery/Manifest
@@ -2,3 +2,5 @@ DIST python_discovery-1.2.2.tar.gz 58872 BLAKE2B 0177a23499cd59aef5c7489694a53c7
DIST python_discovery-1.2.2.tar.gz.provenance 9263 BLAKE2B e405c7db48810a177671144bffdc28c8903b74ed846f2f5bcab47134e8e795f061ad3394779551a045feb4debaf2704567547cafefafcbd0a9debecb6ec1425e SHA512 c70313361c0660297335fdce23a7af12eb2f67b7146126ab6bfe3cf783645155e368bc68126b853be91b968da9917e005ecc7f6025a62fa14d1ffc735c31bc85
DIST python_discovery-1.3.0.tar.gz 63925 BLAKE2B 58f80736df5a3187edea63949cc326be9e4c88e7df7be99aae04fade18666b679894db3318d0ec31a6724df9be43bfde503d0643f782bd73c153161105397077 SHA512 dc7567834d23b7879d144be79c35ec343058909ba81dade3921bdea64fdb921ec9b8a354da5aecad3013b9617f5a186f0d4aff5a59c5538a1f0fade9316fc18f
DIST python_discovery-1.3.0.tar.gz.provenance 9310 BLAKE2B 1af3f9f500a8b186e2548bb47ab2bf18376e059712c2d3042138300038b5f254f4daf30bce4dfe6c14f0760fc46f3df71d4efcfda4b50cf02dce866a1ac2b745 SHA512 29626c050fe014cb2ef8e8fd4f738dda7edec6b3b412a22415ff05be81fe9a86f1727073e254e4ae860b47a8c8ea41832335e296f4d8701523b29ce8732efbb7
+DIST python_discovery-1.3.1.tar.gz 68011 BLAKE2B ba0e1e7320a8d5834c80f6218c48badd1668e189daa8d5b4d616dc24b275fa07b154381ff683fb48ac4400004cb1106d46c70b2b1b470eb6b948b0799c9b1e36 SHA512 af8a90cf411d6c914ce12e7f198e92bc166100eff1dbe814b1731abc8913abf7a8a0d44a269bd86985cc19e9235cc3995056014f7bdd02dba5e62af4117bdf47
+DIST python_discovery-1.3.1.tar.gz.provenance 9549 BLAKE2B 46c2c90661a8f0f59f6e33ef9bdcfebf99f194c7d27b5f76bdb9a6c4d2f92d8c1d1eb2fa922f37a8dee7b800eef0685ca49ac2221253c670c4fa3171ac9ec0bf SHA512 df2a72238637c04fa7d7ba316a82a18bf1c057bd21fea7a4278d26a7eec156614c56ea47209ce875de42d82a5dce84d176e223e2504edf1ef6ab89713f11af5a
diff --git a/dev-python/python-discovery/python-discovery-1.3.1.ebuild b/dev-python/python-discovery/python-discovery-1.3.1.ebuild
new file mode 100644
index 000000000000..7bf748143147
--- /dev/null
+++ b/dev-python/python-discovery/python-discovery-1.3.1.ebuild
@@ -0,0 +1,57 @@
+# Copyright 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/python-discovery
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python interpreter discovery"
+HOMEPAGE="
+ https://github.com/tox-dev/python-discovery/
+ https://pypi.org/project/python-discovery/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~s390 ~x86"
+
+RDEPEND="
+ >=dev-python/filelock-3.15.4[${PYTHON_USEDEP}]
+ <dev-python/platformdirs-5[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-4.3.6[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/setuptools-75.1[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-mock )
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=()
+
+ case ${EPYTHON} in
+ python3.*t)
+ EPYTEST_DESELECT+=(
+ # TODO
+ tests/test_py_info_extra.py::test_satisfies_path_not_abs_basename_match
+ )
+ ;;
+ python3.15)
+ EPYTEST_DESELECT+=(
+ # TODO
+ tests/test_discovery.py::test_predicate_with_fallback_specs
+ )
+ ;;
+ esac
+
+ epytest
+}
diff --git a/dev-python/pyxattr/pyxattr-0.8.1.ebuild b/dev-python/pyxattr/pyxattr-0.8.1.ebuild
index 0713ea5019b7..e47444574cb4 100644
--- a/dev-python/pyxattr/pyxattr-0.8.1.ebuild
+++ b/dev-python/pyxattr/pyxattr-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/reportlab/Manifest b/dev-python/reportlab/Manifest
index f053889db5e5..37b9fb848aa0 100644
--- a/dev-python/reportlab/Manifest
+++ b/dev-python/reportlab/Manifest
@@ -1,3 +1,4 @@
DIST pfbfer-20070710.zip 677333 BLAKE2B 100214476a361a5e5d1f3da0999591345f6e3a3f8c6bc3f6a3e9eca734190c6259758a43302c6e41254d33491fe535eb7d5dd07aa9727c912424bebc31fc18df SHA512 6fd4a5d955464b10d13a7b748703450c1fe120d5ed09e8cfa1b4dfa9c183c59fe001df29433af551796b0df62544b7ddc364f9bb1bdcc2cd300434340ffcc4f2
DIST reportlab-4.4.10.tar.gz 3714962 BLAKE2B aecd293b9db9a303599b56ae906a0da17dde5fcd743baeee605f70d0e1e2e033a69163390b84bfe13b592b0e77ee86c3915dfb82d51a8e5ce446cb133fe7f1a9 SHA512 568d1725826b20d9a1286ef1477dac157b7e291aae7e17605633776693677dbbd4d49a6385f5ed456db31686651306e4b62e61840f11773b13dc6704119010a9
DIST reportlab-4.5.0.tar.gz 3914127 BLAKE2B b20824376e34aa4b3044521fcbfab799b2ec4cd72e3cae22335387daed43eb2dd0a5213de6cd8203dfa846fb976a16e048b59249e0492f2f6d8c10af7ffe1d91 SHA512 7f9ecf4d0b94b22c4d3c39cf61de8a8eadbea5f4783550bd8cefbe2368ec8e40ca69593710aeb62c9c0e26a8d35143c5ca9f6b8c360c71ebb0ab3bd8727a0171
+DIST reportlab-4.5.1.tar.gz 3939748 BLAKE2B 652a9b82d2a19376876a91f421a5d0f5f39cd90480bd806098c1c51fecbd47ff6fd55b97941988a029c4ed9f1ac859d0f0930d1953d313931aa06e46dfe38c7c SHA512 ff5f62cd01175491e54e81f8bd94e26010d5ae2b066de8e089d21f20d229a54b86b8364e9ffdd78fce75950f2137eb805fd5be7950b78a6bb2dde79009d1f49d
diff --git a/dev-python/reportlab/reportlab-4.5.1.ebuild b/dev-python/reportlab/reportlab-4.5.1.ebuild
new file mode 100644
index 000000000000..5a460e791a12
--- /dev/null
+++ b/dev-python/reportlab/reportlab-4.5.1.ebuild
@@ -0,0 +1,53 @@
+# 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_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Tools for generating printable PDF documents from any data source"
+HOMEPAGE="
+ https://www.reportlab.com/
+ https://pypi.org/project/reportlab/
+"
+SRC_URI+="
+ https://www.reportlab.com/ftp/fonts/pfbfer-20070710.zip
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ dev-python/charset-normalizer[${PYTHON_USEDEP}]
+ dev-python/pillow[tiff,truetype,jpeg(+),${PYTHON_USEDEP}]
+"
+BDEPEND="
+ app-arch/unzip
+"
+
+distutils_enable_sphinx docs/source
+
+src_unpack() {
+ unpack ${P}.tar.gz
+ cd ${P}/src/reportlab/fonts || die
+ unpack pfbfer-20070710.zip
+}
+
+src_configure() {
+ cat > local-setup.cfg <<-EOF || die
+ [OPTIONS]
+ no-download-t1-files = 1
+ EOF
+}
+
+python_test() {
+ pushd tests >/dev/null || die
+ "${EPYTHON}" runAll.py --post-install --verbosity=2 ||
+ die "Testing failed with ${EPYTHON}"
+ popd >/dev/null || die
+}
diff --git a/dev-python/requests-cache/Manifest b/dev-python/requests-cache/Manifest
index fa21db70952b..e97356b5ae9f 100644
--- a/dev-python/requests-cache/Manifest
+++ b/dev-python/requests-cache/Manifest
@@ -1 +1,2 @@
DIST requests-cache-1.3.1.gh.tar.gz 1812337 BLAKE2B 302d9c6f1287901b189c74392ba0af063bf0e0ed424b85575e1cd98405f0e51225cf43f4b745d1aa89fd892721e6d2722796d77ae52bec684cee546679afb15b SHA512 68561a4b004ad99d69062a0237272ea772694df971facb5ab28388e36695e2307d21bc0eb70ef094acefaeafc586fb19151e7e3cb16deeff724e21bb035139d6
+DIST requests-cache-1.3.2.gh.tar.gz 1827145 BLAKE2B 360ecabd8149071578ebb0f0dfef00040b64d2714e6f92c3c47027cfca7802627f0e7bd84a16b7dc04158424dc9037860d02c6b462047c63c0a4bf82ec5fa327 SHA512 4acbb40180bab12c684370dfcbca9049fc2ee4766624b9d85fc88cfdf03a6f24f577bb167e2ab78134e76ac73009605887d8d5fdb258f193f6066f86226817a4
diff --git a/dev-python/requests-cache/requests-cache-1.3.2.ebuild b/dev-python/requests-cache/requests-cache-1.3.2.ebuild
new file mode 100644
index 000000000000..8d25f102f64f
--- /dev/null
+++ b/dev-python/requests-cache/requests-cache-1.3.2.ebuild
@@ -0,0 +1,87 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+# TODO: see if we can remove pypy3.11, because of the segfaults
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1 optfeature
+
+DESCRIPTION="Persistent cache for requests library"
+HOMEPAGE="
+ https://pypi.org/project/requests-cache/
+ https://github.com/requests-cache/requests-cache/
+"
+SRC_URI="
+ https://github.com/requests-cache/requests-cache/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+
+RDEPEND="
+ >=dev-python/attrs-21.2[${PYTHON_USEDEP}]
+ >=dev-python/cattrs-22.2[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-2.5[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.22[${PYTHON_USEDEP}]
+ >=dev-python/urllib3-1.25.5[${PYTHON_USEDEP}]
+ >=dev-python/url-normalize-2.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/itsdangerous[${PYTHON_USEDEP}]
+ dev-python/responses[${PYTHON_USEDEP}]
+ >=dev-python/rich-10.0[${PYTHON_USEDEP}]
+ >=dev-python/ujson-5.4[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ ' 'python*')
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-httpbin requests-mock )
+: ${EPYTEST_TIMEOUT:=60}
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # These require extra servers running
+ tests/integration/test_dynamodb.py
+ tests/integration/test_gridfs.py
+ tests/integration/test_mongodb.py
+ tests/integration/test_redis.py
+ )
+ local EPYTEST_DESELECT=(
+ # Requires Internet access
+ tests/integration/test_upgrade.py::test_version_upgrade
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # "database is locked", upstream probably relies on GC
+ # too much
+ tests/integration/test_sqlite.py
+ # random segfaults
+ tests/integration/test_filesystem.py
+ )
+ ;;
+ esac
+
+ local -x USE_PYTEST_HTTPBIN=true
+ epytest
+}
+
+pkg_postinst() {
+ optfeature "redis backend" "dev-python/redis"
+ optfeature "MongoDB backend" "dev-python/pymongo"
+
+ optfeature "JSON serialization" "dev-python/ujson"
+ optfeature "YAML serialization" "dev-python/pyyaml"
+ optfeature "signing serialized data" "dev-python/itsdangerous"
+}
diff --git a/dev-python/requests/Manifest b/dev-python/requests/Manifest
index 12551c41d58d..cd00b980b2c7 100644
--- a/dev-python/requests/Manifest
+++ b/dev-python/requests/Manifest
@@ -1,2 +1,4 @@
DIST requests-2.33.1.tar.gz 134120 BLAKE2B 290c77a0f0d90d04638be623f9a32955902869f89fd6eb8c2e2c3b15cdeb28455ec331c84bdba16d6aa69cb02d8567514a245280a0adf64f653f29aacb944f44 SHA512 058dc417085f8be99c2ea79fffecce833068d9342c925a8d8bd1b10c171e52fda5d4bdd8ae1a93b05b111e275c29b705ec79ac0c365fb10f6f81c49e6d839483
DIST requests-2.33.1.tar.gz.provenance 9256 BLAKE2B 5257b1e8dac44c85b121e04d9591b73d8e2a95ba8ad7d5a45e954d0d676a44b877da0f800bcf934e843ceaf19522bb81eb616c646ad4ac56ee6c3b7ef74a5913 SHA512 5239edd498ff5c27a92a950b75985da8c59064f7abc04809ab71c54e7f3b8b82a268a291b0431560e5fe70266f0fe5a6151fb804c093a9f99c6a6138ba6b80fb
+DIST requests-2.34.0.tar.gz 142436 BLAKE2B 3aa791f8ebc58f6cd0f51883653a6860ba6503071abdd267d3473e6fa9d325aeb3bef46890d4551f946d867482b2396a2328653b08ea4a8e1ef4a7a5a4c7fbbd SHA512 4e3b5c40489b682225667cf46e36058bc22dce6b580e3d01962ea7fa46517e15a775458ebeb970b53fb2f87048f3f09bf09ac599b66c36827622fea7c17e83b6
+DIST requests-2.34.0.tar.gz.provenance 9389 BLAKE2B b25418a2b8160ac911e40d74d6f5e5359752ed956c683acb06e6dc90b13eac198cce8f389f9e6a1ed68f5f7a0317e29bb3723fbfc4a71e6bcf08f604adc15d39 SHA512 8b6387f8c81e3b1d160498992af49991e50f9c85f064a9d4b88b2346f9524d5cc6e1f996b2b347a351b9681d51e1ba28cffb8d51c53d7143fdea99943d953ad1
diff --git a/dev-python/requests/requests-2.34.0.ebuild b/dev-python/requests/requests-2.34.0.ebuild
new file mode 100644
index 000000000000..6914a45b50a2
--- /dev/null
+++ b/dev-python/requests/requests-2.34.0.ebuild
@@ -0,0 +1,75 @@
+# 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_USE_PEP517=setuptools
+PYPI_VERIFY_REPO=https://github.com/psf/requests
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="HTTP library for human beings"
+HOMEPAGE="
+ https://requests.readthedocs.io/
+ https://github.com/psf/requests/
+ https://pypi.org/project/requests/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+IUSE="socks5 test-rust"
+
+RDEPEND="
+ >=dev-python/certifi-2017.4.17[${PYTHON_USEDEP}]
+ <dev-python/charset-normalizer-4[${PYTHON_USEDEP}]
+ <dev-python/idna-4[${PYTHON_USEDEP}]
+ <dev-python/urllib3-3[${PYTHON_USEDEP}]
+ socks5? ( >=dev-python/pysocks-1.5.6[${PYTHON_USEDEP}] )
+"
+
+BDEPEND="
+ test? (
+ dev-python/httpbin[${PYTHON_USEDEP}]
+ >=dev-python/pysocks-1.5.6[${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/trustme[${PYTHON_USEDEP}]
+ )
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{httpbin,mock} )
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # remove useless dependency check spam
+ sed -i -e '/urllib3_version_list =/i\
+ return' src/requests/__init__.py || die
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # Internet (doctests)
+ requests/__init__.py::requests
+ requests/api.py::requests.api.request
+ requests/models.py::requests.models.PreparedRequest
+ requests/sessions.py::requests.sessions.Session
+ # require IPv4 interface in 10.* range
+ tests/test_requests.py::TestTimeout::test_connect_timeout
+ tests/test_requests.py::TestTimeout::test_total_timeout_connect
+ )
+
+ if ! has_version "dev-python/trustme[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ tests/test_requests.py::TestRequests::test_https_warnings
+ )
+ fi
+
+ epytest
+}
diff --git a/dev-python/selenium/Manifest b/dev-python/selenium/Manifest
index f007b010f72e..c765b87081f2 100644
--- a/dev-python/selenium/Manifest
+++ b/dev-python/selenium/Manifest
@@ -3,8 +3,10 @@ DIST selenium-4.35.0.tar.gz 907991 BLAKE2B e2d0baade499b41cdb23bdbae0059163fb581
DIST selenium-4.41.0.tar.gz 937872 BLAKE2B fd176e710970da5435b2d2daad90ad1f6a567dd77d9cfe0cb6980612155a5194c6c80ba7be444e8baade758a91dc2f9cdc6d3ce8fffcd8c31a03271e5f7dbc2c SHA512 517e38b38266e92b66bf072640777e037d1af4321a0399d665a0f2acdb76c574abf65f8e6412e7c606a4937010ffd6bff9c9f323b51c88e80d883b5c909c2de6
DIST selenium-4.42.0.tar.gz 956304 BLAKE2B f43bf9893135bc8b7bf739bccd4155db7200e1262abe0fdd311041066e1f37b7f090da64a17aa693e616bf27adc5e1897c2981356b6af4acb985b929e939be66 SHA512 36a17bd89f5ef03d5b72c981ba4b4e6b3c1173d3e211a9df8cd8fe77c48d99d6471f629dbaf9a2c476a446677b24574e1a37ce2370a4280ae0eb82003d0381ec
DIST selenium-4.43.0.tar.gz 967747 BLAKE2B f0096d6a9a7d6836978f58e866b27f8b55a18ab5759ca2a90547578d36201613bb485f87dbf9f0a7a76f501d8548235d23446d0cb5cfc74a9d6f60300f297845 SHA512 48fd7223a685f9a200d52e81b56b5ccd36add26741ff67ba311e194d14e95061b3c55cf338ba8ea10cd0b2fd436092a382165631616664eb95de30e3d2394f47
+DIST selenium-4.44.0.tar.gz 993133 BLAKE2B 1c8f7f1fdfb21812569651c6086eba57455354b79ab1736d7fbfe6415affafed1f154bb21ead08a66fc5ffc638e05244a60f1ee1e85405b492ba3e84ac8b9f06 SHA512 72dabe202620ed29c9f66936827c257adf44d2f7c98a39724b1d2ef99fd7819875877f2d3cd2b1086f9e544a1f29bb3df6aa516ff8670f3701469b2ce75f5856
DIST selenium-selenium-4.34.2-python.gh.tar.gz 52515190 BLAKE2B 319a7083d5942c1962b4f48f907fea12943a403e4490f74f3cd38662f1c63f57270b27b6039a5a8f29a980540cd0dcf1d1c7560c7ac126f07e491983dc0e81ef SHA512 5ca0b6e970ded3dc93cd55a2c1af7c43063d87f57f119a011313eb7d08faa4057896a56d4eac2e13d39857c94b54f04840a053153cc39008c76cbdd33c8ddbba
DIST selenium-selenium-4.35.0.gh.tar.gz 52550104 BLAKE2B b7ed0fb513cfb2ed24aa8393497b349f930739c3d24a330e5942fbaa5505f31d7086396a430776a3a28a5f65927b92bf27c0a32e8c36d893b5d62ef73151d5ef SHA512 dc73829e3b0fcb7fb7ee1cc04574b95b63d23f67974575dbd66338e14a5cb2b06f983145ce874be0d7124e8828b0a41b99c75d3befb19e04cbf8d027d0bb983a
DIST selenium-selenium-4.41.0.gh.tar.gz 43597635 BLAKE2B fb24f27bf3b64d4da4a117bbb62566b6c1dd6fa85357b9db4a81f17fb5167ca1f2265a0ad8b54efeb14568477390521f5b5774e3278091fd1a0110e5e0d9ce30 SHA512 68cf0ead725d09dcaa8bfe9f239e0f8c0ca7b9dde9d11b8c22dbe53c51611534136f910bc91c9ab237e2b9c106ae06efbe0e0fa9277ef668c4a4935f74613a6c
DIST selenium-selenium-4.42.0.gh.tar.gz 43696997 BLAKE2B 9836b8935586e21d487660f2031c316f9afd6d382a2c2e5f090fe40792215334da90c5d59b7debd612c8bb2146a3595624a5c9e949f84a4d551ec540c59b10e4 SHA512 89309fcadcbc7fdc110aa2a4c58e0f92f3872ff1addacc65813731aaca6ef48869346f69344731926dab84ecdd5a4a53a6968f7c2e953faa3cc4833ff9e511ff
DIST selenium-selenium-4.43.0.gh.tar.gz 43705758 BLAKE2B d10a4167481924becfdc115175b7681ecda287e009288acda448cb81f081d7dc6b1789ae7cca3a8ef93dbcfb15f27bbc3f201b1b10fb9339dc2f5595221221aa SHA512 596c9a7631a25166391d92af931a660fd2bfe0994c720357e47552ca7101f6af2b578f05f160c24765ec81471b6a02af91ee7baf758c9b853d68ca7fbfa0820a
+DIST selenium-selenium-4.44.0.gh.tar.gz 43755091 BLAKE2B 05a58f6cde1bf1a9cdd4aa7dc61a93bedbeed814f6b16c9876cb85879d5aa4f470db569c21b6582673a281af01637237c0e099c79d9dc6e602ceedfc57e1a04d SHA512 6b93db69b9c1196e72b0a762b64b0677d70262428fc5a8dfe8d93847588fa5b78e481e9fa195fac41279ebbe4f1dd354b1217635cabcf7fac1c964a3a8b18e7a
diff --git a/dev-python/selenium/selenium-4.44.0.ebuild b/dev-python/selenium/selenium-4.44.0.ebuild
new file mode 100644
index 000000000000..d44762270fc1
--- /dev/null
+++ b/dev-python/selenium/selenium-4.44.0.ebuild
@@ -0,0 +1,165 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_TESTED=( python3_{11..14} pypy3_11 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+
+inherit distutils-r1 pypi
+
+# base releases are usually ${P}, followups ${P}-python
+TEST_TAG=${P}
+[[ ${PV} != *.0 ]] && TEST_TAG+=-python
+TEST_P=selenium-${TEST_TAG}
+
+DESCRIPTION="Python language binding for Selenium Remote Control"
+HOMEPAGE="
+ https://seleniumhq.org/
+ https://github.com/SeleniumHQ/selenium/tree/trunk/py/
+ https://pypi.org/project/selenium/
+"
+SRC_URI+="
+ test? (
+ https://github.com/SeleniumHQ/selenium/archive/${TEST_TAG}.tar.gz
+ -> ${TEST_P}.gh.tar.gz
+ )
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~x86"
+IUSE="test test-rust"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/certifi-2026.1.4[${PYTHON_USEDEP}]
+ >=dev-python/trio-0.31.0[${PYTHON_USEDEP}]
+ >=dev-python/trio-websocket-0.12.2[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.15.0[${PYTHON_USEDEP}]
+ >=dev-python/urllib3-2.6.0[${PYTHON_USEDEP}]
+ >=dev-python/websocket-client-1.8.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ ${RDEPEND}
+ $(python_gen_cond_dep "
+ dev-python/filetype[\${PYTHON_USEDEP}]
+ dev-python/pytest-mock[\${PYTHON_USEDEP}]
+ dev-python/rich[\${PYTHON_USEDEP}]
+ test-rust? (
+ dev-python/pytest[\${PYTHON_USEDEP}]
+ dev-python/pytest-rerunfailures[\${PYTHON_USEDEP}]
+ >=dev-util/selenium-manager-${PV}
+ net-misc/geckodriver
+ || (
+ www-client/firefox
+ www-client/firefox-bin
+ )
+ )
+ " "${PYTHON_TESTED[@]}")
+ )
+"
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # do not build selenium-manager implicitly
+ sed -e 's:\[tool\.setuptools-rust:[tool.ignore-me:' \
+ -i pyproject.toml || die
+ # unpin deps
+ sed -i -e 's:,<[0-9.]*::' pyproject.toml || die
+ # remove nonsense typing deps
+ sed -i -e '/types/d' -e '/typing/d' pyproject.toml || die
+}
+
+python_test() {
+ # NB: xdist is causing random pytest crashes with high job numbers
+
+ if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
+ einfo "Skipping tests on ${EPYTHON}"
+ return
+ fi
+
+ local EPYTEST_PLUGINS=( pytest-mock )
+ local EPYTEST_IGNORE=()
+ local EPYTEST_DESELECT=(
+ # expects vanilla certifi
+ test/unit/selenium/webdriver/remote/remote_connection_tests.py::test_get_connection_manager_for_certs_and_timeout
+ )
+ local pytest_args=(
+ # https://github.com/SeleniumHQ/selenium/blob/selenium-4.8.2-python/py/test/runner/run_pytest.py#L20-L24
+ # seriously?
+ -o "python_files=*_tests.py test_*.py"
+ )
+ if use test-rust; then
+ local -x PATH=${T}/bin:${PATH}
+ local -x SE_MANAGER_PATH="$(type -P selenium-manager)"
+
+ local EPYTEST_RERUNS=5
+ pytest_args+=(
+ --driver=firefox
+ --browser-binary="$(type -P firefox || type -P firefox-bin)"
+ --driver-binary="$(type -P geckodriver)"
+ --headless
+ )
+
+ local EPYTEST_IGNORE+=(
+ # requires some "python.runfiles", also bidi tests generally fail
+ test/selenium/webdriver/common/bidi_webextension_tests.py
+ # throws some error that pytest doesn't even show
+ test/selenium/webdriver/firefox/ff_installs_addons_tests.py
+ )
+ EPYTEST_DESELECT+=(
+ # expects prebuilt executables for various systems
+ test/selenium/webdriver/common/selenium_manager_tests.py::test_uses_windows
+ test/selenium/webdriver/common/selenium_manager_tests.py::test_uses_linux
+ test/selenium/webdriver/common/selenium_manager_tests.py::test_uses_mac
+ test/selenium/webdriver/common/selenium_manager_tests.py::test_errors_if_invalid_os
+
+ # TODO: these don't respect --*-binary and try to fetch versions
+ test/selenium/webdriver/firefox
+ test/selenium/webdriver/marionette/mn_context_tests.py::test_context_sets_correct_context_and_returns
+ test/selenium/webdriver/marionette/mn_context_tests.py::test_context_sets_correct_context_and_returns
+ test/selenium/webdriver/marionette/mn_options_tests.py::TestIntegration::test_we_can_pass_options
+ test/selenium/webdriver/marionette/mn_set_context_tests.py::test_we_can_switch_context_to_chrome
+
+ # TODO
+ 'test/selenium/webdriver/common/devtools_tests.py::test_check_console_messages[firefox]'
+
+ # TODO
+ test/selenium/webdriver/common/bidi_browser_tests.py
+ test/selenium/webdriver/common/bidi_browsing_context_tests.py
+ test/selenium/webdriver/common/bidi_emulation_tests.py
+ test/selenium/webdriver/common/bidi_errors_tests.py
+ test/selenium/webdriver/common/bidi_input_tests.py
+ test/selenium/webdriver/common/bidi_integration_tests.py
+ test/selenium/webdriver/common/bidi_log_tests.py
+ test/selenium/webdriver/common/bidi_network_tests.py
+ test/selenium/webdriver/common/bidi_permissions_tests.py
+ test/selenium/webdriver/common/bidi_script_tests.py
+ test/selenium/webdriver/common/bidi_session_tests.py
+ test/selenium/webdriver/common/bidi_storage_tests.py
+ test/selenium/webdriver/common/bidi_tests.py
+ test/selenium/webdriver/marionette/mn_options_tests.py::TestUnit::test_binary
+ test/selenium/webdriver/marionette/mn_options_tests.py::TestUnit::test_ctor
+ test/selenium/webdriver/marionette/mn_options_tests.py::TestUnit::test_prefs
+ test/selenium/webdriver/marionette/mn_options_tests.py::TestUnit::test_to_capabilities
+ test/selenium/webdriver/remote/remote_custom_locator_tests.py::test_find_element_with_custom_locator
+ test/selenium/webdriver/remote/remote_custom_locator_tests.py::test_find_elements_with_custom_locator
+
+ # Internet
+ test/selenium/webdriver/remote/remote_server_tests.py::test_download_latest_server
+ test/selenium/webdriver/remote/remote_hub_connection_tests.py::test_command_executor_ssl_certificate_is_verified
+ )
+ else
+ EPYTEST_IGNORE+=(
+ test/selenium
+ )
+ fi
+
+ cd "${WORKDIR}/${TEST_P}/py" || die
+ rm -rf selenium || die
+ epytest "${pytest_args[@]}"
+}
diff --git a/dev-python/tox/Manifest b/dev-python/tox/Manifest
index 5a15b32309fd..ad08e08d631c 100644
--- a/dev-python/tox/Manifest
+++ b/dev-python/tox/Manifest
@@ -2,3 +2,5 @@ DIST tox-4.50.3.tar.gz 266455 BLAKE2B 77a18cb2beeb4df6e80b8cdb718e5c51ea77b54ad0
DIST tox-4.50.3.tar.gz.provenance 9287 BLAKE2B 44e6d623b0de01dc586e4a29fdc70ab11e8a12ae9f6267851502e986e0ca5bcbc29f1f00bd5054752870155e058e660b78454af216eb439e421be94c74e72b8e SHA512 809624f5faa01e2b9141269a3988b51cf427a0b8b9bb3618b13234c3fa07e660d6b9fb65f5339d8a8a97a9a1b87da21facfe700dee278af974e69852bd5df695
DIST tox-4.53.1.tar.gz 276809 BLAKE2B 18e99c00cf24d12705050f59a2843d26ce0201982512921d365d8c196a43563f296da973a98a1eb1cac86797a344fa82f3e94e8f5eef5e91339dfb86f7c6d6b5 SHA512 b11df73e47c5c63124b9e7e11c44a8c3c39b40d177b411bcbd4218a9875fd658a32712083102ef2a1cae6e75939cd32f7caa00551de753f30f58f7f52ab4e5dd
DIST tox-4.53.1.tar.gz.provenance 9432 BLAKE2B 33d7b56f0658c9fd009862674eb1b7c7d140af1a19a6c424765c4731376565d4d71b4c99b712782369fff1b7ad2a37c25d7bb5e0c3e64c0de86f3c867cbee63e SHA512 c626b2095aa0d1c94552a56b05cdf66fefd7a5eda1c6db33c3ebfa52bd4e96b118754412d6da872675b0fc76224c9c2e53abbd507b3b10aeac24d752e839df34
+DIST tox-4.54.0.tar.gz 279256 BLAKE2B f1a1265879ce21f9f4005268dd5800dd7d84d6c914f453d75c86fca6176aaab7c8e2c7a8091bc9103320469ab7c8b82f6faecb9473521f9442f818ca1a94d741 SHA512 923f622c8c0706a7d667e74b1ff42ec9c8ef578bc59e335cbb03ec3b654025263350241ee72c775499519f9d0b504fa859fe365b9435f25698c84449a3e217ed
+DIST tox-4.54.0.tar.gz.provenance 9424 BLAKE2B b9f9dee2859d4e640edd8e9ca8274a2715c25a11fe4639ec0b210f9565a12a50523c7f3e051f370259a70772b29abd617b28fa177da7bdc69179b8bd8ff35cf7 SHA512 efdf4aabc3d64219f842c06b9b8ae07b1532076269bd4753bf11e93ff59498337e35eb436f5c5a43028ba4027cd63b5d216febdeb6e0ec9208a435305c8a785f
diff --git a/dev-python/tox/tox-4.54.0.ebuild b/dev-python/tox/tox-4.54.0.ebuild
new file mode 100644
index 000000000000..1ea7932f5f65
--- /dev/null
+++ b/dev-python/tox/tox-4.54.0.ebuild
@@ -0,0 +1,97 @@
+# 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_{10..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 ~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}]
+"
+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}]
+ $(python_gen_cond_dep '
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ ' 'python*')
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{mock,rerunfailures,timeout,xdist} )
+# xdist seems to mess up state between successive implementation runs
+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
+ )
+
+ case ${EPYTHON} in
+ python*)
+ local EPYTEST_PLUGINS=( "${EPYTEST_PLUGINS[@]}" time-machine )
+ ;;
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[explicit-True-True]'
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[requirements-True-True]'
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[constraints-True-True]'
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[explicit+requirements-True-True]'
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[requirements_indirect-True-True]'
+ 'tests/tox_env/python/pip/test_pip_install.py::test_constrain_package_deps[requirements_constraints_indirect-True-True]'
+ )
+ ;;
+ esac
+
+ epytest -o addopts=
+}
diff --git a/dev-python/translate-toolkit/Manifest b/dev-python/translate-toolkit/Manifest
index 1533c1c1bf06..45adfedb32f4 100644
--- a/dev-python/translate-toolkit/Manifest
+++ b/dev-python/translate-toolkit/Manifest
@@ -3,3 +3,4 @@ DIST translate-3.19.5.gh.tar.gz 1320567 BLAKE2B ea27702656b25423fa71f0624d68a82d
DIST translate-3.19.6.gh.tar.gz 1327150 BLAKE2B a1337276a2a15a7d522e86def20df4137fec8f566df8ca1ec945b12e627a4ebf78aaace4266ef1ef00dca5ac30b3767dea0a1dcd79d3fe8bb8b5cf74dcff1117 SHA512 c21c563e530fe3550c1e5d97f30cb861f47bcde867547a07aaa992fe8721ad20fa18a2a2227fccd2b458cf14a2788137176a1eff5b11f4cfbc4f5cbdfdfc7729
DIST translate-3.19.7.gh.tar.gz 1328643 BLAKE2B e0806de1ecfcc7b3d362663d28b1093b5ab34e097a01d5a70c94174df32e3b469cc536e494afc68e59def8fe67b1e35330a63f5946c9ccaafec89ceb8b472fbe SHA512 f280f832e49e403f25e6a2a9236c5f4ed66cc129b2bf6be6a521b477ec0dce27d2315ecb9383a695932121bec39ff5c10b60e97911de5e6ba810bcc249e7f875
DIST translate-3.19.8.gh.tar.gz 1350675 BLAKE2B f73cca746d3486e5e1ad4b4d42dc9b5fe6fd72f8ce54bba02b6e8c5a92c48d5d7ce954ac0a30466ec6274f6f29ccd73340344c664eaeb1d19770253dc6264c99 SHA512 c10231dcad6ba81651fd1a3d53ad40cd18a2b38425c643967bff66118fe6ee01e4b6feed68200afca14bc27e1b22db0c68ef9768429621431b67cbd172469dfb
+DIST translate-3.19.9.gh.tar.gz 1349891 BLAKE2B 208c516d9c69faaa6fd19a4c04264ba3fc64c33c0cd6000b639ca13201dc52250d1203531260f952efd1fef87eae3600e5adc9826ef10319c3c3683f70486914 SHA512 10389b6ec7664a7d27cf87cef2b5857d79234ad2a3df51ce7853eb70f8872f9fac6ac54799ed5058d935b805bf5d3f82cdf86ae7b9f07419e5cca35b956b1673
diff --git a/dev-python/translate-toolkit/translate-toolkit-3.19.9.ebuild b/dev-python/translate-toolkit/translate-toolkit-3.19.9.ebuild
new file mode 100644
index 000000000000..223963d5c476
--- /dev/null
+++ b/dev-python/translate-toolkit/translate-toolkit-3.19.9.ebuild
@@ -0,0 +1,131 @@
+# 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_{10..14} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1
+
+MY_P=translate-${PV}
+DESCRIPTION="Toolkit to convert between many translation formats"
+HOMEPAGE="
+ https://github.com/translate/translate/
+ https://pypi.org/project/translate-toolkit/
+"
+SRC_URI="
+ https://github.com/translate/translate/archive/${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S="${WORKDIR}"/${MY_P}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+IUSE="+html +ical +ini +subtitles +yaml"
+
+RDEPEND="
+ app-text/iso-codes
+ >=dev-python/chardet-3.0.4[${PYTHON_USEDEP}]
+ dev-python/cheroot[${PYTHON_USEDEP}]
+ >=dev-python/levenshtein-0.12.0[${PYTHON_USEDEP}]
+ >=dev-python/lxml-5.2.0[${PYTHON_USEDEP}]
+ >=dev-python/mistletoe-1.1.0[${PYTHON_USEDEP}]
+ >=dev-python/pyparsing-3[${PYTHON_USEDEP}]
+ dev-python/ruamel-yaml[${PYTHON_USEDEP}]
+ dev-python/tomlkit[${PYTHON_USEDEP}]
+ >=dev-python/unicode-segmentation-rs-0.2.0[${PYTHON_USEDEP}]
+ >=dev-python/wcwidth-0.2.14[${PYTHON_USEDEP}]
+ sys-devel/gettext
+ html? ( dev-python/utidylib[${PYTHON_USEDEP}] )
+ ical? ( dev-python/vobject[${PYTHON_USEDEP}] )
+ ini? ( >=dev-python/iniparse-0.5[${PYTHON_USEDEP}] )
+ subtitles? ( media-video/gaupol[${PYTHON_USEDEP}] )
+ yaml? ( dev-python/pyyaml[${PYTHON_USEDEP}] )
+"
+# Technically, the test suite also has undeclared dependency
+# on dev-python/snapshottest but all the tests using it are broken
+# anyway, so we skip them.
+BDEPEND="
+ test? (
+ dev-python/phply[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # strip unnecessary pins
+ sed -i -e 's:,<[0-9.]*::' pyproject.toml || die
+}
+
+src_test() {
+ # unfortunately, this bad quality package doesn't support XDG_DATA_DIRS
+ # correctly, so we need to reassemble all data files in a single directory
+ local -x XDG_DATA_HOME=${T}/share
+ cp -r translate/share "${T}/" || die
+ cp -r "${ESYSROOT}"/usr/share/gaupol "${XDG_DATA_HOME}"/ || die
+
+ distutils-r1_src_test
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # Fails with network-sandbox (and even with it off but w/ softer fail)
+ 'tests/xliff_conformance/test_xliff_conformance.py::test_open_office_to_xliff'
+ 'tests/xliff_conformance/test_xliff_conformance.py::test_po_to_xliff'
+ # all tests based on snapshottest are broken and I'm too tired
+ # to figure this out
+ tests/translate/tools/test_pocount.py::test_{cases,output}
+ tests/translate/tools/test_junitmsgfmt.py::test_output
+ tests/cli/test_cli_snapshots.py
+ )
+ local EPYTEST_IGNORE=(
+ # unpackaged fluent.*
+ tests/translate/storage/test_fluent.py
+ tests/translate/convert/test_fluent2po.py
+ # changes directory and does not change it back, sigh
+ tests/odf_xliff/test_odf_xliff.py
+ )
+
+ if ! has_version "dev-python/iniparse[${PYTHON_USEDEP}]"; then
+ EPYTEST_IGNORE+=(
+ translate/convert/test_ini2po.py
+ translate/convert/test_po2ini.py
+ )
+ fi
+
+ if ! has_version "media-video/gaupol[${PYTHON_USEDEP}]"; then
+ EPYTEST_IGNORE+=(
+ translate/storage/test_subtitles.py
+ )
+ fi
+
+ epytest
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ insinto /usr
+ doins -r translate/share
+
+ if ! use html; then
+ rm "${ED}"/usr/bin/{html2po,po2html} || die
+ fi
+ if ! use ical; then
+ rm "${ED}"/usr/bin/{ical2po,po2ical} || die
+ fi
+ if ! use ini; then
+ rm "${ED}"/usr/bin/{ini2po,po2ini} || die
+ fi
+ if ! use subtitles; then
+ rm "${ED}"/usr/bin/{sub2po,po2sub} || die
+ fi
+}
diff --git a/dev-python/twisted/Manifest b/dev-python/twisted/Manifest
index b48bcc2d0688..4cc597ff9174 100644
--- a/dev-python/twisted/Manifest
+++ b/dev-python/twisted/Manifest
@@ -1,5 +1,7 @@
DIST twisted-25.5.0.tar.gz 3545725 BLAKE2B 01f24c3c90c3db349efe779a8262abab3004782aedd8534a8c53e5336d77862a3615c83093137074b19af415cdb5572e07c39a74846a128544e8405d9c69864b SHA512 3d023777854fdf54e06f4bbaf3159359767aac9ba33e90d2b2e8abe29815d088e00eebd06944c12610a28c517d9cb397a5104ff153160edabfb91dd16a15f597
DIST twisted-25.5.0.tar.gz.provenance 9203 BLAKE2B 76180b9aa470977a28eb3a2104bf6cf6355cf0585df5cf8e07420e3878df32e92ae23eef7bb64bd3fb8d863c4b3727daf44074d2a1d5735236f1d24f89711797 SHA512 9f5d3d92194abbbd5ed0bd524a11858f8d75ae8e9cf89bb4689a82053bc107f4eea6adbe2862fc9bba74bd3623eac3183a3bd3163cce4a7eec20e4ee4988afa0
+DIST twisted-26.4.0.tar.gz 3575095 BLAKE2B 63e4e543cbff788e5a6346c00bfa8e85ffcf2ae2606e064b4f58fe97109b6e783681dfc9bbaefbf56f181eeebbb31b2942b6280993307f94d3885499008875e6 SHA512 03b9f8ead925c0cf42c2f74cfb1045fd119e4cb3e197606946b075ce8caf75eb2edad208b610f0ba8628da6b4dda5b29da7f2bd04f76a61a112d45f3e4b8ad22
+DIST twisted-26.4.0.tar.gz.provenance 9440 BLAKE2B b57532a8bf2df72638104c6c06d7fdcb8ee04304db83545056b934e8ec29c8d2b65b97e1faa1f3d19c73b1bae594b5e564f1caad4459c930ddba84800e950ef0 SHA512 3c33b4e511a0e786ae2d5a2e08f4b1af17a15082584b98cbfd109f29e5856a88f4798164b9b30a98ffbdb860c180450832134291d6784eabc756f215c0b717b5
DIST twisted-26.4.0rc2.tar.gz 3575417 BLAKE2B 58f22a8fd475460b2d1db864b622bc2b0825bb24cbcface1a2cf299bb8e8206cd3c418ea8cb7baa0e19fdbeb4a8ef2ae41e66258329e9b232a4730069ff78d0e SHA512 f27629f801103eed16605809149588d2de9c3f8e837acc97f5481f68082024b971e13694c05bd35c90e875d9d0d362b5b824d0c967f4e333e7ae8268dfd77d7b
DIST twisted-26.4.0rc2.tar.gz.provenance 9402 BLAKE2B 28a09a6d6458f0448b00b674a8437b41fe0a27fc9380675986dcb56972c1f440f4a228b59eb87ddbfc8a6d0ac7e1e0e2e0dbcc973edb92f0ed87f5a629be79f6 SHA512 f5adfbb14641ae94ee78ce622c6ea86dc225640106297f70dbeb85ef703f9bfe38a8c6ac1da9ccdf6fdab84d1a43a943b772a04e8e5863a98ca8359f6a0fa6d1
DIST twisted-regen-cache.gz 911 BLAKE2B ffd3fcda6c67ffe6fd3ef581c8d507548396b66ed0708e9a5c790095e579c0d5f0f71596acf05712989da2ddef2b8d437eca973bc4d80ef8a9fa852915f38305 SHA512 95a9b931c73017d16d1b5e6b41345dddffe62b6af1a8e93b5e40d06d3d15be17b0dd0181c767ffeeb791534d463764ef9e066fa6c2ee2ac4b53c86d1da8fce03
diff --git a/dev-python/twisted/files/twisted-26.4.0-py314.patch b/dev-python/twisted/files/twisted-26.4.0-py314.patch
new file mode 100644
index 000000000000..e9c806e8a930
--- /dev/null
+++ b/dev-python/twisted/files/twisted-26.4.0-py314.patch
@@ -0,0 +1,43 @@
+diff --git a/src/twisted/internet/test/test_asyncioreactor.py b/src/twisted/internet/test/test_asyncioreactor.py
+index 2f7bad930d6..bbbb8c834ca 100644
+--- a/src/twisted/internet/test/test_asyncioreactor.py
++++ b/src/twisted/internet/test/test_asyncioreactor.py
+@@ -12,8 +12,8 @@
+ DefaultEventLoopPolicy,
+ Future,
+ SelectorEventLoop,
+- get_event_loop,
+ get_event_loop_policy,
++ get_running_loop,
+ set_event_loop,
+ set_event_loop_policy,
+ )
+@@ -74,14 +74,26 @@ def newLoop(self, policy: AbstractEventLoopPolicy) -> AbstractEventLoop:
+ Make a new asyncio loop from a policy for use with a reactor, and add
+ appropriate cleanup to restore any global state.
+ """
+- existingLoop = get_event_loop()
++ try:
++ existingLoop = get_running_loop()
++ except RuntimeError: # pragma: no branch
++ # For most runs, we should not have any existing loop,
++ # since the tests should leave a clean reactor.
++ # For some cases, like GTK tests,
++ # there might be a running reactor.
++ # To revert the state found at the start of the test
++ # we keep a reference and restore it later.
++ existingLoop = None
+ existingPolicy = get_event_loop_policy()
+ result = policy.new_event_loop()
+
+ @self.addCleanup
+ def cleanUp():
+ result.close()
+- set_event_loop(existingLoop)
++ if existingLoop is not None: # pragma: no cover
++ # Revert the loop found at the start of the test.
++ # See https://github.com/twisted/twisted/pull/11706
++ set_event_loop(existingLoop)
+ set_event_loop_policy(existingPolicy)
+
+ return result
diff --git a/dev-python/twisted/twisted-26.4.0.ebuild b/dev-python/twisted/twisted-26.4.0.ebuild
new file mode 100644
index 000000000000..4d9f6bf1e84b
--- /dev/null
+++ b/dev-python/twisted/twisted-26.4.0.ebuild
@@ -0,0 +1,172 @@
+# 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/twisted/twisted
+PYTHON_TESTED=( python3_{11..14} pypy3_11 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 multiprocessing pypi virtualx
+
+DESCRIPTION="An asynchronous networking framework written in Python"
+HOMEPAGE="
+ https://twisted.org/
+ https://github.com/twisted/twisted/
+ https://pypi.org/project/Twisted/
+"
+SRC_URI+="
+ https://dev.gentoo.org/~mgorny/dist/twisted-regen-cache.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+if [[ ${PV} != *_rc* ]]; then
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+fi
+IUSE="conch http2 serial ssl test websockets"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/attrs-22.2.0[${PYTHON_USEDEP}]
+ >=dev-python/automat-24.8.0[${PYTHON_USEDEP}]
+ >=dev-python/constantly-15.1[${PYTHON_USEDEP}]
+ >=dev-python/hyperlink-17.1.1[${PYTHON_USEDEP}]
+ >=dev-python/incremental-22.10.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.2.0[${PYTHON_USEDEP}]
+ >=dev-python/zope-interface-5[${PYTHON_USEDEP}]
+ conch? (
+ >=dev-python/appdirs-1.4.0[${PYTHON_USEDEP}]
+ >=dev-python/bcrypt-3.2.1[${PYTHON_USEDEP}]
+ >=dev-python/cryptography-38[${PYTHON_USEDEP}]
+ dev-python/pyasn1[${PYTHON_USEDEP}]
+ )
+ http2? (
+ >=dev-python/h2-3.2[${PYTHON_USEDEP}]
+ >=dev-python/priority-1.1.0[${PYTHON_USEDEP}]
+ )
+ serial? (
+ >=dev-python/pyserial-3.0[${PYTHON_USEDEP}]
+ )
+ ssl? (
+ >=dev-python/pyopenssl-25.2.0[${PYTHON_USEDEP}]
+ >=dev-python/service-identity-18.1.0[${PYTHON_USEDEP}]
+ >=dev-python/idna-2.4[${PYTHON_USEDEP}]
+ )
+ websockets? (
+ dev-python/wsproto[${PYTHON_USEDEP}]
+ )
+"
+IDEPEND="
+ >=dev-python/attrs-19.2.0[${PYTHON_USEDEP}]
+ >=dev-python/constantly-15.1[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.2.0[${PYTHON_USEDEP}]
+ >=dev-python/zope-interface-5[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ >=dev-python/hatch-fancy-pypi-readme-22.5.0[${PYTHON_USEDEP}]
+ >=dev-python/incremental-22.10.0[${PYTHON_USEDEP}]
+ test? (
+ ${RDEPEND}
+ $(python_gen_cond_dep '
+ !!dev-python/py
+ >=dev-python/appdirs-1.4.0[${PYTHON_USEDEP}]
+ >=dev-python/bcrypt-3.2.1[${PYTHON_USEDEP}]
+ >=dev-python/constantly-15.1.0[${PYTHON_USEDEP}]
+ >=dev-python/cython-test-exception-raiser-1.0.2[${PYTHON_USEDEP}]
+ >=dev-python/idna-2.4[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.27[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-6.56[${PYTHON_USEDEP}]
+ dev-python/pyasn1[${PYTHON_USEDEP}]
+ >=dev-python/pyhamcrest-2[${PYTHON_USEDEP}]
+ >=dev-python/pyserial-3.0[${PYTHON_USEDEP}]
+ dev-python/wsproto[${PYTHON_USEDEP}]
+ virtual/openssh
+ ssl? (
+ >=dev-python/pyopenssl-25.2.0[${PYTHON_USEDEP}]
+ >=dev-python/service-identity-18.1.0[${PYTHON_USEDEP}]
+ )
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+python_prepare_all() {
+ local PATCHES=(
+ # https://github.com/twisted/twisted/pull/12637
+ "${FILESDIR}/${P}-py314.patch"
+ )
+
+ distutils-r1_python_prepare_all
+
+ # upstream test for making releases; not very useful and requires
+ # sphinx (including on py2)
+ rm src/twisted/python/test/test_release.py || die
+
+ # multicast tests fail within network-sandbox
+ sed -e 's:test_joinLeave:_&:' \
+ -e 's:test_loopback:_&:' \
+ -e 's:test_multiListen:_&:' \
+ -e 's:test_multicast:_&:' \
+ -i src/twisted/test/test_udp.py || die
+}
+
+src_test() {
+ # the test suite handles missing file & failing ioctl()s gracefully
+ # but not permission errors from sandbox
+ addwrite /dev/net/tun
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
+ einfo "Skipping tests on ${EPYTHON} (xfail)"
+ return
+ fi
+
+ # breaks some tests by overriding empty environment
+ local -x SANDBOX_ON=0
+ # for py3.13, see
+ # https://github.com/twisted/twisted/pull/12092#issuecomment-2194326096
+ local -x LINES=25 COLUMNS=80
+ "${EPYTHON}" -m twisted.trial -j "$(makeopts_jobs)" twisted ||
+ die "Tests failed with ${EPYTHON}"
+}
+
+python_install() {
+ distutils-r1_python_install
+
+ # own the dropin.cache so we don't leave orphans
+ > "${D}$(python_get_sitedir)"/twisted/plugins/dropin.cache || die
+
+ python_doscript "${WORKDIR}"/twisted-regen-cache
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ newconfd "${FILESDIR}/twistd.conf" twistd
+ newinitd "${FILESDIR}/twistd.init" twistd
+}
+
+python_postinst() {
+ twisted-regen-cache || die
+}
+
+pkg_postinst() {
+ if [[ -z ${ROOT} ]]; then
+ python_foreach_impl python_postinst
+ fi
+}
+
+python_postrm() {
+ rm -f "${ROOT}$(python_get_sitedir)/twisted/plugins/dropin.cache" || die
+}
+
+pkg_postrm() {
+ # if we're removing the last version, remove the cache file
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ python_foreach_impl python_postrm
+ fi
+}
diff --git a/dev-python/uv-build/Manifest b/dev-python/uv-build/Manifest
index bcf5ef967cd5..88c19707623d 100644
--- a/dev-python/uv-build/Manifest
+++ b/dev-python/uv-build/Manifest
@@ -2,6 +2,7 @@ DIST uv_build-0.11.10.tar.gz 376745 BLAKE2B 8447c14db66981f9188336dc1d8b7918784f
DIST uv_build-0.11.11.tar.gz 376722 BLAKE2B 58e62e3366961b489f1f6e1e8c83d0b770879660d9d3b0c6266dce46c5da8e9887408b09f0f59fd3fecda30adf887012df6390f386fb22843c0bb66e3c813a97 SHA512 ed612caee074c756c8ab242e3e0bf64e76dfddfefa383c3587b675b07e61621504ccaea653733c27ef2dd9b8bef1aa6d21ba1b9b39102d49c9ec3e9d7d13e758
DIST uv_build-0.11.12.tar.gz 377487 BLAKE2B f9d4c1b53f9c4ff2209f2b96a581f01f0a363fa02c6724e3d4f1d10ac3dd8447eb15d2aaac2a2fafe3d8a3fe20bf37a0b65c2e24f771d7f163a09f34a0151d51 SHA512 99747e605f984fb8b9b8d9b68a987cf20f49cec24cb57f795ef393268246366befb390398ca8d447f1178b8ad307376a2dbb62d083b8e987c0d2d5ab8116a6b3
DIST uv_build-0.11.13.tar.gz 377955 BLAKE2B 01f93cb472a2841dd2c516b9a02137fafcf081a3102a45a2ff03b92d4dde9c7a3fc0bc012ca1871a51ac9832f2ba9c9d7f51f0705eec2d239d50cd3c8948dca1 SHA512 d6e2986b16d0dc78a9e03261d70a847186672fbc737be54d6263c2b7992d39561817c2e97e2cd82d64349ed402bbc8b907bd9782ff104988fba9f32504dc9d51
+DIST uv_build-0.11.14.tar.gz 379337 BLAKE2B 26644ced88c39d7022e8c2cc37b8010319cb920b34d86ebfa502cb51f7fdff04a4856b955e451f13494e69834824a8242606c6bcb3b61bdb4a5dc5d459509c71 SHA512 c0d94041389aece658969170de6655ef09bfbce3496aed8e9b044b5af4a1db1288dce34d6ee7d12604d98feed6a3ee9ca95d7868f0a0f130a60d1f0136e6d6be
DIST uv_build-0.11.6.tar.gz 361928 BLAKE2B 800f59a32bab5b850fb30627b6e47c4a2e7bd8d1a292584e2c3b33e2c3aee81907b8e6ebe95298bac607df161e29437cc8a84bb8a44e32435028ab5fd3bf22af SHA512 8a9fc7cca9e42f42db888b6a9f3888393feae79d0ce8ca56568c83cbee977675d8a39a38b820606d1ac685ef99b92a182795c2521f4796865acd774fd73c6bac
DIST uv_build-0.11.7.tar.gz 365752 BLAKE2B 2de7a3656ea9960d2959a6bde66b85979b56e1cedce5ccc38759dae6a165d1d79998bcab3f43e472d91281fe320aadbb00f765776da3f06902b6a81b37d8b0aa SHA512 5ef23796480d36b20d1ca1b5c22eeb86c6634acbe9eb62642044d6c34a8dc45ca59727a77793fa324dbc3656a3659521544387d8afa346879675ff09fef1ca62
DIST uv_build-0.11.8.tar.gz 367238 BLAKE2B 04dfc0cec62b53554b5041f77f0c34794ed2b9890449406af7011182acc23aab77bc087cdfcaf3d360a85169a51c998b4e7c0ddbdda1bdad4f487078226c6890 SHA512 67a5931ba6557c12e1fc668b061c5cfaefea7275fbeac4e658b6e37a748fb67b452b694960cec9bea97bcc4da43e24566a6adfec001057be478d8056894f54a5
diff --git a/dev-python/uv-build/uv-build-0.11.14.ebuild b/dev-python/uv-build/uv-build-0.11.14.ebuild
new file mode 100644
index 000000000000..2ab229426f84
--- /dev/null
+++ b/dev-python/uv-build/uv-build-0.11.14.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_{10..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 bbb47d9048f7..fb8b3f37a268 100644
--- a/dev-python/uv/Manifest
+++ b/dev-python/uv/Manifest
@@ -6,6 +6,8 @@ DIST uv-0.11.12-crates.tar.xz 46797580 BLAKE2B 69c193a4d0d8b81b7ee504ad4439c3647
DIST uv-0.11.12.gh.tar.gz 5259600 BLAKE2B bf43a4b38e37a45d73820e3d445ac38a56314cefcdc0a734cad5b93200ce9e4b689c8aa3125eb34d8aa150ff4b2b94b786dd518a49aacf6d6ce655f66e9506f9 SHA512 a23c95152f0515645174b85ed8887fe29e3e56d457aaad7992cfe5a59b95e527348ebd7e0ce9d23cf589f20849326a876ae61ed9b10324a48b8021077cd264fe
DIST uv-0.11.13-crates.tar.xz 46795796 BLAKE2B d087b947c1c673bffb4095ba3ccdd24251a91e382d702511665af5b4d8a38acc3ebd386405a2f98c256524f71d71ad859aead336d3db73d46ae6ca59dc182d81 SHA512 879dc13c29323b7cc7b84331cab40f6ac0519e564024c2ce9e07df2be5d79be0d3ba6615a98bfba976bd108aedae5953997cc86c94c9907ecb16f8b97e7b891f
DIST uv-0.11.13.gh.tar.gz 5260441 BLAKE2B 36ac78b2857d39b5dc6e24617ed44a0526039723bb5c078713536156524709bca4a8b82f6a9fefa1d66b3e08d6f5c7d2a16ab17c5266d18518e68e3583bd48d0 SHA512 04c6451c1250bf997cd412906d09195234513a160694e31f1dce5dbd04184dfed3307a27948fc32656050cc0d089f05d3f80e31b2ce942e1e93a6de032f90e42
+DIST uv-0.11.14-crates.tar.xz 46820736 BLAKE2B 198e55be6417a2144cfba292ab943eb881bb2d3d99db259cb2cad2199d16f2eef4cc372d4b15bb5a78c6faf90b23163b2fc6366b6a88c0c089ff7113d62d80c7 SHA512 108f22ce909df5caac55e4952e1483222da0a65d64b9969a8c3224923cdf3528ce89f51a9c0a89542e4d536dd72c896a94764b9daac3376799445100705c4db1
+DIST uv-0.11.14.gh.tar.gz 5268861 BLAKE2B 7cea3f62c4756cd961efdf1d949d0dee469fb8ab0475f8f1149756c8ab1a4f767e5c88aa29011f8f6f862d48733ce7d8bb64d7b742d792dad2fd04c1c7d365c1 SHA512 375efa7d4afb3128e5d833f91d9fe91439d0c45c607996dae0cf25bf9b8d1a164858dccd00875020b88377fffecabb6afab8353ef0b7e393c83d64ed2320d3c2
DIST uv-0.11.6-crates.tar.xz 46830584 BLAKE2B 6fbf2c9aa231588833e5cce30da2a9238af8bd22fd849cf45c3ffab52b405bcd6c5b488a9cc6975e09781ce379405c6323d7cb3c330243ae5a7b53efb775d06e SHA512 243e69e5512d09a48d47c76f100dae390e2ea9de51eb4671a9bc84a8fcbbdafe96832b6afc7222185f09f1c11c5aa6a32be9185f723b7dc67e13a94205f759d2
DIST uv-0.11.6.gh.tar.gz 5211342 BLAKE2B 43b6cf60e3a97e70c847878e36d5ae854e7458922121b4b85a9d61d48a1e740c47c408600c92458e4a89d69308fef4833da41b2dd0ad5dbb6ac94b5d2e48c549 SHA512 3f370f98b253dd84706f1724155ba4ed5cafb41b612fa75151aef26dd4f18c85f59d93c5bbddae1c59ea594fdc88857d005b6e8728cdd24f5b37b99ba4ef32cd
DIST uv-0.11.7-crates.tar.xz 46854096 BLAKE2B b4fc06608d3c68910a48af598803b934017787bbf14599f66fa43096aa3ef2cdeca8ee35230ea3b8446da044a29f0b476f58f224732959e8017720e79a0d7cd8 SHA512 9cdcc1f565a3bf4d3490296710a7821e3760164d723057d591bf923e093aac50f51ad209ceed6f8c4e8fd2104ee90363750017bb56de2c76fca5dda7fcee815b
diff --git a/dev-python/uv/uv-0.11.14.ebuild b/dev-python/uv/uv-0.11.14.ebuild
new file mode 100644
index 000000000000..030c2e92591f
--- /dev/null
+++ b/dev-python/uv/uv-0.11.14.ebuild
@@ -0,0 +1,164 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+"
+RUST_MIN_VER="1.93.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 MPL-2.0 Unicode-3.0 Unicode-DFS-2016
+ ZLIB BZIP2
+"
+# 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() {
+ cd crates/uv || die
+ cargo_src_install
+
+ 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/virtualenv/Manifest b/dev-python/virtualenv/Manifest
index 4e9ac3c084ed..8802a30a797b 100644
--- a/dev-python/virtualenv/Manifest
+++ b/dev-python/virtualenv/Manifest
@@ -4,3 +4,5 @@ DIST virtualenv-21.3.0.tar.gz 7614069 BLAKE2B fb7a290013284aced812db3101d767876b
DIST virtualenv-21.3.0.tar.gz.provenance 9425 BLAKE2B 00eeaae90e82280ae4aae553f7ca9839f3b3040970e6e2c4891ee5e8831c0fef3965e57af13ee5c27926cbb80fbfee0efc2dc5d9ffa6ad173f1ddc78645dac59 SHA512 c0ae0f1c862596be9c669ba1d97b5f7d0f713efdb1e48d0cecb1ca968205f71754c5a86cfa2c0ba39be8d5ae6b9b11677fa3990d3027067b687eb7e377c9e92f
DIST virtualenv-21.3.1.tar.gz 7613791 BLAKE2B a62d25304dfb3feff7932b7135ff5c6c9f536a9548c171387201d88d931d5ea33d39c3da92efe0a9a62ca3d77cd9905126030f8e58ad919effd47fb291cd1b52 SHA512 2e445492b2c02e47c57db39bdf7d3506dcf09958a73a814c4629e1e32281d9ca337c381cc61b3da46b583f08a77d7729eb3a655471b0f70196cff90daf4f24a0
DIST virtualenv-21.3.1.tar.gz.provenance 9480 BLAKE2B 5322a3f210b2dbf92684bf0d2e99a9326b375e46135c1c7f3281b94a71d417cff696ea919b1602e61ae16d92642e3dc629c3948c609b115a0a45502fa8f2135e SHA512 665acafd07adb9594a8be6696987eceaa3702bc850c29c27f7e203cb56666fc3715a5419bb49e2b219756b1c880412afc314f7528c9ae2230501fa40fa99d4e8
+DIST virtualenv-21.3.2.tar.gz 7613810 BLAKE2B 3e218849f44b3d9801b610a480712af7da589ea67921cf99b65b08bcbba556b2325823039ec238f60868345b81676386286a70cde963ab3bc48bd29742d21dd6 SHA512 506668a1f6a62712f62a712ce65515c619dd60b19899e6555ebbc15453ef294a81048f7728e22e1275d374a132d980a5b3e8590025539cb7615b11228cef9c5e
+DIST virtualenv-21.3.2.tar.gz.provenance 9249 BLAKE2B 08c7750b78743dcbde4371f3c7fa15aed1f9d3e5f38d7c83ce098909f296908c82dbcb2a0501bfd00fd2b027ff3df1680145e64ab07fc6e1d9d95aa3f102ac36 SHA512 8dee68c63faab7e8fa78dd300e690b5ccba1b2589f1af5c1d2e846bea21802028c16e001af14a75e14d94d026f61b552fe7448525c0110ac67b5f45baa3d85c0
diff --git a/dev-python/virtualenv/virtualenv-21.3.2.ebuild b/dev-python/virtualenv/virtualenv-21.3.2.ebuild
new file mode 100644
index 000000000000..ffe84dada404
--- /dev/null
+++ b/dev-python/virtualenv/virtualenv-21.3.2.ebuild
@@ -0,0 +1,136 @@
+# 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_{11..14} pypy3_11 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+
+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 ~ppc ~ppc64 ~riscv ~s390 ~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.2.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/wheel[${PYTHON_USEDEP}]
+ >=dev-python/packaging-20.0[${PYTHON_USEDEP}]
+ ' "${PYTHON_TESTED[@]}")
+ $(python_gen_cond_dep '
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ ' python3_{11..14})
+ $(python_gen_cond_dep '
+ >=dev-python/pytest-freezer-0.4.6[${PYTHON_USEDEP}]
+ ' 'pypy3*')
+ )
+"
+
+src_prepare() {
+ local PATCHES=(
+ # use wheels from ensurepip bundle
+ "${FILESDIR}/${PN}-21.2.4-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
+ # 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
+ )
+ case ${EPYTHON} in
+ pypy3.11)
+ EPYTEST_DESELECT+=(
+ # these don't like the executable called pypy3.11?
+ tests/unit/activation/test_bash.py::test_bash
+ tests/unit/activation/test_fish.py::test_fish
+ tests/unit/discovery/py_info/test_py_info.py::test_fallback_existent_system_executable
+ )
+ ;;
+ esac
+
+ local -x TZ=UTC
+ local EPYTEST_PLUGINS=( pytest-{mock,rerunfailures} )
+ if [[ ${EPYTHON} == pypy3* ]]; then
+ EPYTEST_PLUGINS+=( pytest-freezer )
+ else
+ EPYTEST_PLUGINS+=( time-machine )
+ fi
+ 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
+}