summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorCrucible <crucible@localhost>2026-10-17 03:06:03 -0500
committerCrucible <crucible@localhost>2026-10-17 03:06:03 -0500
commit3b4c7e627726016d50653b6dd2e06020a1915eac (patch)
treeab5f0de2156e046ca343f1089e3900f39d53e293 /dev-python
parent87b9736ba7de67af93422650f0039c7c5d964ab2 (diff)
downloadsrcux-3b4c7e627726016d50653b6dd2e06020a1915eac.tar.gz
srcux-3b4c7e627726016d50653b6dd2e06020a1915eac.tar.xz
srcux-3b4c7e627726016d50653b6dd2e06020a1915eac.zip
Publish srcux candidate 0000000724-20261017-030226HEADdevelop
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/aioquic/Manifest1
-rw-r--r--dev-python/aioquic/aioquic-1.7.0.ebuild36
-rw-r--r--dev-python/ast-serialize/Manifest3
-rw-r--r--dev-python/ast-serialize/ast-serialize-0.13.1.ebuild47
-rw-r--r--dev-python/awscrt/Manifest3
-rw-r--r--dev-python/awscrt/awscrt-0.36.4.ebuild64
-rw-r--r--dev-python/awscrt/awscrt-0.38.0.ebuild (renamed from dev-python/awscrt/awscrt-0.36.3.ebuild)2
-rw-r--r--dev-python/berkeleydb/Manifest1
-rw-r--r--dev-python/berkeleydb/berkeleydb-18.1.16.ebuild75
-rw-r--r--dev-python/cli-helpers/Manifest2
-rw-r--r--dev-python/cli-helpers/cli-helpers-2.15.2.ebuild (renamed from dev-python/cli-helpers/cli-helpers-2.15.0.ebuild)2
-rw-r--r--dev-python/distlib/Manifest1
-rw-r--r--dev-python/distlib/distlib-0.4.4.ebuild50
-rw-r--r--dev-python/django-otp/Manifest1
-rw-r--r--dev-python/django-otp/django-otp-1.7.5.ebuild45
-rw-r--r--dev-python/fastapi/Manifest1
-rw-r--r--dev-python/fastapi/fastapi-0.143.3.ebuild126
-rw-r--r--dev-python/hypothesis/Manifest1
-rw-r--r--dev-python/hypothesis/hypothesis-6.170.1.ebuild143
-rw-r--r--dev-python/jsonpath-ng/Manifest2
-rw-r--r--dev-python/jsonpath-ng/jsonpath-ng-1.11.0.ebuild40
-rw-r--r--dev-python/objgraph/Manifest1
-rw-r--r--dev-python/objgraph/objgraph-3.7.0.ebuild55
-rw-r--r--dev-python/pillow/Manifest1
-rw-r--r--dev-python/pillow/pillow-13.0.0.ebuild170
-rw-r--r--dev-python/pkginfo/Manifest1
-rw-r--r--dev-python/pkginfo/pkginfo-1.13.3.ebuild35
-rw-r--r--dev-python/portalocker/Manifest1
-rw-r--r--dev-python/portalocker/portalocker-4.4.1.ebuild47
-rw-r--r--dev-python/pyqt-builder/Manifest1
-rw-r--r--dev-python/pyqt-builder/pyqt-builder-1.20.1.ebuild30
-rw-r--r--dev-python/sphinx-autodoc-typehints/Manifest2
-rw-r--r--dev-python/sphinx-autodoc-typehints/sphinx-autodoc-typehints-3.17.1.ebuild51
-rw-r--r--dev-python/sqlalchemy/Manifest2
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-2.0.55.ebuild95
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-2.1.5.ebuild103
-rw-r--r--dev-python/superqt/Manifest2
-rw-r--r--dev-python/superqt/superqt-0.9.0.ebuild74
38 files changed, 1248 insertions, 69 deletions
diff --git a/dev-python/aioquic/Manifest b/dev-python/aioquic/Manifest
index 50e9cfb39f19..7857ba46c5a7 100644
--- a/dev-python/aioquic/Manifest
+++ b/dev-python/aioquic/Manifest
@@ -3,3 +3,4 @@ DIST aioquic-1.3.0.tar.gz 181923 BLAKE2B cc15af13fc83510f041b8be53b8a19f6f9f95df
DIST aioquic-1.4.0.tar.gz 184137 BLAKE2B 59cc3db143b01e8c1b0eabc5c54d10d27d735debe642f87c485f10d3421d018af5b35856f6eca12f6a5675a37a6d08ed4076fca0be64884879906e90d2f1ab60 SHA512 ff0cdaa44d74759bcc785e30529a737b967ca614dbbe7cb33735d9ca02d649c33d47f2d1f4a6ab4049f956c5f29196ac8bbd012e5af7a5ff6e4377d5a2a0c44a
DIST aioquic-1.5.0.tar.gz 189228 BLAKE2B 38784efabb5e922057f90a8291ea9bb006020b6d2f7a6dd6e70f8b6d4cad4a347b5ffcb30b88e684d25f37949d3034063ebb9b3fc9b19d7cf09b6ed6ed5b975d SHA512 705153dc22060c240fea8c54f5dd9574ff8f0802e5794a954f79297017f2a6be23f083287f879d7bce2a328b262992a056ad6c681487ea4cc9e2f2486bde6c97
DIST aioquic-1.6.1.tar.gz 205833 BLAKE2B ea5b965bf35e27a0bed0b71d48c0c175b67487d47026ecba2d499db37b4126fb017be1780ac796eb9cea8a4c64ccd97c063dbb812dab126c02262b3d1887aa4e SHA512 4097c67e6f7ca63e97a5b00b1cabd5700b6cdde6b605c078c9f7df6e4d4a36a54c9f979f70717daa96c2909cd3080d5afa5e951b43ab3b25ec78ffe81a66eefe
+DIST aioquic-1.7.0.tar.gz 227514 BLAKE2B 1b424bde5b93501185496faa290830da722cd86ea6521b21786f273c9504b726ee47e885a96b574cb278f9c4fe2bc51f25ca6c871bbf24e8618de853ce9be518 SHA512 f9f0e598f7090881424e3b81aff874a464907e8a0d60fc3e021a9c6c213c42174ccf262492857baff889d5c4e4e657ab929b55aafd2b49b198ae4246b34d7f81
diff --git a/dev-python/aioquic/aioquic-1.7.0.ebuild b/dev-python/aioquic/aioquic-1.7.0.ebuild
new file mode 100644
index 000000000000..7f72fd414139
--- /dev/null
+++ b/dev-python/aioquic/aioquic-1.7.0.ebuild
@@ -0,0 +1,36 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="An implementation of QUIC and HTTP/3"
+HOMEPAGE="
+ https://github.com/aiortc/aioquic/
+ https://pypi.org/project/aioquic/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+DEPEND="
+ dev-libs/openssl:=
+"
+RDEPEND="
+ ${DEPEND}
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/cryptography-43.0.0[${PYTHON_USEDEP}]
+ =dev-python/pylsqpack-1*[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-24[${PYTHON_USEDEP}]
+ >=dev-python/service-identity-24.1.0[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
diff --git a/dev-python/ast-serialize/Manifest b/dev-python/ast-serialize/Manifest
index 5911979459c0..429e44d5da81 100644
--- a/dev-python/ast-serialize/Manifest
+++ b/dev-python/ast-serialize/Manifest
@@ -13,3 +13,6 @@ DIST ast_serialize-0.12.1.tar.gz.provenance 9557 BLAKE2B e5c567ba038efc9d6c1e862
DIST ast_serialize-0.13.0-crates.tar.xz 8982344 BLAKE2B 1c5a26985bbca3537808e0c49a11af37f4666194b9f757d3039d55ca895bd7932bf50d4a7944fad85973a4c88d2ea5680313241abe56dfe81c25f98a7a37ffc7 SHA512 aed9985a44ff14b227d2c67e89358d1dfdd13d728fc1347d6b139d65f1ed4a8a8c5c461a80a5862525aa12c07f8ee86162aad0a722f30221e38e26bfc4163d69
DIST ast_serialize-0.13.0.tar.gz 954999 BLAKE2B b9a15d2f1ead3156949d649d7ff117df1c2d21e554aa8cd60127cbe145a7cd56f3fd7c20b25446cbecf9ec5a921384e6aa03cc7c0ba4e648a2c767147bcf43de SHA512 52e330f776646ec1c6e1b51289e2fe84588101cd28eedac112e1844470d1cc7606fc87659bfaad005cc1817fde430ee0ceda19ec83498bc8c8cde9778dc195de
DIST ast_serialize-0.13.0.tar.gz.provenance 10009 BLAKE2B c5be17913c5a940d23f01f0bce74d7cc5283bad73c5bbbc5eeece0f54b0ba7ab393ca6ed5fe40817be741076c8775c2854fb2f551087e3d7868d8041b6ff4fd6 SHA512 70523fd95ab0fd273429b899234af14fc0d384957151e24e2ab918656639bee5815474dc9b2a2e215332912de1a6371f70df49e64cb07ea998755669d0f3537f
+DIST ast_serialize-0.13.1-crates.tar.xz 8982344 BLAKE2B 1c5a26985bbca3537808e0c49a11af37f4666194b9f757d3039d55ca895bd7932bf50d4a7944fad85973a4c88d2ea5680313241abe56dfe81c25f98a7a37ffc7 SHA512 aed9985a44ff14b227d2c67e89358d1dfdd13d728fc1347d6b139d65f1ed4a8a8c5c461a80a5862525aa12c07f8ee86162aad0a722f30221e38e26bfc4163d69
+DIST ast_serialize-0.13.1.tar.gz 955137 BLAKE2B 8fb0b0c47f626f87b8d5ba9fa2adcade152d85ed72a663f9543cba8fa5abc5a03531184612d0d85cb4621e7e2089e8b8eb8d114e19de3495dbffa53c527ee6bc SHA512 af1c3713e8cb6474e0752f03173c2dafc220b64570f1ed5f89bace8b33545baf0bb9b71c8ccadfe265b6d31f9bc79d3ee75b258ddb9aae7c6fd23721277e2d1f
+DIST ast_serialize-0.13.1.tar.gz.provenance 9762 BLAKE2B 1f470840ff391868915b197eadff2525c67af38e2f24b9f04a613390e1b313ca86dc6551d7a89f65f38e3238467f19992887d8aa55548ff7af0c56114933a47a SHA512 3635495bffb616be958cf4fc56937587c8693d0d8c080a434782b0e9c2d6baffe1a3576c9136f8d3314cba8bf4273cfb01f99b794d458af3a3753f3f59d834b4
diff --git a/dev-python/ast-serialize/ast-serialize-0.13.1.ebuild b/dev-python/ast-serialize/ast-serialize-0.13.1.ebuild
new file mode 100644
index 000000000000..73ac85f79772
--- /dev/null
+++ b/dev-python/ast-serialize/ast-serialize-0.13.1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=maturin
+PYPI_VERIFY_REPO=https://github.com/mypyc/ast_serialize
+PYTHON_COMPAT=( python3_{13..14} )
+
+RUST_MIN_VER="1.95.0"
+CRATES="
+"
+
+inherit cargo distutils-r1 pypi
+
+DESCRIPTION="Python bindings for mypy AST serialization"
+HOMEPAGE="
+ https://github.com/mypyc/ast_serialize/
+ https://pypi.org/project/ast-serialize/
+"
+SRC_URI+="
+ https://github.com/gentoo-crate-dist/ast_serialize/releases/download/v${PV}/ast_serialize-${PV}-crates.tar.xz
+"
+
+LICENSE="MIT"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions MIT Unicode-3.0
+ Unicode-DFS-2016 ZLIB
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+EPYTEST_IGNORE=(
+ crates
+)
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/ast_serialize/ast_serialize.*"
+
+src_unpack() {
+ pypi_src_unpack
+ cargo_gen_config
+}
diff --git a/dev-python/awscrt/Manifest b/dev-python/awscrt/Manifest
index b3c40d52931d..8262b68716c5 100644
--- a/dev-python/awscrt/Manifest
+++ b/dev-python/awscrt/Manifest
@@ -1,3 +1,2 @@
-DIST awscrt-0.36.3.tar.gz 37812193 BLAKE2B 350a906fee04981975f5b983f0497fc028b13c4092563205e3364322502c6274ef0d7c10e283fbbc33357624973f501963391656765e7a96da8fa54fc3920b3b SHA512 94b4b4a5823bd373c7d72e52d6b8e734ba0080e5b8f1d045c60ce4ebffb9e9d7598f4246b849bff06cf8915018c87fc4af2be3f85cacc898bff55ea1abe633fe
-DIST awscrt-0.36.4.tar.gz 37816271 BLAKE2B af49b608a5b9c691186c43cf7e353174855adbe091dd62a1844632a990c8c2697d9497ed22e0ca61be945d538f8aac22e852263b936bd4f6e6e8079f6b2354e2 SHA512 8d61aa3c0f94c5a96212cb27e54340d6708ee9fb0b25611f07403f7539402618fd6516a870d6913677ba09503e831b2971530c44459d835593a4ccc993642397
DIST awscrt-0.37.0.tar.gz 37861471 BLAKE2B d070493d3866c3c013bc0296637d1ef9d0890395623966287af57a9a104326ef09b1224cd4c9e52fe95b5151c823a1681d8ee5cb37cea5c1d2641176502ce8b6 SHA512 a2ebc8aafff521c826d9ff26206eb155d3eeaa562427d392f037b41fb31b6d0c4ca55fc6007275748b9a7b3cdd02bf1a7f2057bb9cb9822e7a443fb514c74f18
+DIST awscrt-0.38.0.tar.gz 37915957 BLAKE2B 2a2fdc24565a6308903dbb47a091cc03b6a73f331a0e978f72a7453249c9de2926a9688bdc25589614f674454b3b32ccd92022f8d1c8315821f90bfc8654c8cb SHA512 5e413431823b6d9e73b4431c04c16539028e2ef90511f3d8bf9d5be5eaaee83ac20ffda6a6aa40fda49366b6fd7ad409893866fb8459801e2147f0bc06dfe9f3
diff --git a/dev-python/awscrt/awscrt-0.36.4.ebuild b/dev-python/awscrt/awscrt-0.36.4.ebuild
deleted file mode 100644
index 3374314287ab..000000000000
--- a/dev-python/awscrt/awscrt-0.36.4.ebuild
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright 2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{13..14} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="A common runtime for AWS Python projects"
-HOMEPAGE="
- https://github.com/awslabs/aws-crt-python/
- https://pypi.org/project/awscrt/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~riscv"
-
-DEPEND="
- >=dev-libs/aws-c-common-1.0.0:=
- >=dev-libs/aws-c-auth-1.0.0:=
- >=dev-libs/aws-c-sdkutils-1.0.0:=
- >=dev-libs/aws-c-cal-1.0.0:=
- >=dev-libs/aws-c-io-1.0.0:=
- >=dev-libs/aws-c-compression-1.0.0:=
- >=dev-libs/aws-c-event-stream-1.0.0:=
- >=dev-libs/aws-c-http-1.0.0:=
- >=dev-libs/aws-c-auth-1.0.0:=
- >=dev-libs/aws-c-mqtt-1.0.0:=
- >=dev-libs/aws-c-s3-1.0.0:=
- >=dev-libs/aws-checksums-1.0.0:=
- dev-libs/openssl:=
- dev-libs/s2n-tls:=
-"
-RDEPEND="
- ${DEPEND}
-"
-BDEPEND="
- test? (
- dev-python/h2[${PYTHON_USEDEP}]
- dev-python/websockets[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests unittest
-
-src_prepare() {
- distutils-r1_src_prepare
-
- # remove bundled libs
- rm -r crt || die
- export AWS_CRT_BUILD_USE_SYSTEM_LIBS=1
-
- # Internet/DNS
- sed -e 's:test_h2_remote_end_stream_ordering:_&:' \
- -e 's:test_cross_thread_http2_client:_&:' \
- -e 's:test_h2_client:_&:' \
- -e 's:test_h2_manual_write_exception:_&:' \
- -e 's:test_h2_remote_end_stream_ordering:_&:' \
- -i test/test_{aio,}http_client.py || die
-}
diff --git a/dev-python/awscrt/awscrt-0.36.3.ebuild b/dev-python/awscrt/awscrt-0.38.0.ebuild
index 3374314287ab..0f94267bdd74 100644
--- a/dev-python/awscrt/awscrt-0.36.3.ebuild
+++ b/dev-python/awscrt/awscrt-0.38.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~riscv"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
DEPEND="
>=dev-libs/aws-c-common-1.0.0:=
diff --git a/dev-python/berkeleydb/Manifest b/dev-python/berkeleydb/Manifest
index 89f8b6d8f960..31367e446efb 100644
--- a/dev-python/berkeleydb/Manifest
+++ b/dev-python/berkeleydb/Manifest
@@ -1 +1,2 @@
DIST berkeleydb-18.1.15.tar.gz 188446 BLAKE2B e018ad0afb557b866121a267e5b64d627c5c3752f5929652f2e291f9ff67c8e5bb7319fbade04ec0ecfac3aefe58c3497745f5c9b467aa2dd30c01297679ac53 SHA512 60d987851febb158888d2a5fe35bc9169e4855fcfc40b836f0d089db9cc6a0da2c7032b348ac486a7d873eae6999d6d8ce3833461d50fe8afbcf498d37b5afa2
+DIST berkeleydb-18.1.16.tar.gz 188890 BLAKE2B c6701fa0c0f3fa9faffa231f9f838949247b4baa146c039ed6a4d106a2b3a1e1875b7f238a7315349500c731ac9fe2d9f13a22c8c5df1c962e237835a173c63f SHA512 87e7eade429aabb8220fb6327db431d35fbc1aedecb9abc7f5a34b6a9dbd22e72c8b63f14dcfed83f95ba5ca0b4fa14fce5b21d2fc8ed9dc116453191eaf5e87
diff --git a/dev-python/berkeleydb/berkeleydb-18.1.16.ebuild b/dev-python/berkeleydb/berkeleydb-18.1.16.ebuild
new file mode 100644
index 000000000000..f4173794e751
--- /dev/null
+++ b/dev-python/berkeleydb/berkeleydb-18.1.16.ebuild
@@ -0,0 +1,75 @@
+# 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
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit db-use distutils-r1 pypi
+
+DESCRIPTION="Python bindings for Oracle Berkeley DB"
+HOMEPAGE="
+ https://www.jcea.es/programacion/pybsddb.htm
+ https://pypi.org/project/berkeleydb/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ <sys-libs/db-6.0:=
+ || (
+ sys-libs/db:5.3
+ sys-libs/db:4.8
+ )
+"
+BDEPEND="
+ test? (
+ dev-python/packaging[${PYTHON_USEDEP}]
+ dev-python/test[${PYTHON_USEDEP}]
+ )
+"
+
+python_prepare_all() {
+ distutils-r1_python_prepare_all
+
+ # This list should be kept in sync with setup.py.
+ if [[ -z ${DB_VER} ]]; then
+ for DB_VER in 5.3 4.8; do
+ has_version "sys-libs/db:${DB_VER}" && break
+ done
+ fi
+
+ # Force version.
+ sed -e "s/db_ver = None/db_ver = (${DB_VER%.*}, ${DB_VER#*.})/" \
+ -e "s/dblib = 'db'/dblib = '$(db_libname ${DB_VER})'/" \
+ -i setup3.py || die
+
+ # Fix the build
+ mv setup3.py setup.py || die
+ sed -e 's|setuptools.build_meta:__legacy__|setuptools.build_meta|' -i pyproject.toml || die
+
+ # no build dir
+ sed -e "/os.chdir('build')/d" -i test.py || die
+
+ # Set it ourselves in the test phase
+ sed -e "/os.environ\['BERKELEYDB_SO_PATH'\]/d" -i test.py || die
+}
+
+python_configure_all() {
+ DISTUTILS_ARGS=(
+ --berkeley-db="${EPREFIX}/usr"
+ --berkeley-db-incdir="$(db_includedir ${DB_VER})"
+ --berkeley-db-libdir="${EPREFIX}/usr/$(get_libdir)"
+ )
+}
+
+python_test() {
+ local -x BERKELEYDB_SO_PATH="${BUILD_DIR}"
+ "${EPYTHON}" test.py -vv || die "Testing failed with ${EPYTHON}"
+}
diff --git a/dev-python/cli-helpers/Manifest b/dev-python/cli-helpers/Manifest
index 6ca6c52569cb..af080077d334 100644
--- a/dev-python/cli-helpers/Manifest
+++ b/dev-python/cli-helpers/Manifest
@@ -1,2 +1,2 @@
-DIST cli_helpers-2.15.0.gh.tar.gz 38164 BLAKE2B 1939c2850089d1b0c555397b6d4b9bb5810bdfa51b65ae4b4c4ac19160b84b5d76f673cfd6d04e0966af63ff34b3e34b1e6b6a2070328ffc81cfd816178a17b0 SHA512 3c4913e4252c796c0b57648628d6cf4cfdfb9dfdd8ad17435fb86ef32cfe1d17951cd8fcf1eec292dc2e65485a18a606da00fa67cc7d18e6eb5193751f31b462
DIST cli_helpers-2.15.1.gh.tar.gz 38216 BLAKE2B ad2d445605db7208aa0efc3453c59ba4a82bb8dabb2961156a36e7a0948282209491ff57f80847fbd2c3e7fd756f6b9222945f5f2721ee36a214989b08f4903c SHA512 16a0e0d959b3332ea238d0abe2036edcd70ff8bb117996a7e97efe722773a96ae5e7bafa59806ade48442ee6f0c92ae322ebef28babf6fdc1c3dfed525d8aae4
+DIST cli_helpers-2.15.2.gh.tar.gz 38591 BLAKE2B 9b1be4accfb8dda9d16aeb95e765a3b773193c8e622b349d983fd1021641f1825b063d0f25e861f1f60f94ad28cb38d0a823f9f77f47a61db253e55d3df38ce3 SHA512 f6d3d1c94efc5bc884783dd37c4568f0bf3d4bd47c325834649e6928464fc556e4a0bb7e1e11fcf8dfe11846ca2d43caa3c251db099677ae67582e546ba97bc4
diff --git a/dev-python/cli-helpers/cli-helpers-2.15.0.ebuild b/dev-python/cli-helpers/cli-helpers-2.15.2.ebuild
index 820dcce7de91..fd5388c4374f 100644
--- a/dev-python/cli-helpers/cli-helpers-2.15.0.ebuild
+++ b/dev-python/cli-helpers/cli-helpers-2.15.2.ebuild
@@ -23,7 +23,7 @@ S=${WORKDIR}/${MY_P}
LICENSE="BSD"
SLOT="0"
-KEYWORDS="amd64 ~arm64 x86"
+KEYWORDS="~amd64 ~arm64 ~x86"
RDEPEND="
>=dev-python/configobj-5.0.5[${PYTHON_USEDEP}]
diff --git a/dev-python/distlib/Manifest b/dev-python/distlib/Manifest
index 5db7a81c31ac..dfdd8d532b04 100644
--- a/dev-python/distlib/Manifest
+++ b/dev-python/distlib/Manifest
@@ -1 +1,2 @@
DIST distlib-0.4.3.tar.gz 615141 BLAKE2B ef9c33d960b719ad6c8d66eaba6469915e19e9a89882b9a2a85244c041f40ca92222134ef9a5d1d00810eece628d07b65b0ffb09600fbcfb03f4f6b0c278bfa4 SHA512 0f6b44640cbfa9bccef10c6cdeedaec8582a2bd5878fcbc803a6feedb81daee5f28506004e23749f3eba206199cadae99808dbcd956066ba948cde455301fd74
+DIST distlib-0.4.4.tar.gz 621304 BLAKE2B f97ead36390f38f5d148c09beb7d3a6894af5df91e7d3377c4777736691742f4de3858910fb8e29993301feb4a0faed5eabdedc837ec2730c8de0c25b075fc4f SHA512 c02c565d2df4581983875cb7d684168a3f3855f56b165fe09207dd90b2c70b74c14b7aa8332d002a6cb02c952cbc262eb4ccabb56ff288d6e59ce3f1c1e651ce
diff --git a/dev-python/distlib/distlib-0.4.4.ebuild b/dev-python/distlib/distlib-0.4.4.ebuild
new file mode 100644
index 000000000000..3fad2c05140a
--- /dev/null
+++ b/dev-python/distlib/distlib-0.4.4.ebuild
@@ -0,0 +1,50 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Low-level components of distutils2/packaging"
+HOMEPAGE="
+ https://pypi.org/project/distlib/
+ https://github.com/pypa/distlib/
+"
+
+LICENSE="PSF-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+# pypiserver is called as external executable
+BDEPEND="
+ test? (
+ dev-python/pypiserver
+ )
+"
+
+src_prepare() {
+ local PATCHES=(
+ # use system pypiserver instead of bundled one
+ "${FILESDIR}/distlib-0.3.9-system-pypiserver.patch"
+ )
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local -x SKIP_ONLINE=1
+ local -x PYTHONHASHSEED=0
+
+ # disable system-site-packages -- distlib has no deps, and is very
+ # fragile to packages actually installed on the system
+ sed -i -e '/system-site-packages/s:true:false:' \
+ "${BUILD_DIR}/install${EPREFIX}/usr/pyvenv.cfg" || die
+
+ "${EPYTHON}" tests/test_all.py -v -x ||
+ die "Tests failed with ${EPYTHON}"
+}
diff --git a/dev-python/django-otp/Manifest b/dev-python/django-otp/Manifest
index 1236380dace1..92c24e296311 100644
--- a/dev-python/django-otp/Manifest
+++ b/dev-python/django-otp/Manifest
@@ -1 +1,2 @@
DIST django_otp-1.7.3.tar.gz 78996 BLAKE2B ccd9430a6415900a778a3c15163402915493f1162e680e504112beb22d6eff711c8ed48ec09d2b79f456437d3ad410a952790b98ca22c21232779d364eb9ca17 SHA512 2dd1f70cd506f6e8e3f62544c63dac1b6187f2cc4e585be8a44c10807f50a591ca801eb46881f01c52e629afa5dd98fa0205beeacc6e284ce8c0553d98350655
+DIST django_otp-1.7.5.tar.gz 79637 BLAKE2B 8d1b825303fc2aaadd88912282caa9003826f3a82d37ecff296a9c0d8685401380114b87d293f93ea25de75513bae885fc54c0357eb1d3d9b186c0b05172d2cf SHA512 2f5ef4c89b38c8d226aaa1bfc17d5355f40e91a8e2e048ec7613ad5f85adb9de593389da0eea37ac6efe68413338825d015a88560f3248498033ce2acafafbb6
diff --git a/dev-python/django-otp/django-otp-1.7.5.ebuild b/dev-python/django-otp/django-otp-1.7.5.ebuild
new file mode 100644
index 000000000000..3bbd4d6ca49d
--- /dev/null
+++ b/dev-python/django-otp/django-otp-1.7.5.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Django framework adding two-factor authentication using one-time passwords"
+HOMEPAGE="
+ https://github.com/django-otp/django-otp/
+ https://pypi.org/project/django-otp/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/django-4.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ $(python_gen_impl_dep sqlite)
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ || (
+ dev-python/qrcode[${PYTHON_USEDEP}]
+ dev-python/segno[${PYTHON_USEDEP}]
+ )
+ ${RDEPEND}
+ )
+"
+
+python_test() {
+ # upstream strips tests.py from the installed package, so we need
+ # to run from src
+ local -x PYTHONPATH=test:src:${PYTHONPATH}
+ local -x DJANGO_SETTINGS_MODULE=test_project.settings
+ "${EPYTHON}" -m django test -v 2 django_otp ||
+ die "Tests fail with ${EPYTHON}"
+}
diff --git a/dev-python/fastapi/Manifest b/dev-python/fastapi/Manifest
index eeed2ca29915..076f12496933 100644
--- a/dev-python/fastapi/Manifest
+++ b/dev-python/fastapi/Manifest
@@ -1,2 +1,3 @@
DIST fastapi-0.143.0.tar.gz 468391 BLAKE2B 24b1ebaac972c183166ebe37c76ec6fe29ec68b1cbdb78201e1ff11c54e158b56b9ba6f45e2318815202d97c0e94ea7b58fe53c620b501098fdcdeec564a2a43 SHA512 1fc0322645736bbdcb07892cd0f622feeb82b8e751b3e0040bd7cb32f8d749b38a5c33787ee1f1d2d67625b885481e3b2c17e8db9e13ac239833bfa544ff5f11
DIST fastapi-0.143.2.tar.gz 468920 BLAKE2B 4befc7698221fe2c1ccd72a6dd1202246d00e0b78c8b4e76ac96db92b2644d7523a3855c29df094a5fca0fd390eaf05d4c5c38e8a5a0edeb30ec81891d4b69bd SHA512 3c4b7c98a75f324ce37aef4608c94daf2659d681fbd236ad3069d77998ab9669275ac07214cd95bc7c344bd064946d61be78b9b569111e437c44e82f1448beeb
+DIST fastapi-0.143.3.tar.gz 469834 BLAKE2B 6384f8b551b38c1fc83779ef2a4a318e0cb4b01067e852e876b809d8dc8c2bf59dcbb109780337df3dd83b70ff61b30676fceb95745478439f580de2ad544c16 SHA512 f70e98e10e6d5d5b1db0fd6795179dff1bf7f737a0fee452732a49a22dca092efded647d27cf8fdb61b5eeba29311230fcca9d974ac258dc131d05080a134e7e
diff --git a/dev-python/fastapi/fastapi-0.143.3.ebuild b/dev-python/fastapi/fastapi-0.143.3.ebuild
new file mode 100644
index 000000000000..c7146bfca44a
--- /dev/null
+++ b/dev-python/fastapi/fastapi-0.143.3.ebuild
@@ -0,0 +1,126 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=pdm-backend
+PYTHON_COMPAT=( python3_{13..14} )
+#may be not stricly required
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="High performance framework, easy to learn, fast to code, ready for production"
+HOMEPAGE="
+ https://fastapi.tiangolo.com/
+ https://github.com/fastapi/fastapi/
+ https://pypi.org/project/fastapi/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ >=dev-python/annotated-doc-0.0.4[${PYTHON_USEDEP}]
+ >=dev-python/opentelemetry-api-1.44.0[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-2.9.0[${PYTHON_USEDEP}]
+ >=dev-python/starlette-0.46.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.8.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-inspection-0.4.2[${PYTHON_USEDEP}]
+"
+
+#FIXME: add missing deps
+BDEPEND="
+ test? (
+ dev-python/a2wsgi[${PYTHON_USEDEP}]
+ dev-python/dirty-equals[${PYTHON_USEDEP}]
+ dev-python/flask[${PYTHON_USEDEP}]
+ dev-python/httpx[${PYTHON_USEDEP}]
+ dev-python/httpx2[${PYTHON_USEDEP}]
+ dev-python/pydantic-settings[${PYTHON_USEDEP}]
+ dev-python/python-multipart[${PYTHON_USEDEP}]
+ dev-python/sqlalchemy[${PYTHON_USEDEP}]
+ dev-python/typer[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( anyio inline-snapshot pytest-timeout )
+# workaround broken toml config
+: ${EPYTEST_TIMEOUT:=30}
+# the test suite is flaky as hell
+EPYTEST_RERUNS=5
+# 3k tests+, so use xdist to speed them up
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+# There are some JSON response tests that will exercise orjson or ujson if they are available.
+# These are properly skipped if the optional dependencies are not installed at the cost of a little spam.
+python_test() {
+ local EPYTEST_IGNORE=(
+ # python/strawberry-graphql (in guru, test dep only)
+ tests/test_tutorial/test_graphql/test_tutorial001.py
+ # dev-python/sqlmodel (in guru, test dep only)
+ tests/test_tutorial/test_sql_databases/test_tutorial001.py
+ tests/test_tutorial/test_sql_databases/test_tutorial002.py
+ # dev-python/fastapi-cli (missing, test and optfeature)
+ tests/test_fastapi_cli.py
+ # dev-python/pwdlib (in guru, test dep only)
+ tests/test_tutorial/test_security/test_tutorial004.py
+ tests/test_tutorial/test_security/test_tutorial005.py
+ # Wants dev-python/multipart _just_ to complain that it's not the right multipart lib.
+ tests/test_multipart_installation.py
+ # scripts/tests use CliRunner.isolated_filesystem() removed in recent typer
+ scripts/tests
+ )
+ local EPYTEST_DESELECT=(
+ # Requires investigation - missing ./image.png test file (?)
+ tests/test_tutorial/test_additional_responses/test_tutorial004.py::test_path_operation_img
+
+ # Broken by brotli being available, also fragile to random ordering
+ tests/test_tutorial/test_header_param_models/test_tutorial001.py::test_header_param_model_invalid
+ tests/test_tutorial/test_header_param_models/test_tutorial003.py::test_header_param_model_invalid
+ tests/test_tutorial/test_header_param_models/test_tutorial003.py::test_header_param_model_no_underscore
+ # opentelemetry-*
+ tests/test_telemetry/test_background.py::test_background_task_integrations
+ tests/test_telemetry/test_data.py::test_request_objects_are_not_exported
+ tests/test_telemetry/test_environment_integrations.py
+ tests/test_telemetry/test_integrations.py::test_current_contrib
+ tests/test_telemetry/test_integrations.py::test_current_logfire
+ tests/test_telemetry/test_integrations.py::test_current_sentry
+ tests/test_telemetry/test_integrations.py::test_inactive_sentry_does_not_disable_native
+ tests/test_telemetry/test_integrations.py::test_logfire_global_provider_without_fastapi_instrumentor
+ tests/test_telemetry/test_native_integrations.py
+ tests/test_telemetry/test_runtime.py::test_concurrent_provider_owner_wins
+ tests/test_telemetry/test_runtime.py::test_environment_export_initializes_after_fork
+ tests/test_telemetry/test_runtime.py::test_failed_registration_closes_new_exporter
+ tests/test_telemetry/test_runtime.py::test_real_otlp_exception_export_without_traces_or_metrics
+ tests/test_telemetry/test_runtime.py::test_real_otlp_export_and_repeated_lifespans
+ tests/test_telemetry/test_runtime.py::test_registration_provider_prefers_public_metric_reader
+ tests/test_telemetry/test_runtime.py::test_unsupported_provider_warns_without_preventing_startup
+ )
+ epytest
+}
+
+pkg_postinst() {
+ # not part of any upstream extra
+ optfeature "alternative JSON library" "dev-python/ujson" # orjson, too but it's deprecated
+
+ # pyproject.toml:project.optional-dependencies.standard
+ # Following optfeatures should be exposed, but missing deps
+ # optfeature "fastAPI CLI" "dev-python/fastapi-cli" - missing - depends on this package!
+ # optfeature "compressed file support" "dev-python/fastar" - missing
+ # optfeature "pydantic extra types support" "dev-python/pydantic-extra-types" - in guru
+ optfeature_header "standard extras"
+ optfeature "ASGI server support" "dev-python/uvicorn"
+ optfeature "email validation support" "dev-python/email-validator"
+ optfeature "TestClient for testing FastAPI applications" "dev-python/httpx"
+ optfeature "templating support" "dev-python/jinja2"
+ optfeature "multipart form data support" "dev-python/python-multipart"
+ optfeature "settings management support" "dev-python/pydantic-settings"
+
+ # pyproject.toml:project.optional-dependencies.all - includes all the above plus:
+ optfeature_header "all extras"
+ optfeature "session middleware support" "dev-python/itsdangerous"
+ optfeature "YAML support" "dev-python/pyyaml"
+}
diff --git a/dev-python/hypothesis/Manifest b/dev-python/hypothesis/Manifest
index 973a798479f2..2b937039b2c7 100644
--- a/dev-python/hypothesis/Manifest
+++ b/dev-python/hypothesis/Manifest
@@ -12,6 +12,7 @@ DIST hypothesis-6.169.0.gh.tar.gz 9710358 BLAKE2B fb65497c921687a5e1a3b551528b38
DIST hypothesis-6.169.1.gh.tar.gz 9710711 BLAKE2B 8abedcdcba8a1d32e424a951047450be5ee33d8fa4fd8cd66e152c89abf60d7fb39fc0573e5778bf09442af2e30a648e4621208c7fe285a8fed670b9c37e15c2 SHA512 f1da6e1709e8e5eccf337cfeece87a197b402d62175a869b1ba4d1e1b06429d438cdf8b9ef8dc99c4928a0f24f8a7991d52272dc748bd2ccfe8655aae62556b0
DIST hypothesis-6.169.3.gh.tar.gz 9711107 BLAKE2B 973dc2650033c5b31dd2b6e792353609ba51c362e0cd69e312a1731400ba83fdc2babe2be2c82c2fedc998036d15ee245c2f96a8cc4280c646da3b1268b5e46d SHA512 bee8c5489645835eb8371dd6e242ce51c07d937fe06138235637ebc57fc29b9b40272b45e92ce16b0fc43a1992510490189bd55bd635fe1270b3cb34d65069ba
DIST hypothesis-6.170.0.gh.tar.gz 9723099 BLAKE2B 0876a9786084cb4b9d6f0494a14ae7953b64641968991fdd8ac03944582018cf665db55fabee07d2da11a8a50d85dcc97b9cb907cec35dab97588492b928cd3d SHA512 b0505bbbfe05e3d3df1d622accb6a971b68b3ba6680c9611fd4185be1f55a598875d4319dba012d3ca53491663b673e595a6fe9303f04a0255ecc55ff4cc77a0
+DIST hypothesis-6.170.1.gh.tar.gz 9724551 BLAKE2B a890c940391e77985c4e9b6131410cc03c371fd985e9102cbadd5e0e52e70db06358c73614cb0a8729f8d305c0d5062ff1badc9c5e092161d6e6d2ed6a02c475 SHA512 001cf30549c78ee0c469c804f154b528c44b8e2126a7578cb9eb5a3423b8419b9894fcde7c65290922a225fc6bae9f5d030953c40625bcdd9cabd16681320e58
DIST libc-0.2.186.crate 821883 BLAKE2B ebe7aac5f8937a8064c64a0d4dc72e5fc794080e09b96c6d245bdec0fd9a19d49ab38e25306e22e47564764cf5dcde45855237cffc70230a143eca2626bd5c3c SHA512 6a58e671ec6811dff9a0d7d4db8f37d38bcbca9efff20dad4706190e5cdb77b426567754bcf0ef0f2d0c31d6506401f724f3ca500b9bed57bb8605b1141ed690
DIST once_cell-1.21.4.crate 35010 BLAKE2B 9117ed1d478e626b7b7be2e3ff8b68a382b051112c7ca4425367bdae86977671f8b5c576131c82fb437740b6d98b72501f718f4172d39781decac2385e8fbd4d SHA512 af67669b0107f44268ba74c355200cb2ed1aab235a6989a8bc54323eb2c9a45677010f8672e7790edadd4c981e939436e0c3a099d33c06dce9c14fd5ede86155
DIST portable-atomic-1.13.1.crate 197001 BLAKE2B 6d0898c2a537a9bf204b7749cca5f5fddf280772b56eb7ce8fdd9cf7d71561137b26ef89f415c40277a1c89981333eef78e5bb4624515a294ba28fdaeb4c70ea SHA512 2a1b31ac9814af884640b3398ab824a9795c72d260527a0966b193113808cfbb3345d50cd1beaebb45863437c3d06c8706d34b26efecceefc649319a4bc274a3
diff --git a/dev-python/hypothesis/hypothesis-6.170.1.ebuild b/dev-python/hypothesis/hypothesis-6.170.1.ebuild
new file mode 100644
index 000000000000..d6e8b8e38d1c
--- /dev/null
+++ b/dev-python/hypothesis/hypothesis-6.170.1.ebuild
@@ -0,0 +1,143 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=maturin
+CLI_COMPAT=( python3_{12..15} )
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="threads(+),sqlite"
+
+RUST_MIN_VER="1.91.0"
+CRATES="
+ cfg-if@1.0.4
+ crunchy@0.2.4
+ getrandom@0.3.4
+ half@2.7.1
+ heck@0.5.0
+ libc@0.2.186
+ once_cell@1.21.4
+ portable-atomic@1.13.1
+ ppv-lite86@0.2.21
+ proc-macro2@1.0.106
+ pyo3-build-config@0.29.3
+ pyo3-ffi@0.29.3
+ pyo3-macros-backend@0.29.3
+ pyo3-macros@0.29.3
+ pyo3@0.29.3
+ quote@1.0.46
+ r-efi@5.3.0
+ rand@0.9.4
+ rand_chacha@0.9.0
+ rand_core@0.9.5
+ syn@2.0.118
+ target-lexicon@0.13.5
+ unicode-ident@1.0.24
+ wasip2@1.0.4+wasi-0.2.12
+ wit-bindgen@0.57.1
+ zerocopy-derive@0.8.53
+ zerocopy@0.8.53
+"
+
+inherit cargo distutils-r1 optfeature
+
+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/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+S="${WORKDIR}/${P}/hypothesis"
+
+LICENSE="MPL-2.0"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0-with-LLVM-exceptions MIT Unicode-3.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
+
+QA_PREBUILT="usr/lib/python.*/site-packages/hypothesis/_native.*"
+
+python_test() {
+ # NB: paths need to be relative to pytest.ini, i.e. start with hypothesis/
+ local EPYTEST_DESELECT=(
+ # broken somehow (xdist?)
+ 'hypothesis/tests/pytest/test_constant_collection_timing.py::test_constant_collection_timing[True]'
+ )
+ local EPYTEST_IGNORE=(
+ # require syrupy
+ tests/cover/test_custom_reprs.py
+ )
+
+ case ${EPYTHON} in
+ python3.15*)
+ EPYTEST_DESELECT+=(
+ 'hypothesis/tests/cover/test_lookup.py::test_resolves_forwardrefs_to_builtin_types[sentinel]'
+ 'hypothesis/tests/cover/test_lookup.py::test_resolves_builtin_types[sentinel]'
+ 'hypothesis/tests/cover/test_lambda_formatting.py::test_modifying_lambda_source_code_returns_unknown[False]'
+ )
+ ;;
+ esac
+
+ local -x HYPOTHESIS_NO_PLUGINS=1
+ epytest 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/jsonpath-ng/Manifest b/dev-python/jsonpath-ng/Manifest
index 225ce888862c..66d92c5e6f76 100644
--- a/dev-python/jsonpath-ng/Manifest
+++ b/dev-python/jsonpath-ng/Manifest
@@ -1,5 +1,7 @@
DIST jsonpath_ng-1.10.1.tar.gz 87626 BLAKE2B 10a401c35d97b616f12ddfb855978115adf9b5510c5e868c0d382c6d1a389835848d9c8bf0d92934aa156b950e663123eb11274ed00e898044e9be8c9ae15096 SHA512 1d033569439d9362249547539ca61067a0953afa863e3800324288a4a9cd70eeffbd44bf4959043d7278b00636ae7e818e775cbc80667dc1ce1554c13f6cc44e
DIST jsonpath_ng-1.10.1.tar.gz.provenance 9931 BLAKE2B 68d303044b6bafe2d1be9721006724defe86f2e124f9cfe79d974ae57f0d1a748777206122966c30af3fd00a068fa31bc46f1682399e403a06f02caf8971674d SHA512 cc6ac5c046a47241c2ca5217218447f3b88efb4fd6ddf1eadd4104642e86af8fa5aa1bacf1033185fb3a4ccc6bfc18eae64e2ca9ce6e31f5229e93639b30d103
+DIST jsonpath_ng-1.11.0.tar.gz 94460 BLAKE2B a39a80a3a2578009accb07f998c9b0e6f10890c8c98477df8a9d1d7340f3d1d2869c4a7a57c72e9f9155c28df0349689cce55c4b4795ab88639ff656c0810411 SHA512 c92f0daeb492d9879546187c4140dbace4cccb16bc1921424408387971dc0b8dfe11a322455cc427d0aea1cf01438874996dad9eba1e6512be51ca302f1728a4
+DIST jsonpath_ng-1.11.0.tar.gz.provenance 10162 BLAKE2B 540c03e1c53cbbb13add1158fda0e003cb3be66508be8e9caa109983a04d507df50c97a07b0b3c0dd02a8849e2e5dfac13ce7ed9967ef6dc8c446e809b4e7032 SHA512 cea2bd388f2967e8e551f860b0a846e55cb56e6f5cae41e73470505fe1a990f65c71d00d12b84c964dc5e783605e1ad8113d9e2d06ebb27c1af727cb1aa30f80
DIST jsonpath_ng-1.8.0.tar.gz 74513 BLAKE2B f8ba3f19bd106c7246a115175515f0b1ef066954356e06f7b289b754eac05aa7c91f56d44d36e4c04765e0ab7a2fc01ed887ee4c08c3b1d17f54087e73a21ada SHA512 64bf0c98193aff8f390c18f53713fbb41da075f93369f1d81c38d22ac63a86d1e502f59a67aaf1d39d0dc8d1b482bd1f73cc8e1bdf54b68a43b8725d109c9b7f
DIST jsonpath_ng-1.9.0.tar.gz 78042 BLAKE2B 5fc11ee6847e16d9bd019d53a12345ebd3e5ee0f80a47c537468c139e57e0c3aaaafc3c446aa2731edea3daf14495b71416f78392529ea4775980e8019ad76c6 SHA512 c9c266e19cb279c1f0c0b7ae36f906baeb118bc7fa51909e36a23481fd1326b3ef79adc9904ee66315dcc1e96393a9e88330fd9a76f21d1c8962340d27c49cc9
DIST jsonpath_ng-1.9.1.tar.gz 78077 BLAKE2B b0585cd6afbc376a015e2cc3f6be910f1a51807d35de15df02b95c3755af6ba9c8e97e7c01ecb37bb4d8bfcef4b98a883cb4632b744ae6715acae99c3c1e1ce8 SHA512 1da84dd66bd69652532cb2e0216484b7fccf3b3a6ce5d8d363f21ae71d3f81ce82d3b72974a640cc812c495a105b28958c088fcfe6ba8dc03375499313daaa63
diff --git a/dev-python/jsonpath-ng/jsonpath-ng-1.11.0.ebuild b/dev-python/jsonpath-ng/jsonpath-ng-1.11.0.ebuild
new file mode 100644
index 000000000000..89b4a5fc7ef4
--- /dev/null
+++ b/dev-python/jsonpath-ng/jsonpath-ng-1.11.0.ebuild
@@ -0,0 +1,40 @@
+# 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/jsonpath-ng/jsonpath-ng
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python JSONPath Next-Generation"
+HOMEPAGE="
+ https://github.com/jsonpath-ng/jsonpath-ng/
+ https://pypi.org/project/jsonpath-ng/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ dev-python/ply[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=( hypothesis )
+distutils_enable_tests pytest
+
+EPYTEST_IGNORE=(
+ tests/benchmarks/
+)
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # unbundle ply (sigh)
+ rm -r src/jsonpath_ng/_ply || die
+ find -name '*.py' -exec \
+ sed -i -e 's:jsonpath_ng[.]_ply[.]:ply.:' {} + || die
+}
diff --git a/dev-python/objgraph/Manifest b/dev-python/objgraph/Manifest
index eddec17ad646..53eba05a2d82 100644
--- a/dev-python/objgraph/Manifest
+++ b/dev-python/objgraph/Manifest
@@ -1 +1,2 @@
DIST objgraph-3.6.2.tar.gz 759524 BLAKE2B 23d1154a613ca417c332871c7905571f48aea4ef6ff24a236e58fdc76d74254490f04b7e50c1ee7fd190864448f4bb83c05127d438d2d72c4bb5c9a0dd247491 SHA512 7a1edaddb6bc7c57d77d8631019c183a198bb570725b71ddc49ee54fc1be8f54471175957899794ff2c51a57fd68ee8b856ced661f7efc1023dd7f5b0f5b714f
+DIST objgraph-3.7.0.tar.gz 759826 BLAKE2B ba3c57cb3064f53085f220f9a859a3afb22737a33ac14584892534d428cfb901e9892a9b3f7206d672d12d650aa02f17aa1a316d226cda77a811e95c6285ff70 SHA512 f765b9752d5d921da818aff375717dc627e546e2c8743dda9076aa23a13f942fb5a9cb8b638db5306dea1aa6c021b789754accfb5ef6fec573a85520ee03f5bd
diff --git a/dev-python/objgraph/objgraph-3.7.0.ebuild b/dev-python/objgraph/objgraph-3.7.0.ebuild
new file mode 100644
index 000000000000..6a9d1905c16c
--- /dev/null
+++ b/dev-python/objgraph/objgraph-3.7.0.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Draws Python object reference graphs with graphviz"
+HOMEPAGE="
+ https://github.com/mgedmin/objgraph/
+ https://pypi.org/project/objgraph/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="doc"
+
+RDEPEND="
+ media-gfx/graphviz
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # unhappy about pytest
+ tests.py::AtAddrsTest::test_at_addrs
+ )
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # CPython GC
+ tests.py::ByTypeTest::test_new_garbage
+
+ # repr() mismatch
+ tests.py::StringRepresentationTest::test_short_repr_mocked_instance_method_bound
+ tests.py::StringRepresentationTest::test_short_repr_mocked_instance_method_bound_with_mocked_name
+ )
+ ;;
+ esac
+
+ # TODO: figure out how to run doctests
+ epytest tests.py
+}
+
+python_install_all() {
+ use doc && local HTML_DOCS=( docs/* )
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/pillow/Manifest b/dev-python/pillow/Manifest
index da0e6de2a325..d83083e05cc3 100644
--- a/dev-python/pillow/Manifest
+++ b/dev-python/pillow/Manifest
@@ -1,2 +1,3 @@
DIST pillow-12.3.0.gh.tar.gz 47120631 BLAKE2B 52b795378340207c692c716a65f1c6687415096fc9fb599395dbeef2f55ee8cc6a8be1845f7c4ec01e1962ade62b30a445eacf1d2f57355a67052f54ce3e2586 SHA512 41453e23021fdb08ed9bf8b67a912f8217010840f99665e49465088e76c608fca78c2ca4dda3de8728ba9f8002c7e98231135669990d88758c5944afa0a13f64
+DIST pillow-13.0.0.gh.tar.gz 47158478 BLAKE2B fadc933a2ea0312a88b2635343239acbe4986bdc519437c3c2b279c248795452c98653caa7a1122bee56b07d12cf8e2c566d4a49fa65609376aa85e1f30e42f4 SHA512 eb031278da12ae0a19a974d6efbf3b87b2104585bee2fcfef5e94b434be2782253d03711317a816e66936a3fe22773d92a624d1b7274460ec11002f3a2941ab5
DIST pillow-test-images-7077675d2cda485d63de4aefe0fefbf6f655c5a0.gh.tar.gz 57430276 BLAKE2B 6e8dcde60832004f5a0ea0e14024fdcd0b08cf0e225f27e39b7c2058582d6d5efe7fcaccb5bd28754affa6fe4125735fb4beeaa2075e6aceea0a998ebc0747fe SHA512 795f015c9b73a8c941fb5cd880b1ab36b24d38612db53367ab0e6c05dd1cdbfd47034decb7e36d7de940eeea1582d644ca7bee3b131577578692569c2c60c32b
diff --git a/dev-python/pillow/pillow-13.0.0.ebuild b/dev-python/pillow/pillow-13.0.0.ebuild
new file mode 100644
index 000000000000..7155fb8fadbc
--- /dev/null
+++ b/dev-python/pillow/pillow-13.0.0.ebuild
@@ -0,0 +1,170 @@
+# 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_{13..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.org/
+ 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="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+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() {
+ 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)
+ # For 32-bit, just cap at 4 jobs to avoid pybind11 allocating
+ # like crazy (bug #970414).
+ if [[ $(tc-get-ptr-size) == 4 ]]; then
+ MAX_CONCURRENCY=$(( MAX_CONCURRENCY < 4 ? MAX_CONCURRENCY : 4 ))
+ fi
+}
+
+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 ${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/pkginfo/Manifest b/dev-python/pkginfo/Manifest
index 5c006235f46a..62c770bfccf6 100644
--- a/dev-python/pkginfo/Manifest
+++ b/dev-python/pkginfo/Manifest
@@ -1 +1,2 @@
DIST pkginfo-1.12.1.2.tar.gz 451828 BLAKE2B 8023dac51913ebcca02310b0f58511962dabb860ae4588b239f55824c59855924f47975cfdad6092244fabb3f48660496d38d333cee296ba899467c820aa57ed SHA512 16eed4c19b92384aa422d7a4e352746270bab8dc80b503c73aae0554eca012f38e2099867febf1a205d6fa572f4738f503a80e51ea247af4404581eea4a2d1d4
+DIST pkginfo-1.13.3.tar.gz 456355 BLAKE2B 0f5e14c9715b7ccbc22c6a3ce189b25db511b8498513514c4f5dfd108a15a68d12e2a30376845a66d5a3168d98b3d743b761e65a76420e5466bef57b1b17f7c8 SHA512 38390a841a8576c2b2a68eb9ed87d9d54d9c696f7f3dfe8d5d91d6e751d4655cdc6dc7f353b2d5eb72abffd00d4f0b17a32773720b651556feb08218d7c4942d
diff --git a/dev-python/pkginfo/pkginfo-1.13.3.ebuild b/dev-python/pkginfo/pkginfo-1.13.3.ebuild
new file mode 100644
index 000000000000..12c01f5b31ff
--- /dev/null
+++ b/dev-python/pkginfo/pkginfo-1.13.3.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Provides an API for querying the distutils metadata written in a PKG-INFO file"
+HOMEPAGE="
+ https://github.com/tseaver/pkginfo/
+ https://pypi.org/project/pkginfo/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+
+BDEPEND="
+ test? (
+ dev-python/wheel[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+distutils_enable_sphinx docs
+
+EPYTEST_DESELECT=(
+ # fragile to Core Metadata version changing in setuptools
+ # https://bugs.launchpad.net/pkginfo/+bug/2103804 (again)
+ pkginfo/tests/test_installed.py::test_installed_ctor_w_dist_info
+)
diff --git a/dev-python/portalocker/Manifest b/dev-python/portalocker/Manifest
index 93996c5dbc2e..52295ce702be 100644
--- a/dev-python/portalocker/Manifest
+++ b/dev-python/portalocker/Manifest
@@ -1,3 +1,4 @@
DIST portalocker-4.2.0.gh.tar.gz 309989 BLAKE2B aa9c437ed180651e0e3ab07af736f12c8eedf7b962845e6affd13295e56609378fad41f4d0aa7b1170aa2dcde81ea9ecad43c73ef024102812b0729de2188ebe SHA512 f4bc04666a4640ca4d7a871a16b0000eceda18ebe3a8606e06ba8f5a74dfd869783467efdc1c058bcfe2b2f8b073ce518c387a6fa1a03c881829e22b57985bb6
DIST portalocker-4.3.2.gh.tar.gz 304218 BLAKE2B ca36b16fc0fecc659a8e408bc4238a40b74085508836dc3e24e9919ea6d1b25aea0b41055b459fd1693085f2a597dd3f0a12cecd645a3780ea683ea941eecd7e SHA512 92bc28b6476f0cbd09ad8454e857978b4aed16d25bf9ed7f2472ff37916ae8101a462ea63692a615c1f414c9af64e7a29dc2eb26c80b9e59885350eb71bf7f81
DIST portalocker-4.4.0.gh.tar.gz 307397 BLAKE2B 2d1b6d2730aa9924b6f6e8cf79628b6d3fdc2795809c81690a7721cb6e51e40c375d4eab8df217120f129b00fc749e2b3be521bd114eb836bf30316d97bcde51 SHA512 b081870124affda5dc06393ef881208c2b08117f1c21d9036978ad6a2ee57c045ff235a2039b52841e235e4186e3fa84fad55783d5814dc0b75d9226922aa1f4
+DIST portalocker-4.4.1.gh.tar.gz 308022 BLAKE2B 53b7d9b218dd5d34a26b248beda6d527bcc2d4cac378c5106620985fd6abfacdc6ae3fed55eb4326a13e235ed4a730bf3a90f9dde7428ef7c33bedd8610eb21e SHA512 d92651bb9b9cf6f12b799ecb2ffccf3c33c2d0da33ccca53f73eefbc32289c3ffa340061488058fd8169433d5ea071c9321ac4f43c2517ce423efb91ba34f368
diff --git a/dev-python/portalocker/portalocker-4.4.1.ebuild b/dev-python/portalocker/portalocker-4.4.1.ebuild
new file mode 100644
index 000000000000..b3a42ce7d36d
--- /dev/null
+++ b/dev-python/portalocker/portalocker-4.4.1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=uv-build
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 optfeature
+
+DESCRIPTION="A library for Python file locking"
+HOMEPAGE="
+ https://github.com/WoLpH/portalocker/
+ https://portalocker.readthedocs.io/
+ https://pypi.org/project/portalocker/
+"
+SRC_URI="
+ https://github.com/WoLpH/${PN}/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64"
+
+BDEPEND="
+ test? (
+ >=dev-python/fakeredis-2.31.0[${PYTHON_USEDEP}]
+ dev-python/redis[${PYTHON_USEDEP}]
+ >=dev-python/sphinx-6.0.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.4[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-{rerunfailures,timeout} )
+distutils_enable_tests pytest
+
+src_prepare() {
+ default
+
+ # Disable code coverage in tests.
+ sed -i '/--cov/d' pyproject.toml || die
+}
+
+pkg_postinst() {
+ optfeature "redis support" dev-python/redis
+}
diff --git a/dev-python/pyqt-builder/Manifest b/dev-python/pyqt-builder/Manifest
index 42d3a7e0e9ef..d9bd1aaaab93 100644
--- a/dev-python/pyqt-builder/Manifest
+++ b/dev-python/pyqt-builder/Manifest
@@ -1,2 +1,3 @@
DIST pyqt_builder-1.19.1.tar.gz 5247679 BLAKE2B c86708891d26d760b4ce8cff535fcb52145c6eab18448b19d66c4039992cf4b4309f4feced07bba7bffdd734ea6e9c54e6e4de93f9dd5d7c269ea89cbab8a19e SHA512 2308c51f93c37b1d13f312e4f2475d26b22d374ef284925fead9eab4aa89b994770431aca45170ac2154b4813fff151798f113f56d4cbf6c6e544fb463104a6d
DIST pyqt_builder-1.20.0.tar.gz 5249605 BLAKE2B 8c84936dbdc584bcff99ec183679024edf0043b0272d1d181ed70b4a6933df42435c5172f15a1dbc148419ad6bf7494fdd903b68e40454d22b5743712355b53b SHA512 e663a875e9ff8cae845b11f849bc9cb3cdbbfb60c85bd1b74b014741f18bfed959fd16912a3111b447749ff951754598d39cf627a6e5a56e1a75f0827bf658e2
+DIST pyqt_builder-1.20.1.tar.gz 5249945 BLAKE2B cd5b14392e1cad34e19a0d7acb15ad4309f70d93193e9ad1281bfb3dd85a8dd6d105a35720d7055d5705e015c33d7f99d7c031f6253027b83f2e053b80e0dd44 SHA512 685eb52843dfcdeb394345a99770989ec9a8d3755c25a8eef56f04ef18e86dff006afe2a90c2e5d15b383b0dda0df5a64c0efa6f64d24c214dfe09430108a504
diff --git a/dev-python/pyqt-builder/pyqt-builder-1.20.1.ebuild b/dev-python/pyqt-builder/pyqt-builder-1.20.1.ebuild
new file mode 100644
index 000000000000..3f17f7a9fe49
--- /dev/null
+++ b/dev-python/pyqt-builder/pyqt-builder-1.20.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+inherit distutils-r1 pypi
+
+DESCRIPTION="The PEP 517 compliant PyQt build system"
+HOMEPAGE="https://github.com/Python-PyQt/PyQt-builder/"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+
+RDEPEND="
+ dev-python/packaging[${PYTHON_USEDEP}]
+ >=dev-python/sip-6.7[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+"
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # skip installing DLLs
+ rm -r pyqtbuild/bundle/dlls || die
+}
diff --git a/dev-python/sphinx-autodoc-typehints/Manifest b/dev-python/sphinx-autodoc-typehints/Manifest
index 02fa5ffd12cb..b4b12dd2af4a 100644
--- a/dev-python/sphinx-autodoc-typehints/Manifest
+++ b/dev-python/sphinx-autodoc-typehints/Manifest
@@ -8,3 +8,5 @@ DIST sphinx_autodoc_typehints-3.13.8.tar.gz 97092 BLAKE2B 1481942fc699d784f1dbf8
DIST sphinx_autodoc_typehints-3.13.8.tar.gz.provenance 10282 BLAKE2B ced3a48168414a26151162b52808e87e8c7a546d18b88085838edabe6bf0b0dd18cb213aa6d4d63bbb6662141bb49934297e27de52bdb9e6bf64bd5c23cf6eec SHA512 e7963f83c115ee60b2ad8043d6f21f7e95fc4f185c173d7c79124d014955cfee4ebfd666333a2df6eccd7271c1e1c3cff6c48fb27ddb10a05bbab7609cbef5fd
DIST sphinx_autodoc_typehints-3.13.9.tar.gz 97745 BLAKE2B 9ca4a81581ff875a6886937644cd6631a7ca60395884e0f38ee025c92fd2f25676a5c423811231ebfc45d7aab9a7dedf909dd8b02ca6c9430df497e5bdadf058 SHA512 1c1ae94cbf84ec4595437467d73bb92e7e1e147e3f29103b1916c0ce67913d18309fa35372df5f24bb08f61fb9057ad7308f65f8e49046b5a8781c69f793385a
DIST sphinx_autodoc_typehints-3.13.9.tar.gz.provenance 10064 BLAKE2B 2cea9575b864d12bf2cc6ef0e1b70a2dfeda295179c33a97ed3cb9b39e46b6c79abd5fddf9890b25ce39c41659809b32f236a3986f670c7de233779cf22b5d49 SHA512 aca83e39274b1060c9be594ee10da94e547f0fe1d118763e9f303c14ea10a6e082332f53aceecbe9f019faf6d7e53c2bfed54fbf676dabf34772dee3ba508d61
+DIST sphinx_autodoc_typehints-3.17.1.tar.gz 569671 BLAKE2B 583924f2e4aabd97712a5e711d70dc4cdf92b939b70a30a57420f987a20468a1f39c0c2ecd0ae59895bcd977a9af5eeab8b1ed1e5565a284b2a2b1066c35d5a3 SHA512 7cd716785dd368adc08183a7e616a3ad7ab9789b03f959a472c71bf5c3fd3b028f08ed6074800f3f056d504766d72a593fa253565884f90eb6c3faf2527e164d
+DIST sphinx_autodoc_typehints-3.17.1.tar.gz.provenance 10272 BLAKE2B c234b81565643cf1f3fd38c1208a0f0bc8d8d2386bf84ab63ec653d2e23f1ddff6068dd89621b38c7a23267e5907ba18ab0179460202184032533060011db666 SHA512 c3243c47ffe427d0bcb94fa5d55081681f38a35e9c8a5929c5f768fc95297bf4c0eba3e52cb4499c1f625b3f7535de0e65c1766c5b20f093f6e7331726c83546
diff --git a/dev-python/sphinx-autodoc-typehints/sphinx-autodoc-typehints-3.17.1.ebuild b/dev-python/sphinx-autodoc-typehints/sphinx-autodoc-typehints-3.17.1.ebuild
new file mode 100644
index 000000000000..035241172498
--- /dev/null
+++ b/dev-python/sphinx-autodoc-typehints/sphinx-autodoc-typehints-3.17.1.ebuild
@@ -0,0 +1,51 @@
+# 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/sphinx-autodoc-typehints
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Type hints support for the Sphinx autodoc extension"
+HOMEPAGE="
+ https://github.com/tox-dev/sphinx-autodoc-typehints/
+ https://pypi.org/project/sphinx-autodoc-typehints/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/sphinx-9.0.4[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ >=dev-python/typing-extensions-4.16[${PYTHON_USEDEP}]
+ ' 3.{12..14})
+"
+# skipping optional test dep on dev-python/nptyping as that package
+# is horribly broken and on its way out
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/attrs-25.4[${PYTHON_USEDEP}]
+ >=dev-python/numpydoc-1.10[${PYTHON_USEDEP}]
+ >=dev-python/sphobjinv-2.3.1[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.5[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Internet
+ tests/test_annotations.py::test_format_annotation
+ tests/test_resolver/test_stubs.py::test_sphinx_build_stub_types_produce_crossrefs
+ # requires sphinx_design
+ tests/test_live_example.py
+ # TODO
+ tests/_resolve/backfill/stubs/test_find.py::test_stub_path_reads_the_properties_of_a_module_proxy
+)
diff --git a/dev-python/sqlalchemy/Manifest b/dev-python/sqlalchemy/Manifest
index 72ff64a94acd..c145e350d5d0 100644
--- a/dev-python/sqlalchemy/Manifest
+++ b/dev-python/sqlalchemy/Manifest
@@ -1,7 +1,9 @@
DIST sqlalchemy-2.0.52.tar.gz 9945637 BLAKE2B 4af6f1485d26c94569babc99ba6cb3314f0bbc4267bc17ebefbb786390214110283b0a43a81cc38d275fcd852bbb74e77ed2167dce6a5ec9b144119eb0593206 SHA512 9341389b75b684b37f2f1bba8fde882c95c77a68e5ff15b8ab16b163db9c31088a884352999b750fbabadbd723cff093e971035159e77562d5cd843305258fdd
DIST sqlalchemy-2.0.53.tar.gz 9966200 BLAKE2B b14be728d4ba7e6517b6e4af96127e3c5bde05218d77afa5bba16638f4270e85c69eded7bd4497c517afc2dbcc5db1baa1201c84d8354ac9a7de8e0f5cf3f98b SHA512 568035a5c37e337eee5606756e5c3bb3edff248cca4879144d690ff4215abc51d697eeb0ab7a3991ea933b65a639d2ae8812e9b325d4fd7d860a26513892609c
DIST sqlalchemy-2.0.54.tar.gz 9969559 BLAKE2B b29973d44b49e8c98267d509246369e78c213a3d53280098c4ea14c6d2ae6161fc2bfb71bd2e4af32c39bc187efd0ae03668bad3963ca79187c3889521da4911 SHA512 d88af975c7fc7d4e1b0781e654ef003fb1de90f00e6a4168b167c2b8c6927732caea5bb9ec084451994d89e8808691bc18abf236d80f6e13158f6f1f0a406d1b
+DIST sqlalchemy-2.0.55.tar.gz 9997689 BLAKE2B 9090e7fb3c307288e1afa3af4913b4d00d2d86af16c5ceb01cdbe0780cc3bc6ef6718ae92819a1faa5213d4ffddc54add659637f870bda5036417e8a0a6c3f1a SHA512 a98b66a99e390fa077b2da4e49a96e3e568944513e0525bf34c0e8f6889b598bf0c627c70a36fe66bc8791c665cb1997f52b04e4cfc14e79fc74a01112c30024
DIST sqlalchemy-2.1.0.tar.gz 10502427 BLAKE2B 74d6c2f44b52f504ea75fb33cc61a0bf063236e6a4b8c35046ba4cdea3284d81ce7b644c21b9add6d65cd9807f4ed0379533b501977324b8f0364cd117bf70d4 SHA512 785b08779e002640fc2abece92fde7f998d08ee49b1b2d85ca37421dfbf67670fbff29976c3b7a0ddb60d12462185c4bc5bf96e17f0d06a7740375c87eb76435
DIST sqlalchemy-2.1.1.tar.gz 10503203 BLAKE2B 18c76e58bb243bc9fff745f3c04435a4072088ee288aec87d3dc5cb1b6da9d556e6d32cab16d836611633e7316b03b0b960a0830213ba56528aa92d529b2e078 SHA512 5ad09e3c4f101818a7954f17eb665c03251a830ffda082c5feced050d6663b7426abdc9ea3f6801c92ec7d3120f072de18a0aa20aab8ac08bd3d8303f6dc8c32
DIST sqlalchemy-2.1.3.tar.gz 10525778 BLAKE2B 7093aecf1b69b410852a6926d0cb4e4c2e0b7b091c9eda4cd6e5a224dbdbe1a29f17ed350abfdf5d0565a2dcfa7f1a00ea31f3c5e553b70652b56be6fac8ad7b SHA512 abce5dac76e71c7bd059da30b0b61291f5fb1f49417fe1c02220ea4903b142a2b58ec2d2c288b65113420e0ddf9e7b09b89a38a8093686f9ee2d872b5e1d791d
DIST sqlalchemy-2.1.4.tar.gz 10544216 BLAKE2B 70414f34f9b1007ca105873c2c7c1789f44656340a6ed6d9fbb28a276f6db0afef69e21fb90abd0f325d2f53a4475f45a7da87db670fc600ae904ab20ef66647 SHA512 fbdafec12fb50654ef73eec69a4bbe885a5fce15cf4a48a26ee322a7e758a6aacab5efb441cff0bbd921065b85dab45b327818c01a1dc856294cf7781a2c1e60
+DIST sqlalchemy-2.1.5.tar.gz 10569593 BLAKE2B 8c483c039900d5535af9ed430d918d9421b81627bcb29b4c7ac32ac1249ff75d08ed76e83c62034940a27a520ec9af049f4364ed21a3b247a5a1c145c0c98cb1 SHA512 2961597ee9bf72fa6cfd1a325a74d5ca1f52066483b6cf343a88c90bdd3084e0e87bcc877743528bbfd1808f11a37c37b4d6cb699a3478840879eb2a010a5b3a
diff --git a/dev-python/sqlalchemy/sqlalchemy-2.0.55.ebuild b/dev-python/sqlalchemy/sqlalchemy-2.0.55.ebuild
new file mode 100644
index 000000000000..b46152f6c679
--- /dev/null
+++ b/dev-python/sqlalchemy/sqlalchemy-2.0.55.ebuild
@@ -0,0 +1,95 @@
+# 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_PN=SQLAlchemy
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="sqlite?"
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Python SQL toolkit and Object Relational Mapper"
+HOMEPAGE="
+ https://www.sqlalchemy.org/
+ https://pypi.org/project/SQLAlchemy/
+ https://github.com/sqlalchemy/sqlalchemy/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos ~x64-solaris"
+IUSE="examples +sqlite test"
+
+RDEPEND="
+ >=dev-python/typing-extensions-4.6.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/cython[${PYTHON_USEDEP}]
+ test? (
+ $(python_gen_impl_dep sqlite)
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ sed -i -e '/greenlet/d' setup.cfg || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ test/ext/mypy/test_mypy_plugin_py3k.py
+ test/typing/test_mypy.py
+ # hardcode call counts specific to Python versions
+ test/aaa_profiling
+ )
+ local EPYTEST_DESELECT=(
+ # warning tests are unreliable
+ test/base/test_warnings.py
+ # TODO: flaky? xdist?
+ test/base/test_concurrency_py3k.py::TestAsyncioCompat::test_await_fallback_no_greenlet
+ )
+ local sqlite_version=$(sqlite3 --version | cut -d' ' -f1)
+ if ! has_version "dev-python/greenlet[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_execution
+ test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_run_sync
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[False-True]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[True-True]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[has_terminate-is_asyncio]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[not_has_terminate-is_asyncio]"
+ "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True-_exclusions0]"
+ "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True]"
+ )
+ fi
+
+ # upstream's test suite is horribly hacky; it relies on disabling
+ # the warnings plugin and turning warnings into errors; this also
+ # means that any DeprecationWarnings from third-party plugins cause
+ # everything to explode
+ epytest --reruns-delay=2 -m "not gc_intensive and not timing_intensive and not mypy"
+}
+
+python_install_all() {
+ if use examples; then
+ docompress -x "/usr/share/doc/${PF}/examples"
+ dodoc -r examples
+ fi
+
+ distutils-r1_python_install_all
+}
+
+pkg_postinst() {
+ optfeature "asyncio support" dev-python/greenlet
+ optfeature "MySQL support" \
+ dev-python/mysqlclient \
+ dev-python/pymysql
+ optfeature "postgresql support" dev-python/psycopg:2
+}
diff --git a/dev-python/sqlalchemy/sqlalchemy-2.1.5.ebuild b/dev-python/sqlalchemy/sqlalchemy-2.1.5.ebuild
new file mode 100644
index 000000000000..d9cf5b3c5b56
--- /dev/null
+++ b/dev-python/sqlalchemy/sqlalchemy-2.1.5.ebuild
@@ -0,0 +1,103 @@
+# 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_PN=SQLAlchemy
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="sqlite?"
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Python SQL toolkit and Object Relational Mapper"
+HOMEPAGE="
+ https://www.sqlalchemy.org/
+ https://pypi.org/project/SQLAlchemy/
+ https://github.com/sqlalchemy/sqlalchemy/
+"
+
+LICENSE="MIT"
+SLOT="0"
+if [[ ${PV} != *_beta* ]]; then
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos ~x64-solaris"
+fi
+IUSE="examples +sqlite test"
+
+RDEPEND="
+ >=dev-python/typing-extensions-4.6.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/cython[${PYTHON_USEDEP}]
+ test? (
+ $(python_gen_impl_dep sqlite)
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ test/ext/mypy/test_mypy_plugin_py3k.py
+ test/typing/test_mypy.py
+ # hardcode call counts specific to Python versions
+ test/aaa_profiling
+ )
+ local EPYTEST_DESELECT=(
+ # warning tests are unreliable
+ test/base/test_warnings.py
+ # TODO: flaky? xdist?
+ test/base/test_concurrency_py3k.py::TestAsyncioCompat::test_await_fallback_no_greenlet
+ )
+ local sqlite_version=$(sqlite3 --version | cut -d' ' -f1)
+ case ${EPYTHON} in
+ python3.15)
+ EPYTEST_DESELECT+=(
+ # repr() changes
+ test/orm/declarative/test_dc_transforms.py::DCTransformsTest::test_basic_constructor_repr_base_cls
+ test/orm/declarative/test_dc_transforms_future_anno_sync.py::DCTransformsTest::test_basic_constructor_repr_base_cls
+ # exception message changes
+ test/engine/test_processors.py::PyDateProcessorTest::test_no_string
+ )
+ ;;
+ esac
+ if ! has_version "dev-python/greenlet[${PYTHON_USEDEP}]"; then
+ EPYTEST_DESELECT+=(
+ test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_execution
+ test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_run_sync
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[False-True]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[True-True]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[has_terminate-is_asyncio]"
+ "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[not_has_terminate-is_asyncio]"
+ "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True-_exclusions0]"
+ "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True]"
+ )
+ fi
+
+ # upstream's test suite is horribly hacky; it relies on disabling
+ # the warnings plugin and turning warnings into errors; this also
+ # means that any DeprecationWarnings from third-party plugins cause
+ # everything to explode
+ epytest --reruns-delay=2 -m "not gc_intensive and not timing_intensive and not mypy"
+}
+
+python_install_all() {
+ if use examples; then
+ docompress -x "/usr/share/doc/${PF}/examples"
+ dodoc -r examples
+ fi
+
+ distutils-r1_python_install_all
+}
+
+pkg_postinst() {
+ optfeature "asyncio support" dev-python/greenlet
+ optfeature "MySQL support" \
+ dev-python/mysqlclient \
+ dev-python/pymysql
+ optfeature "postgresql support" dev-python/psycopg:2
+}
diff --git a/dev-python/superqt/Manifest b/dev-python/superqt/Manifest
index 6476eafc0efb..51da8538a6e1 100644
--- a/dev-python/superqt/Manifest
+++ b/dev-python/superqt/Manifest
@@ -1,2 +1,4 @@
DIST superqt-0.8.2.tar.gz 110190 BLAKE2B 0dd0b44bd964d95a0dcdd2179e3ca83670cce904b67e1a656dfcdf1bbea40cc8243152409f562b9002c1e163a1bb71377ee1932fcaf69f7bc75a7654b056593a SHA512 8bcf19a48c90131c702c489bf8d7bfb68fb37607bf0e9fb2fade8834ef4ce604512861c265e5cbd1c7157235d98c46d960ba4431a76bf51918002fe83cf2fe79
DIST superqt-0.8.2.tar.gz.provenance 9583 BLAKE2B 509d8a87a3b8a09b72a6768dc01de01aba177f933706a87867596d06ec85ee0eb261ce1fe5ab5c50e6ab064434dfdc7530419127b05b8b9f66079329c134d170 SHA512 c1bb553c7c7d94154e74fa14aad05964047426f8b588eb5b69b2e4166ae522c9efd54c91a5ad683d3ac4a6f767b44bd1622767d9e495a7a5d8d0195b4a2b08ef
+DIST superqt-0.9.0.tar.gz 111490 BLAKE2B c659e5ea5b1c15e453b60c1d59f048d0543840e5d13629ced477cc72cd9dfb1c46d9baeffac13dc57356185bcbaa0e529aef37d09d41d2d41be1756a5953cd20 SHA512 312851ba980209ea63e555fb84f44a6df32df63ec40872f8ba7beddc1c45d3b8023afd7601e50c8bfb376e02c9c4d52fc331dde6b57a72ec9c14c378022cfd43
+DIST superqt-0.9.0.tar.gz.provenance 9732 BLAKE2B 402fefbb4a8777fbc09871a0851497e284f5f72a3bd83077ce2732ef4cc740201d389dfc5a55ed73de29ba19d15f858b218aa8c70e7d98b2f0931ec176d08b0a SHA512 ac5ab1e3ef457a6ad70a89e181fe9fe229bc957eaf294b2c21d7e6e4fa7406eb29f537a2cfc53e3e5680e94c54b04f1fd4eaa82d938b6ffce25b0e97f4e8cf2b
diff --git a/dev-python/superqt/superqt-0.9.0.ebuild b/dev-python/superqt/superqt-0.9.0.ebuild
new file mode 100644
index 000000000000..334f9a7c94ae
--- /dev/null
+++ b/dev-python/superqt/superqt-0.9.0.ebuild
@@ -0,0 +1,74 @@
+# 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/pyapp-kit/superqt
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit distutils-r1 pypi virtualx
+
+DESCRIPTION="Missing widgets and components for PyQt/PySide"
+HOMEPAGE="
+ https://github.com/pyapp-kit/superqt/
+ https://pypi.org/project/superqt/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+RDEPEND="
+ >=dev-python/pygments-2.4.0[${PYTHON_USEDEP}]
+ >=dev-python/qtpy-2.4.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.12.0[${PYTHON_USEDEP}]
+"
+
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ dev-python/numpy[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-qt )
+: ${EPYTEST_TIMEOUT:=30}
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_test() {
+ local ALL_QT_APIS=()
+ local api
+
+ for api in pyqt6 pyside6; do
+ has_version "dev-python/qtpy[${api},${PYTHON_USEDEP}]" || continue
+ ALL_QT_APIS+=( "${api}" )
+ done
+ [[ -z ${ALL_QT_APIS[@]} ]] && die "No Qt6 implementation found?!"
+
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # pint and pyconify not packaged
+ tests/test_quantity.py
+ tests/test_iconify.py
+ )
+ local EPYTEST_DESELECT=()
+
+ for api in "${ALL_QT_APIS[@]}"; do
+ case ${api} in
+ pyqt6)
+ EPYTEST_DESELECT=(
+ # crashing on assertions
+ tests/test_color_combo.py::test_q_color_combobox
+ )
+ ;;
+ esac
+
+ einfo "Testing with ${api}"
+ epytest -o "qt_api=${api}"
+ done
+}