summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-12-03 07:17:04 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-12-03 07:17:04 +0000
commitb1e1e45ccf9046389419a754151ee4ef914cb3c3 (patch)
tree918c41f94fedc55fca3497965524274dab24a846 /dev-python
parent87da72753a800d1276b3c7197bf69b28fcfa26d0 (diff)
downloadbaldeagleos-repo-b1e1e45ccf9046389419a754151ee4ef914cb3c3.tar.gz
baldeagleos-repo-b1e1e45ccf9046389419a754151ee4ef914cb3c3.tar.xz
baldeagleos-repo-b1e1e45ccf9046389419a754151ee4ef914cb3c3.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/ansible-compat/Manifest3
-rw-r--r--dev-python/ansible-compat/ansible-compat-25.12.0.ebuild (renamed from dev-python/ansible-compat/ansible-compat-25.8.1.ebuild)14
-rw-r--r--dev-python/aws-sam-translator/Manifest1
-rw-r--r--dev-python/aws-sam-translator/aws-sam-translator-1.105.0.ebuild62
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.42.1.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.42.1.ebuild67
-rw-r--r--dev-python/django/Manifest6
-rw-r--r--dev-python/django/django-4.2.27.ebuild106
-rw-r--r--dev-python/django/django-5.1.15.ebuild100
-rw-r--r--dev-python/django/django-5.2.9.ebuild102
-rw-r--r--dev-python/numpydoc/Manifest1
-rw-r--r--dev-python/numpydoc/numpydoc-1.10.0.ebuild49
-rw-r--r--dev-python/psycopg/Manifest1
-rw-r--r--dev-python/psycopg/psycopg-3.3.1.ebuild123
-rw-r--r--dev-python/pydyf/Manifest2
-rw-r--r--dev-python/pydyf/pydyf-0.12.1.ebuild30
-rw-r--r--dev-python/pymongo/Manifest5
-rw-r--r--dev-python/pymongo/files/pymongo-4.15.2-backports.patch212
-rw-r--r--dev-python/pymongo/pymongo-4.15.1.ebuild201
-rw-r--r--dev-python/pymongo/pymongo-4.15.2-r1.ebuild207
-rw-r--r--dev-python/pymongo/pymongo-4.15.2.ebuild201
-rw-r--r--dev-python/pymongo/pymongo-4.15.3.ebuild201
-rw-r--r--dev-python/pymongo/pymongo-4.15.5.ebuild (renamed from dev-python/pymongo/pymongo-4.15.0.ebuild)0
-rw-r--r--dev-python/pytest-httpx/Manifest1
-rw-r--r--dev-python/pytest-httpx/pytest-httpx-0.36.0.ebuild39
-rw-r--r--dev-python/python-tests/Manifest3
-rw-r--r--dev-python/python-tests/python-tests-0.3.14.1.ebuild73
-rw-r--r--dev-python/python-tests/python-tests-3.14.1.ebuild72
-rw-r--r--dev-python/pyzotero/Manifest4
-rw-r--r--dev-python/pyzotero/pyzotero-1.7.6.ebuild (renamed from dev-python/pyzotero/pyzotero-1.7.3.ebuild)0
-rw-r--r--dev-python/sabctools/Manifest1
-rw-r--r--dev-python/sabctools/sabctools-9.0.0.ebuild40
-rw-r--r--dev-python/sphinx-gallery/Manifest1
-rw-r--r--dev-python/sphinx-gallery/sphinx-gallery-0.20.0.ebuild52
-rw-r--r--dev-python/sqlglot/Manifest2
-rw-r--r--dev-python/sqlglot/sqlglot-28.1.0.ebuild (renamed from dev-python/sqlglot/sqlglot-27.28.1.ebuild)0
-rw-r--r--dev-python/sybil/Manifest2
-rw-r--r--dev-python/sybil/sybil-9.1.0.ebuild42
-rw-r--r--dev-python/sybil/sybil-9.3.0.ebuild (renamed from dev-python/sybil/sybil-9.2.0.ebuild)2
-rw-r--r--dev-python/urwid/Manifest2
-rw-r--r--dev-python/urwid/urwid-3.0.4.ebuild (renamed from dev-python/urwid/urwid-3.0.2.ebuild)2
-rw-r--r--dev-python/uv-build/Manifest1
-rw-r--r--dev-python/uv-build/uv-build-0.9.15.ebuild99
-rw-r--r--dev-python/uv/Manifest2
-rw-r--r--dev-python/uv/uv-0.9.15.ebuild167
-rw-r--r--dev-python/weasyprint/Manifest2
-rw-r--r--dev-python/weasyprint/weasyprint-67.0.ebuild45
49 files changed, 1324 insertions, 1079 deletions
diff --git a/dev-python/ansible-compat/Manifest b/dev-python/ansible-compat/Manifest
index 889a29485ac2..1f8e61eb8806 100644
--- a/dev-python/ansible-compat/Manifest
+++ b/dev-python/ansible-compat/Manifest
@@ -1,4 +1,5 @@
DIST ansible_compat-25.11.0.tar.gz 193024 BLAKE2B d4e802582911f04429823e4f5e66c0fa40a6ebd9c6a8cbaff6a56728ef772bb0ed558584d9b6ffcafa78e7d06070f6574b66cfc75aacd975d7fe9834deb04a5d SHA512 e8af788d69ef9aa532c0b2f5f6401df1c61a4bd1d90e269c8d7d1418048e5f6d78bbc116d704fb875dada7e2389d25b57385dae90af0cbaceeedd37c7d3d9665
DIST ansible_compat-25.11.0.tar.gz.provenance 9485 BLAKE2B be19bf3dced5710bfd76a09c59ab05029c676a79c09325840f5ce3af98c120578177320ede09f45025279d10ca190d3d3e74d4d18f8633903957be416e30384c SHA512 db70483ecf37cdd29287e7cf5d6a37455537ce40ea0bcca1ad30b48d8eabdd9f384197862b50017a35a829028c1d1c56229e30ebf3b6d0d265d386303c8760db
-DIST ansible_compat-25.8.1.tar.gz 90142 BLAKE2B 39c98e2e4f7fe9da00543b1ba2fce24e303c25aa269c1a4f86ed96a7e29ebb9f31fa40516fba78017e940ddcea5f6fba95bf0b4eccebc77fd0c13d282bf6df97 SHA512 b0bc8ef6f614e7c41becba6090ebd4a5c09bb9ac957a56652eb59d18eb2d03398e149af21071883a7b236e0ee724b354322a043f8d45c23b4db6d1864f871130
+DIST ansible_compat-25.12.0.tar.gz 193698 BLAKE2B f3eb02d8257a2a3136182d1338359cab0d7c0f2e3a7f77ee26d52e3e3af8105445a3937e836821b4eedaa203f25230625ff0ff779e8c4e78eb8d85a498794be3 SHA512 a2ecf54a3c3324f5be8c10475aca1b528ee186ac402f841be6d7a8ae379019ae3d3486fcec7e433744f9d2053471ae219c0977c93073dc67029cad3f44868229
+DIST ansible_compat-25.12.0.tar.gz.provenance 9250 BLAKE2B ebe215a01b27030246fcda815e286d827b8bc148e4c6095a76f233628fbd77512b1f9cbdc88f65998c2431a915b7ccc78b35862e2d23147f6af73d416ef450de SHA512 f6097b1f729c67e5129366a8bd2c79386234622a91108ffe1d5f71a7b7b215e726893ba6237e121e43f9b90970c5b0ad61094fcb8a13eca88c76e95a2eb95a06
DIST ansible_compat-25.8.2.tar.gz 190581 BLAKE2B a20ebf6b595a8933d02b88c1f9f8efae8e7ffac3378bed3c50fd8fbf74a73663c5406fde7f05f0a923ba7ce75d920f3bf58e347cb7650cec77cb974ed805e45c SHA512 78beb54d3ad65e02e7009834b5690b118c6743274fa5fd31941e63a7f99d3b7ac2fcbce0fa80d45212a6bcf4365628e731cb139a6af14360c0552e9a759d6336
diff --git a/dev-python/ansible-compat/ansible-compat-25.8.1.ebuild b/dev-python/ansible-compat/ansible-compat-25.12.0.ebuild
index 93644af8c775..ec21a6d2eb43 100644
--- a/dev-python/ansible-compat/ansible-compat-25.8.1.ebuild
+++ b/dev-python/ansible-compat/ansible-compat-25.12.0.ebuild
@@ -4,6 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517="setuptools"
+PYPI_VERIFY_REPO=https://github.com/ansible/ansible-compat
PYTHON_COMPAT=( python3_{10..14} )
inherit distutils-r1 pypi
@@ -16,13 +17,13 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="amd64 ~arm64 ~riscv"
+KEYWORDS="~amd64 ~arm64 ~riscv"
RDEPEND="
>=app-admin/ansible-core-2.18.6[${PYTHON_USEDEP}]
>=dev-python/jsonschema-4.23.0[${PYTHON_USEDEP}]
- dev-python/packaging[${PYTHON_USEDEP}]
- dev-python/pyyaml[${PYTHON_USEDEP}]
+ >=dev-python/packaging-22.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.1[${PYTHON_USEDEP}]
>=dev-python/subprocess-tee-0.4.1[${PYTHON_USEDEP}]
"
BDEPEND="
@@ -32,6 +33,13 @@ BDEPEND="
EPYTEST_PLUGINS=( pytest-{mock,plus} )
distutils_enable_tests pytest
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # remove stupid upstream version block
+ sed -i -e 's:2.20.0dev0:0:' src/ansible_compat/prerun.py || die
+}
+
python_test() {
local EPYTEST_DESELECT=(
# All these tests attempt to connect to galaxy.ansible.com
diff --git a/dev-python/aws-sam-translator/Manifest b/dev-python/aws-sam-translator/Manifest
index d6c82644fc47..6b7a66f4631e 100644
--- a/dev-python/aws-sam-translator/Manifest
+++ b/dev-python/aws-sam-translator/Manifest
@@ -2,3 +2,4 @@ DIST serverless-application-model-1.101.0.gh.tar.gz 6002271 BLAKE2B 726fd5a91a8a
DIST serverless-application-model-1.102.0.gh.tar.gz 6025703 BLAKE2B 1ef7603694263999375a8291d39461abf796433a3eab5178b4a5ee10d8d811b244ffc3e4a4036a47d888220415e84c382afb11b28d180fcc2b6216bda290beb4 SHA512 354c307f45efedb3e3fc7b7df881c147a619c9ab90cf5e34106b60a517def82d1cda669dcdefac39e0be2ec8d47ea40868108c6a97c88cc27baeb9d2e1c5bc2c
DIST serverless-application-model-1.103.0.gh.tar.gz 6035870 BLAKE2B c6822f8e16639f2a28bafc964420f79617732662b03b9a3af712c043ba143ad6e5b3291732a1a6827a7823a71ae40fd48869574eaa775e77830c40bda59fc6d7 SHA512 fa468c3878a7c74558c75befa50c13aac93bae9af6150a5bb44e8ec3ea3c29a5d51c8d0dc403630f7aa239652b74f6a491fb2a342d58b08356629cf4e4f3afa2
DIST serverless-application-model-1.104.0.gh.tar.gz 6073035 BLAKE2B 765e94ebf8c0d3da9e660a5fda573075f07961e7bd8f89b9302b76d83f7071386ebca1cccf0d2baea6dbe4f8e00e3231fca2cb3343e3a09b17d6e67c3423baf0 SHA512 30d51690bdef7d39e631f13a7ba8cffa425fd9e8f9cc718a1bdd331ab1cea91c5f48648bb42b290b1f7fa4b9434840da90bc372cbdfc12d36ca2f0cf3afb3a68
+DIST serverless-application-model-1.105.0.gh.tar.gz 6074585 BLAKE2B c63f374f3e9a4b159316864c10e3888e38c8908e0364d3b6d6e08c5c05189fc3a6a9ef6ce348f98269b929134df84704b4c9ffbb374f870926ec4abb1bcd08c3 SHA512 36d9a56c618b30c6ab90c29fb090997439d01bd240c51c03d9acd70e87dc34d2a5659767d4062e8bf5b8fab5bf99d32fb7cb934090f128c7fe850883987f72d4
diff --git a/dev-python/aws-sam-translator/aws-sam-translator-1.105.0.ebuild b/dev-python/aws-sam-translator/aws-sam-translator-1.105.0.ebuild
new file mode 100644
index 000000000000..5093c4c1db44
--- /dev/null
+++ b/dev-python/aws-sam-translator/aws-sam-translator-1.105.0.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+# py3.14: https://github.com/aws/serverless-application-model/issues/3831
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+MY_P=serverless-application-model-${PV}
+DESCRIPTION="A library that transform SAM templates into AWS CloudFormation templates"
+HOMEPAGE="
+ https://github.com/aws/serverless-application-model/
+ https://pypi.org/project/aws-sam-translator/
+"
+SRC_URI="
+ https://github.com/aws/serverless-application-model/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="
+ <dev-python/boto3-2[${PYTHON_USEDEP}]
+ >=dev-python/boto3-1.34.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.2[${PYTHON_USEDEP}]
+ <dev-python/pydantic-3[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-1.8[${PYTHON_USEDEP}]
+ <dev-python/typing-extensions-5[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.4[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/parameterized[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ # so much noise...
+ sed -i -e '/log_cli/d' pytest.ini || die
+
+ # deps are installed by ebuild, don't try to reinstall them via pip
+ truncate --size=0 requirements/*.txt || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ local -x AWS_DEFAULT_REGION=us-east-1
+ epytest -o addopts= -o filterwarnings=
+}
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index 7dd8d974c7d9..944a50da528e 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -4,3 +4,4 @@ DIST boto3-1.40.74.gh.tar.gz 1032058 BLAKE2B c24653bac3279f688d240390f53a9070d51
DIST boto3-1.41.2.gh.tar.gz 1047105 BLAKE2B ac62862f9430604d6056e9ee9c0c6747bc8abd000957365e569d20c96f0672c771c628ce0bd1d644aee6149b22792f455b43f58fce987d5ba00acbfbf56bd7f2 SHA512 98209ea6ded6c1018b98106c89b53d2115fad3de26524f7b9efa0c91f1e4435c9ea2d954c21d8666cb427777ade60bb12a36544d9844dc1d79f925c3206a578f
DIST boto3-1.41.5.gh.tar.gz 1047828 BLAKE2B c4ff68f8851f56539998186d6dab74d015e5752aa3e1f29226ff67b7457618f48d04637a6532e73016203970be82ca3fe9f295dbf6fb68c6a126058bfe452999 SHA512 c41c80a42513ae9aa09789aed69798b8946042d9cbf9de67c8541cce254cacc06ee965d53d61b0bd773762e4bf49e533d6c9ca11c5bce390544be317b60a601b
DIST boto3-1.42.0.gh.tar.gz 1051896 BLAKE2B 5bc423d834f4baba83b1e332b67fbfbe76b7dc1dc61e12750ebf3d25bde987d76815039980d3b30b5a0c8904c9fd4045900e03a7d593f99f5ec446e83e491279 SHA512 cd204476d704732077f12fa4be1ffb6ed6c535f5997ffdaae188d9b632604d613b60f0644768ccc4454255afefd2fe762f3590a1bbeada1ab53a2eee98421cb1
+DIST boto3-1.42.1.gh.tar.gz 1054688 BLAKE2B 9722ba8fb97df81abfbcc26f5ab5d5c7819a3cd1f265af9938820968ba79232ed453c594db3bc661ac6bed50058638903700e8c8e16613b59c88bc97807ad966 SHA512 961cae734e2e8db1e0511d19f24f5b509b14fbcc9d32327fa39928b21d502516b4dec8a2723c342bdc77649df292086f2b8281b30d54396f9849445b61fff8b7
diff --git a/dev-python/boto3/boto3-1.42.1.ebuild b/dev-python/boto3/boto3-1.42.1.ebuild
new file mode 100644
index 000000000000..6f9b5b5d57b1
--- /dev/null
+++ b/dev-python/boto3/boto3-1.42.1.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="The AWS SDK for Python"
+HOMEPAGE="
+ https://github.com/boto/boto3/
+ https://pypi.org/project/boto3/
+"
+SRC_URI="
+ https://github.com/boto/boto3/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="
+ >=dev-python/botocore-${PV}[${PYTHON_USEDEP}]
+ >=dev-python/jmespath-0.7.1[${PYTHON_USEDEP}]
+ >=dev-python/s3transfer-0.16.0[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ # don't lock versions to narrow ranges
+ sed -e '/botocore/ d' \
+ -e '/jmespath/ d' \
+ -e '/s3transfer/ d' \
+ -i setup.py || die
+
+ # do not rely on bundled deps in botocore (sic!)
+ find -name '*.py' -exec sed -i \
+ -e 's:from botocore[.]vendored import:import:' \
+ -e 's:from botocore[.]vendored[.]:from :' \
+ {} + || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/botocore/Manifest b/dev-python/botocore/Manifest
index 6e7f5cac4ba1..63f9e8f6bffb 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -4,3 +4,4 @@ DIST botocore-1.40.74.gh.tar.gz 15284643 BLAKE2B 585f072a5ec39c12e3f74a272b0c5ed
DIST botocore-1.41.2.gh.tar.gz 15504253 BLAKE2B 3c3967e3876ec2529ed0fbd192594f963ebc75f27f196188456a3f4999187b92072224da7d0d91d3dba44c109a74eb35229062e61f161d30f5fad69fcd6097ae SHA512 47cbae2cd1c729fbe6ef55ef5ad6102f636dfb62dd4b4011ad8d163dfdd038d94201b49e48847fed4130e5523b0279b921eedcb94ee4611f42e6aa102bb3705f
DIST botocore-1.41.5.gh.tar.gz 15519699 BLAKE2B 05c9cd0768013d6e3af76ad9daf8b957bb8d6e3f17b3bfb85d4dc73de36ab71ff5da14306d5147375ec1d5a3080f5b25c056e2796c7918f21aba1fafe32deff8 SHA512 8f95ce652ef670129966aca8265022c79544bcb0927504ee0567272412437dc8789df10c7f77696434864ec541b6b17dc39aabb1ec16ee690a22617fe8d7da03
DIST botocore-1.41.6.gh.tar.gz 15619213 BLAKE2B 132f1020643f335793393f34545d7f13c0e69394ccaa4ad047694e681832ea340ee76925879e3bcff45145fda387f6b2a81ca9e69d424fe39b8754e04aee541d SHA512 15ecad28923a7ab80c749856ce9e7b02b14eaf9f2346786f0943b3a450bbe94eacd3b2f8275b8b2e6612d6c1faf53aa8788fb790722471e49c6fdf7c3cc2dd81
+DIST botocore-1.42.1.gh.tar.gz 15695042 BLAKE2B f0587a7e8112d0fd80cb40fb0da6cf88f3c0ec567a803a062f295624ca3541e0adb4cfc6d039e4bfdbcbf0c4ed07ae0117ce1ce691c6e95914bc4767d57324d4 SHA512 627ae08b65839f48fd24b567951e45363bb5d0c1ff566701a5396f6c6b0e5c58ce66143eb5bab64656d80c0751aad22af04a5d1f048d234a854325139c408846
diff --git a/dev-python/botocore/botocore-1.42.1.ebuild b/dev-python/botocore/botocore-1.42.1.ebuild
new file mode 100644
index 000000000000..ee8074e67dce
--- /dev/null
+++ b/dev-python/botocore/botocore-1.42.1.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="Low-level, data-driven core of boto 3"
+HOMEPAGE="
+ https://github.com/boto/botocore/
+ https://pypi.org/project/botocore/
+"
+SRC_URI="
+ https://github.com/boto/botocore/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="
+ <dev-python/jmespath-2[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ >=dev-python/urllib3-1.25.4[${PYTHON_USEDEP}]
+"
+# unbundled packages
+RDEPEND+="
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/six[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ # unpin deps
+ sed -i -e "s:>=.*':':" setup.py || die
+
+ # unbundle deps
+ rm -r botocore/vendored || die
+ find -name '*.py' -exec sed -i \
+ -e 's:from botocore[.]vendored import:import:' \
+ -e 's:from botocore[.]vendored[.]:from :' \
+ {} + || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # rely on bundled six
+ tests/functional/test_six_imports.py::test_no_bare_six_imports
+ tests/functional/test_six_threading.py::test_six_thread_safety
+ )
+
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/django/Manifest b/dev-python/django/Manifest
index a72dc6da4103..bf40e3074e7f 100644
--- a/dev-python/django/Manifest
+++ b/dev-python/django/Manifest
@@ -1,11 +1,17 @@
DIST Django-4.2.26.checksum.txt 2550 BLAKE2B 39602268316a1391e5f97baecf412c4c27c355521a82c99a9d017825f3edbb963e5f8693142889f77bd7352bb954a8cb0eee30701daaa03b128c28c6cb520c4a SHA512 668536de6e8293ea72480e86fbdb42852364e8b81b8d170e2035026ca9f73697f1eb52c6c612a11bb2b2894a9a0de27d7f422fdf255b28152021014704070962
+DIST Django-4.2.27.checksum.txt 2493 BLAKE2B da4638b538a8ce20c4ee211b374299945a4c8b66854dd233986841073a7b8002b25f8280a9fd1916a2f44bfdcff3adc2760de6b0fd53bc0e4b481664d307ccb0 SHA512 ed435a7967679d8f7a4717fe71452522d2a8b18bd59586ccbe3550a84244d2b0098f631459a43519e55ae5b5615c0d10da69c9fda577395c8335cb624e0f8227
DIST Django-5.1.14.checksum.txt 2550 BLAKE2B 73aa763ab3cb61b8de40cd58ea4ef9ca8c570233ab325b3407fa1f08cf6cb485a48a350314e09e01d943ec1091d4bdcd220c9ed4bafccb52c883c539d605aec9 SHA512 9d7f3e1bc290d931ff6285c6553049f687212a60b360fbb4054e76e59b08d51a07de1407cb963fbf551915279233995f049b3196cd3788870f853ec886c17beb
+DIST Django-5.1.15.checksum.txt 2493 BLAKE2B ad415c28c9676c39de6fd93976706a7228fbb3a257c6af1151d10ab33cc90b096caebc7150a6ff1f71f2469fcb9053076a29a22d336dd2dee9ed1efac2df6762 SHA512 04504dc22603ff97b0dc5bb1885d22368223d7a047a1a30db225b95376578dd7375b31d4b43036e4ae55e31156cc9d7c01d71f3d46e72bba72e74883a44de36a
DIST Django-5.2.8.checksum.txt 2540 BLAKE2B 6ce5b10c1125ac0f8429dd2050d252e4c3a32c00cc71b727cdf48b80add05031cc017bc0976a6e3bd9ee69ac1c1b8e5eb50c793ff48dc2d611a8396e2a0564ee SHA512 b17e87987f0c9d772d4265e10cbfd51db6ef31dc43f25364762df1dd0da1acf9ca5aa0f300110f511d8eb1e8e87bf48ecc19a0710e7a01b19884459f644982a7
+DIST Django-5.2.9.checksum.txt 2483 BLAKE2B b46ad16f6096fb52ad83518d0976fe3cad4b7b21f984be6aa8fd20255306635ccfed7f018ff420052d94ca97d2444dedc4d9a4deacf95fe92718f979aaa7157d SHA512 e72fcd67ebf3542d1f17aed46cc6dcf5efa3e1f39ad6914c50521170a944f08b94ec36caccc254178be8bcf306b76654285d37c02eb4d8c6f0728df53054a3b2
DIST Django-6.0b1.checksum.txt 2540 BLAKE2B 6f045bd743c38698c7c0bbf914aca26d8eca883db60f530456b0261570fa73690755965416bf71c8f78bd6a388c5fd63de255c09a7b882eacc270f805c1c1543 SHA512 b300ba29fa55c523255fb3688079c823873e44c2b3bcd4ce3ef91e67dfac83798b56ac0588ea7487841a2d0b69af038ee563e62ebf570feaf405e0971cb453b5
DIST Django-6.0rc1.checksum.txt 2551 BLAKE2B 0f7837fd757ba1b5845fdace35277516a9372b563623348245150ba875bc1cda4689941e1f188b6e6574a3173f7c3f66fc4cfdefeacc9737ec74ae23308f443a SHA512 92aa1687f370b53b5c69d18e7c9db26ed65d708b51e043e5f9fd32a60d68d6071e5835cedb4a44b774fcc6dbd0a993860a30a596191cf51c91e54388e4d7e023
DIST django-4.2.17-pypy3.patch.xz 5900 BLAKE2B 2a564fc31d8e2f3def5a532d3bca1a4426a496c659192f602d659e0c1a5f5882978baedb384cc3b67fda8c836513ce43aece80db1528c8e8b6e9ca420f7572ce SHA512 9c9d935aff6db7230a26931b5e7f5f94f3b5ff4fc8f7d4201178571de9d9c7929a0e1e558cc2d9b54b8ee91f85819a5680d24fad6251620515a4a020e3b2d66d
DIST django-4.2.26.tar.gz 10433052 BLAKE2B 5c6cd5cafcca047970b5bd9d4d6f6dedb0fdc51ff27421b409d3f08ec87422e4c33542c299389f315e2390b38498da4a0b8b934f24ececb0f3f9de729fc3975c SHA512 49fc2d3796719b201567bcd1d68d4a018a62ffbd5aef3c609cbeb4e415f6508e383908949dba45fc3c2c9ca6d53f88c80598cf72ea29bf7b9fbd7d237dcc5077
+DIST django-4.2.27.tar.gz 10432781 BLAKE2B 1a5864841d86881f245f4e8a11db290aa76753b713f3584aa1a2334131191c472839c2c5ae98bbb2c9e5ed85d99e558f08844a6d38fa87c716092efcd5fcc0b8 SHA512 8bb5e63ef13066aa8ee051ba2b7914f3c848f9c7406f2f53dd1fbaedf1ad752d342ea670485d81969d2b60a42dea2c6064065431e1415e408a7da026785e8ff1
DIST django-5.1.14.tar.gz 10720998 BLAKE2B 83bc02c1375a75b83678a9fe86362077e96b34c6fd2c451072c7be3b343c6fe2754deb107ffa34d949ab5ff0f406acfc967ef3cd52cd5147255d09a4ac5828c3 SHA512 29e2d4746df664a129a940ba9ba35d5b5e5f7104477e3055b02628f66c761def7d601b0f917c7e16988795c36c749d7c093e53da8ad90983a9d7f478adb41781
+DIST django-5.1.15.tar.gz 10719662 BLAKE2B fd8a78384b04cf1e0fa7553ebd7db77078450227c6f66e63f5f251efc2c7a7f71a48d1235c179e2f316efe5666681622a1608a129c0aab40c1d2ca4bf0f3879a SHA512 050a3ded3566e378cb273cb95fa1720632f1920aa86993c998758236df5041628ada7a5fb6bd3056720a5becbb45e358c70a2ca7c230b28606a1fd954771c070
DIST django-5.2.8.tar.gz 10849032 BLAKE2B c24bed7d303ef60d468b898e8b5f09eea21ff98ddc1ee5f44f6c796c47b645cddcd877d0a64817e7c993023c8ed6cc8211ac72470ad4c500c8e54918e4a75a44 SHA512 e360b69d45841c5c6068e96560621155cba5450901c0f598da226bc6fb9ea89c5a909f5568e4b492aa852006e7b00ab3528aa8f5ff6d97baa6227e7dcf8c068c
+DIST django-5.2.9.tar.gz 10848762 BLAKE2B 45dc5c96153e57622a1ec52d93db358c3ca6100a82fd95d26f451d44a2792e78948c89c4e90fb0db8c48cbce8e6aad8d0dedc54fa13bf74fa623e6f85251a98a SHA512 669bb4e21b2073fd7a59971efa6d662c5bbfc05284867b562f93b6e56039b06f843726a1a964a4763458c211e238b21d1f91e70cda394d78031a2324bbf35d7f
DIST django-6.0b1.tar.gz 11172994 BLAKE2B 03f52be511d9e3509402ff2ec8a5f582a0c199503d41f395e3e34ad37f3aadcadd7f5c4c134bc2685186a833342c0a15e734468316d4241ae3ffc8e8b886b5e8 SHA512 5007fee32b7af26afa4f9aaa506d2cb552a38ba5ac221775c12511f4fed815fae1901352ff9c35bfed48b766ee01f323a0773dcdf5e2924793612ae565c300a0
DIST django-6.0rc1.tar.gz 10921876 BLAKE2B 35d3010cfd9aed79b8df2e50d34d731c056c86a31f0148a4b5c737f268f44353d5a5fe672ee2b5b352e25a90a08adc0f98de9c2ff820d55658aaab517b2fd9e4 SHA512 ebee0f89719992f28e49ee15ec4543fe5f65caefcf624a96146e3bb2ec327cc4646d3228d127384d97a72e0e197d636741fdb753d0291fc9fd888e496e742ea5
diff --git a/dev-python/django/django-4.2.27.ebuild b/dev-python/django/django-4.2.27.ebuild
new file mode 100644
index 000000000000..1fe26958d1ed
--- /dev/null
+++ b/dev-python/django/django-4.2.27.ebuild
@@ -0,0 +1,106 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE='sqlite?,threads(+)'
+
+inherit bash-completion-r1 distutils-r1 multiprocessing optfeature verify-sig
+
+DESCRIPTION="High-level Python web framework"
+HOMEPAGE="
+ https://www.djangoproject.com/
+ https://github.com/django/django/
+ https://pypi.org/project/Django/
+"
+SRC_URI="
+ https://media.djangoproject.com/releases/$(ver_cut 1-2)/${P}.tar.gz
+ https://dev.gentoo.org/~mgorny/dist/python/django-4.2.17-pypy3.patch.xz
+ verify-sig? ( https://media.djangoproject.com/pgp/${P^}.checksum.txt )
+"
+
+LICENSE="BSD"
+# admin fonts: Roboto (media-fonts/roboto)
+LICENSE+=" Apache-2.0"
+# admin icons, jquery, xregexp.js
+LICENSE+=" MIT"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+IUSE="doc sqlite test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ <dev-python/asgiref-4[${PYTHON_USEDEP}]
+ >=dev-python/asgiref-3.6.0[${PYTHON_USEDEP}]
+ >=dev-python/sqlparse-0.3.1[${PYTHON_USEDEP}]
+ sys-libs/timezone-data
+"
+BDEPEND="
+ test? (
+ $(python_gen_impl_dep sqlite)
+ ${RDEPEND}
+ dev-python/docutils[${PYTHON_USEDEP}]
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pillow[webp,${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/selenium[${PYTHON_USEDEP}]
+ dev-python/tblib[${PYTHON_USEDEP}]
+ sys-devel/gettext
+ )
+ verify-sig? ( >=sec-keys/openpgp-keys-django-20241002 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/django-4.0-bashcomp.patch
+ "${WORKDIR}"/django-4.2.17-pypy3.patch
+ # https://code.djangoproject.com/ticket/35661
+ "${FILESDIR}"/django-5.1-more-pypy3.patch
+ # https://code.djangoproject.com/ticket/34900
+ "${FILESDIR}"/django-4.2.21-py313.patch
+ # upstream hardcodes fixed versions, we backported the fixes
+ "${FILESDIR}"/django-4.2.24-htmlparser.patch
+)
+
+distutils_enable_sphinx docs --no-autodoc
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/django.asc
+
+src_unpack() {
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_signed_checksums \
+ "${P^}.checksum.txt" sha256 "${P}.tar.gz"
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+}
+
+python_test() {
+ # Tests have non-standard assumptions about PYTHONPATH,
+ # and don't work with ${BUILD_DIR}/lib.
+ PYTHONPATH=. "${EPYTHON}" tests/runtests.py --settings=test_sqlite \
+ -v2 --parallel="${EPYTEST_JOBS:-$(makeopts_jobs)}" ||
+ die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ newbashcomp extras/django_bash_completion ${PN}-admin
+ bashcomp_alias ${PN}-admin django-admin.py
+
+ distutils-r1_python_install_all
+}
+
+pkg_postinst() {
+ optfeature_header "Additional Backend support can be enabled via:"
+ optfeature "MySQL backend support" dev-python/mysqlclient
+ optfeature "PostgreSQL backend support" dev-python/psycopg:0
+ optfeature_header
+ optfeature "GEO Django" "sci-libs/gdal[geos]"
+ optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
+ optfeature "ImageField Support" dev-python/pillow
+ optfeature "Password encryption" dev-python/bcrypt
+}
diff --git a/dev-python/django/django-5.1.15.ebuild b/dev-python/django/django-5.1.15.ebuild
new file mode 100644
index 000000000000..032f4b6465a2
--- /dev/null
+++ b/dev-python/django/django-5.1.15.ebuild
@@ -0,0 +1,100 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE='sqlite?,threads(+)'
+
+inherit bash-completion-r1 distutils-r1 multiprocessing optfeature verify-sig
+
+DESCRIPTION="High-level Python web framework"
+HOMEPAGE="
+ https://www.djangoproject.com/
+ https://github.com/django/django/
+ https://pypi.org/project/Django/
+"
+SRC_URI="
+ https://media.djangoproject.com/releases/$(ver_cut 1-2)/${P}.tar.gz
+ verify-sig? ( https://media.djangoproject.com/pgp/${P^}.checksum.txt )
+"
+
+LICENSE="BSD"
+# admin fonts: Roboto (media-fonts/roboto)
+LICENSE+=" Apache-2.0"
+# admin icons, jquery, xregexp.js
+LICENSE+=" MIT"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+IUSE="doc sqlite test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ <dev-python/asgiref-4[${PYTHON_USEDEP}]
+ >=dev-python/asgiref-3.8.1[${PYTHON_USEDEP}]
+ >=dev-python/sqlparse-0.3.1[${PYTHON_USEDEP}]
+ sys-libs/timezone-data
+"
+BDEPEND="
+ test? (
+ $(python_gen_impl_dep sqlite)
+ ${RDEPEND}
+ >=dev-python/docutils-0.19[${PYTHON_USEDEP}]
+ >=dev-python/jinja2-2.11.0[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pillow[webp,${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ >=dev-python/selenium-4.8.0[${PYTHON_USEDEP}]
+ >=dev-python/tblib-1.5.0[${PYTHON_USEDEP}]
+ sys-devel/gettext
+ )
+ verify-sig? ( >=sec-keys/openpgp-keys-django-20241002 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/django-4.0-bashcomp.patch
+ # upstream hardcodes fixed versions, we backported the fixes
+ "${FILESDIR}"/django-5.2.6-htmlparser.patch
+)
+
+distutils_enable_sphinx docs --no-autodoc
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/django.asc
+
+src_unpack() {
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_signed_checksums \
+ "${P^}.checksum.txt" sha256 "${P}.tar.gz"
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+}
+
+python_test() {
+ # Tests have non-standard assumptions about PYTHONPATH,
+ # and don't work with ${BUILD_DIR}/lib.
+ PYTHONPATH=. "${EPYTHON}" tests/runtests.py --settings=test_sqlite \
+ -v2 --parallel="${EPYTEST_JOBS:-$(makeopts_jobs)}" ||
+ die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ newbashcomp extras/django_bash_completion ${PN}-admin
+ bashcomp_alias ${PN}-admin django-admin.py
+
+ distutils-r1_python_install_all
+}
+
+pkg_postinst() {
+ optfeature_header "Additional Backend support can be enabled via:"
+ optfeature "MySQL backend support" dev-python/mysqlclient
+ optfeature "PostgreSQL backend support" dev-python/psycopg:0
+ optfeature_header
+ optfeature "GEO Django" "sci-libs/gdal[geos]"
+ optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
+ optfeature "ImageField Support" dev-python/pillow
+ optfeature "Password encryption" dev-python/bcrypt
+}
diff --git a/dev-python/django/django-5.2.9.ebuild b/dev-python/django/django-5.2.9.ebuild
new file mode 100644
index 000000000000..5ba0d191f4b2
--- /dev/null
+++ b/dev-python/django/django-5.2.9.ebuild
@@ -0,0 +1,102 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE='sqlite?,threads(+)'
+
+inherit bash-completion-r1 distutils-r1 multiprocessing optfeature verify-sig
+
+DESCRIPTION="High-level Python web framework"
+HOMEPAGE="
+ https://www.djangoproject.com/
+ https://github.com/django/django/
+ https://pypi.org/project/Django/
+"
+SRC_URI="
+ https://media.djangoproject.com/releases/$(ver_cut 1-2)/${P}.tar.gz
+ verify-sig? ( https://media.djangoproject.com/pgp/${P^}.checksum.txt )
+"
+
+LICENSE="BSD"
+# admin fonts: Roboto (media-fonts/roboto)
+LICENSE+=" Apache-2.0"
+# admin icons, jquery, xregexp.js
+LICENSE+=" MIT"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+IUSE="doc sqlite test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ <dev-python/asgiref-4[${PYTHON_USEDEP}]
+ >=dev-python/asgiref-3.8.1[${PYTHON_USEDEP}]
+ >=dev-python/sqlparse-0.3.1[${PYTHON_USEDEP}]
+ sys-libs/timezone-data
+"
+BDEPEND="
+ test? (
+ $(python_gen_impl_dep sqlite)
+ ${RDEPEND}
+ >=dev-python/docutils-0.19[${PYTHON_USEDEP}]
+ >=dev-python/jinja2-2.11.0[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pillow[webp,${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ >=dev-python/selenium-4.8.0[${PYTHON_USEDEP}]
+ >=dev-python/tblib-1.5.0[${PYTHON_USEDEP}]
+ sys-devel/gettext
+ )
+ verify-sig? ( >=sec-keys/openpgp-keys-django-20241002 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/django-4.0-bashcomp.patch
+ # upstream hardcodes fixed versions, we backported the fixes
+ "${FILESDIR}"/django-5.2.6-htmlparser.patch
+ # d55979334dcefdb11626220000bec97ade09df07
+ "${FILESDIR}"/django-5.2.7-py314.patch
+)
+
+distutils_enable_sphinx docs --no-autodoc
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/django.asc
+
+src_unpack() {
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_signed_checksums \
+ "${P^}.checksum.txt" sha256 "${P}.tar.gz"
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+}
+
+python_test() {
+ # Tests have non-standard assumptions about PYTHONPATH,
+ # and don't work with ${BUILD_DIR}/lib.
+ PYTHONPATH=. "${EPYTHON}" tests/runtests.py --settings=test_sqlite \
+ -v2 --parallel="${EPYTEST_JOBS:-$(makeopts_jobs)}" ||
+ die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ newbashcomp extras/django_bash_completion ${PN}-admin
+ bashcomp_alias ${PN}-admin django-admin.py
+
+ distutils-r1_python_install_all
+}
+
+pkg_postinst() {
+ optfeature_header "Additional Backend support can be enabled via:"
+ optfeature "MySQL backend support" dev-python/mysqlclient
+ optfeature "PostgreSQL backend support" dev-python/psycopg:0
+ optfeature_header
+ optfeature "GEO Django" "sci-libs/gdal[geos]"
+ optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
+ optfeature "ImageField Support" dev-python/pillow
+ optfeature "Password encryption" dev-python/bcrypt
+}
diff --git a/dev-python/numpydoc/Manifest b/dev-python/numpydoc/Manifest
index b38581c8596c..05582ed4e732 100644
--- a/dev-python/numpydoc/Manifest
+++ b/dev-python/numpydoc/Manifest
@@ -1 +1,2 @@
+DIST numpydoc-1.10.0.gh.tar.gz 94037 BLAKE2B 356004e4e30634048f9e4adb2b560fde574feac973c59d9becf6bd4bbd4d502c79ca6eaadb21322d13db0882a596e88e89f87d32565a003253b88bc6439c3446 SHA512 bd8becb71fe45f7a0e11bbd3f804c9855b1192ff22acbc0291380c462c493facd2efd6d59e560111ae56132925502d37abc90643db217358f3a8c1138ce7c693
DIST numpydoc-1.9.0.gh.tar.gz 91390 BLAKE2B a864a4ebddc7ddab11a4ab6ea949b96a6c2447f6e726867ed0f49aba09a29c51cb130d5b565feeaaa3fb3de8b4e24748fa604e77ff3def7ba0f17d601d8563ff SHA512 7ae73a5bbce11e674fe8ca16e8ddce7914498f97dc8ebe85c26ae0cf240299596c20a6915e3a547a394e0e3f9ae6e9ac0694a2de7baa34918df98f523a8bfdf0
diff --git a/dev-python/numpydoc/numpydoc-1.10.0.ebuild b/dev-python/numpydoc/numpydoc-1.10.0.ebuild
new file mode 100644
index 000000000000..13f8214d3aac
--- /dev/null
+++ b/dev-python/numpydoc/numpydoc-1.10.0.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1
+
+MY_P=${P/_}
+DESCRIPTION="Sphinx extension to support docstrings in Numpy format"
+HOMEPAGE="
+ https://numpydoc.readthedocs.io/en/latest/
+ https://github.com/numpy/numpydoc/
+ https://pypi.org/project/numpydoc/
+"
+SRC_URI="
+ https://github.com/numpy/numpydoc/archive/v${PV/_}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+
+RDEPEND="
+ >=dev-python/sphinx-6[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ >=dev-python/matplotlib-3.2.1[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # these require Internet (intersphinx)
+ numpydoc/tests/test_full.py::test_MyClass
+ numpydoc/tests/test_full.py::test_my_function
+ # TODO
+ numpydoc/tests/test_validate.py::test_extract_ignore_validation_comments
+ )
+ epytest -o addopts= --pyargs numpydoc
+}
diff --git a/dev-python/psycopg/Manifest b/dev-python/psycopg/Manifest
index 2b204ffa557a..09721d36820c 100644
--- a/dev-python/psycopg/Manifest
+++ b/dev-python/psycopg/Manifest
@@ -4,5 +4,6 @@ DIST psycopg-3.2.12.gh.tar.gz 582058 BLAKE2B be6732c9d8c0395e8875c0fcd679628b35b
DIST psycopg-3.2.13.gh.tar.gz 585567 BLAKE2B 244c9b51ae88dfafb235c65cec69b556ab624d6185680813548afa704916cabbf12129ba574079a98ee59f3621cf86d5a36aa2f61681b2819dc853043a9966c3 SHA512 db657b2fcf25a7dddcb30db154de97be164e48c9f88d9b7a4407f8e8e4f12d02efd0fb1ff2c3e6d0576d4ec06b8e1442c0dcc1734c88ca3171043060fafef68b
DIST psycopg-3.2.9.gh.tar.gz 565735 BLAKE2B 5b9b16e5e310214bdbf12198a7b8d9d86ed7b7e947a33c7333fe79bca946b76f09c60ea25960d3cf3f99423598a65ce33b53bd6dc10a9c68a930a46068b54fd6 SHA512 3e455852dd19c9639a8ee18773486295ea76f9a16146997be9dd4f3f6350257440e0d8fff9494acb79e95f04e74c0c14ec7968694fe329abeb74edcfb297d4dd
DIST psycopg-3.3.0.gh.tar.gz 607828 BLAKE2B 494ce84ffaaecafccb353697198077d7bb60f9ed17171bb3946f5501c8e67d1e240fa08f228bdc9f61988c9c6487930df49112be7f658d1b8e3146c8aa95f729 SHA512 48a184e2629d7317c9a6b80addf5405feac4ba0f477c12c5ee9bc826bc132c8874020b62c28df9ba92e2655edf15daa2a619c9961cbe71dd2ad7d5b9580c6389
+DIST psycopg-3.3.1.gh.tar.gz 607864 BLAKE2B 6cc1ead0c0fc612dd15ba24f067c80b4b6efff73fa3cfe193d617b34f1e2d7f3aa4e793f264703d1ded48da376599e3ee7e045f87420abe024aeca27c80ba19d SHA512 abd7c49e1607a0262434f4f506af71a0c4aea30093ed1f63b5919a5d7bc81e2c82aa933f345c3bbe2b15e92a300246bb3378d0cca72aec189b4a26818d35d4ff
DIST psycopg2-2.9.10.tar.gz 385672 BLAKE2B 4a3ad64f406c427b785ffeb85f6520aa67ed04de2d1749eb22d8275146b71ba451f7c04c9ead401d6f7a273781492cd6a5a36beba68b36b1e5203ee75f7df503 SHA512 d0916f6a645b5e87f89f2463dc22fad78340a85fbff320d099bf429a42557f40d3a4eebdc670768469aef1e9fcee60123767bfe49e1186e8574f95bfd6f46900
DIST psycopg2-2.9.11.tar.gz 379598 BLAKE2B 78608a2b4a9b1db9ba9873ce01b84f898489de8ff6db5522ecc2fa68606b0ef8cdab7f137c86cf840509c9161b329a2efc1e1aadc494b565226099e8651372ab SHA512 44f7b03d958dc62822be8a8c38d738c4016c3a1f860c824158b78ba0a23f04ca63377171b22a14e38b76df868458ede25f29e4643197912adb2f1a1db8c0d5c0
diff --git a/dev-python/psycopg/psycopg-3.3.1.ebuild b/dev-python/psycopg/psycopg-3.3.1.ebuild
new file mode 100644
index 000000000000..a140998eddd6
--- /dev/null
+++ b/dev-python/psycopg/psycopg-3.3.1.ebuild
@@ -0,0 +1,123 @@
+# Copyright 1999-2025 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
+
+DESCRIPTION="PostgreSQL database adapter for Python"
+HOMEPAGE="
+ https://www.psycopg.org/psycopg3/
+ https://github.com/psycopg/psycopg/
+ https://pypi.org/project/psycopg/
+"
+SRC_URI="
+ https://github.com/psycopg/psycopg/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="LGPL-3"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+IUSE="+native-extensions"
+
+DEPEND="
+ native-extensions? (
+ >=dev-db/postgresql-8.1:=
+ )
+ !native-extensions? (
+ >=dev-db/postgresql-8.1:*
+ )
+"
+RDEPEND="
+ ${DEPEND}
+ $(python_gen_cond_dep '
+ >=dev-python/typing-extensions-4.4[${PYTHON_USEDEP}]
+ ' 3.11 3.12)
+"
+BDEPEND="
+ native-extensions? (
+ dev-python/cython[${PYTHON_USEDEP}]
+ )
+ test? (
+ >=dev-db/postgresql-8.1[server]
+ >=dev-python/dnspython-2.1[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( anyio )
+distutils_enable_tests pytest
+
+python_compile() {
+ # Python code + ctypes backend
+ cd psycopg || die
+ distutils-r1_python_compile
+
+ # optional C backend
+ if use native-extensions && [[ ${EPYTHON} != pypy3* ]]; then
+ local DISTUTILS_USE_PEP517=standalone
+ cd ../psycopg_c || die
+ distutils-r1_python_compile
+ fi
+ cd .. || die
+}
+
+src_test() {
+ rm -r psycopg{,_c} || die
+
+ initdb -D "${T}"/pgsql || die
+ # TODO: random port
+ pg_ctl -w -D "${T}"/pgsql start \
+ -o "-h '' -k '${T}'" || die
+ createdb -h "${T}" test || die
+
+ local -x PSYCOPG_TEST_DSN="host=${T} dbname=test"
+ distutils-r1_src_test
+
+ pg_ctl -w -D "${T}"/pgsql stop || die
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # tests for the psycopg_pool package
+ tests/pool
+ # some broken mypy magic
+ tests/test_module.py::test_version
+ tests/test_module.py::test_version_c
+ tests/test_typing.py
+ tests/crdb/test_typing.py
+ # TODO, relying on undefined ordering in Python?
+ tests/test_dns_srv.py::test_srv
+ # requires pproxy?
+ tests/test_waiting.py::test_remote_closed
+ tests/test_waiting.py::test_wait_remote_closed
+ tests/test_waiting_async.py::test_remote_closed
+ tests/test_waiting_async.py::test_wait_remote_closed
+ )
+
+ case ${ARCH} in
+ arm|x86)
+ EPYTEST_DESELECT+=(
+ # TODO
+ tests/types/test_numpy.py::test_classes_identities
+ )
+ ;;
+ esac
+
+ local impls=( python )
+ if use native-extensions && [[ ${EPYTHON} != pypy3* ]]; then
+ impls+=( c )
+ fi
+
+ local -x PSYCOPG_IMPL
+ for PSYCOPG_IMPL in "${impls[@]}"; do
+ einfo "Testing with ${PSYCOPG_IMPL} implementation ..."
+ # leak and timing tests are fragile whereas slow tests are slow
+ epytest -k "not leak" \
+ -m "not timing and not slow and not flakey"
+ done
+}
diff --git a/dev-python/pydyf/Manifest b/dev-python/pydyf/Manifest
index 989183dbdac5..6f31e316fc4e 100644
--- a/dev-python/pydyf/Manifest
+++ b/dev-python/pydyf/Manifest
@@ -1 +1,3 @@
DIST pydyf-0.11.0.tar.gz 17769 BLAKE2B 5fa6d597592104a505267a29ad99cf0c06e84e165a407438563982d45f3d77d9c2a0c45ffda2c16fe6f8656ca406f3bff8ad7dc19f011132334130fcb0c5bc1d SHA512 f02021d1d6bb59557a5b1c1a7f71551b1efe0f8019b2d2e28a84fb126b0d4b701e884971376b8a7b654a51f1831b3fab319a0212e9cb444a392304fc244133d1
+DIST pydyf-0.12.1.tar.gz 17716 BLAKE2B fb87f69be503f2bcc92a98315212a6ebd238e541cee0cc47bca68faefb9e417a8574498f94e0dc514c0d2ced12e318af9a40e2d4876d534bc6f32ed63f751f6d SHA512 c241096c8e1674d80c62be40b02d7c28dfb59cb8e82e6029c6b246a65d2863be236fb1a45f3369adc6e055143a891e9aa170b9ea0dd06ac3483c92a2b86bb984
+DIST pydyf-0.12.1.tar.gz.provenance 9574 BLAKE2B ec9ba4e745079c2db636ecadd99b03ef8799aec79bec946d1ab5f14dcc69910752f5cb46f39117343d7c909ba7ac06710a2d00ea65be945e744db13bbf090f86 SHA512 11b700c1447ac3b92ac7a61738c789543c338459d82a6beef4b8c0043e8ece57b6fd77f7796ff55fde8cc3b296dc9c692b304afd9d1fe45f51325b1ef321bb12
diff --git a/dev-python/pydyf/pydyf-0.12.1.ebuild b/dev-python/pydyf/pydyf-0.12.1.ebuild
new file mode 100644
index 000000000000..7b89ebf74e94
--- /dev/null
+++ b/dev-python/pydyf/pydyf-0.12.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2021-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYPI_VERIFY_REPO=https://github.com/CourtBouillon/pydyf
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A low-level PDF generator"
+HOMEPAGE="
+ https://pypi.org/project/pydyf/
+ https://github.com/CourtBouillon/pydyf/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+BDEPEND="
+ test? (
+ app-text/ghostscript-gpl
+ dev-python/pillow[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
diff --git a/dev-python/pymongo/Manifest b/dev-python/pymongo/Manifest
index f17539612368..eff8293fe126 100644
--- a/dev-python/pymongo/Manifest
+++ b/dev-python/pymongo/Manifest
@@ -1,8 +1,5 @@
DIST mongo-python-driver-4.13.1.gh.tar.gz 2225917 BLAKE2B 2c02e608f54c68abebb69cd61f16c79c8388301e6ebe77a73959ba3dbe086c878b3afd1523f6943ddfca228e1115cbaade49c29c2e5bb620feab9214dcbfba11 SHA512 8baf5548d5772fa62fef2a4ac2fa7dc83bcf7fda178410e9bf675679ea77976f72548a0794ced6856ea538d02403a3c522a66cbf2e37f506b4546489a689ce92
DIST mongo-python-driver-4.13.2.gh.tar.gz 2227437 BLAKE2B 3aa6d0feedc6a33eb4e9299d85eeab2a9638bf713cfadf9f4018f6bd668758d3afd5b9b4b71dec037fb3f99e89cc34e299e1d9b4521c8ace9da9ce50ae95142b SHA512 845cf92e702a9970f2ef1b5085fffcca96021e0f2fc5133e24b2860482dafabe7770d9421922659d0c6008aac1d5a70834ee4f1728a648fd83e6d33bc33568b0
DIST mongo-python-driver-4.14.1.gh.tar.gz 2271379 BLAKE2B 5a1ce13c5275657ee3d64fc0450a20e9c6c3bbfd91bfde6e6e3e8f143b95ea63d18b5cf2b8ba3b707f642eea900894a56889d6bf1d7d9f11f6cfa556a9b7b10b SHA512 087c0450ee1d261cdcb8558d75b4749395058773a33849d94824e2fca0157d0eb4c3f5545a4ddfc0b1bc645a52988f515a90be978f4f88c6a3db4dffa2f9ff9e
-DIST mongo-python-driver-4.15.0.gh.tar.gz 2535131 BLAKE2B 6d8915d0fc2f2aff41a085d11d64d761cbf6d8edf7636200fefd1e8e8060b14f6f3cdc2e437b0328f586bd575ad1ea8b212e415279162e47c590de95508752c8 SHA512 a1c3674f4abf09ee1e97fb0a5acfa00c7be111a75457ca50d777c949bb09e4e6f0b11bc718c8d416e72710107812efbeb4302f46b679a73514348a8cfcc69f1a
-DIST mongo-python-driver-4.15.1.gh.tar.gz 2536890 BLAKE2B 6edab82aae4a01e13e7ac81149176c083bac83c274a382d3cd2f2e7e26775ab60d83866b3b183329467275294d1244cc0c784b29aa5b94e0c5ed4850a0dcdd98 SHA512 807ad85313f8ff56e60cb95d6fe35c9f897a57ba413740321a015736d6a61d48f7ec704705843e444628d5844525e64b217a898b502e7d36545421c47542de78
-DIST mongo-python-driver-4.15.2.gh.tar.gz 2536862 BLAKE2B 91ba6ce4b15711e8d503b0ec3d6a9267bb812ba539bfc340774d8cfb6446bbc7e3cc0db47ba697bcc264da753625143a55b76607be871606fa739295e148da04 SHA512 e69815b11eb16f39e66494469e2b0c598ab4d0726a746ff0c488547c4c4c41c6feaccc973f936682b868a0eccbc0e76855e92ca2f95e5823c11432619bd2e9aa
-DIST mongo-python-driver-4.15.3.gh.tar.gz 2536990 BLAKE2B 4df18671a3e366fad3fc8ee2dcdbb23c8496fbf4e8bee8d1f81cffb05884f4bb0a38491cc2dc141a4bd4e7a51e182c3fb215cafbf57a3543e59a7c3b1f33a572 SHA512 5d0c58797268535e097eee30e89dabfbdf0c5dc82ef9ab527d62eeea66c64fed514c19c81607147fb773d498516d4198c64f5ba403b083aef6d94af5bc800b3a
DIST mongo-python-driver-4.15.4.gh.tar.gz 2537291 BLAKE2B 3c269b75156714f8f36cc46ad1c58b11b027ac7fa9ac352240362224e8eeec54cddeeead4446e1e869b4de55a8c5f250b3000f8a64328020f9c4109aaff5f333 SHA512 ee91f55b8d8203aac5be6cf573143778a0250384fb2dd751ccceb8fdaf32923ce55165ee4ab5b9d0aecefd4230a59dbbc0c7c4a890672445115aaf15a5a2c926
+DIST mongo-python-driver-4.15.5.gh.tar.gz 2537732 BLAKE2B db699b91c89d6252c265abbc9d65f9b4733258f8a407ff98d3d24aa67989bf66c4879c8b44c0b59cddcd6da05c5fbf3d43fa222a8b3e1a63d27824513f6146d5 SHA512 bc627cf7d2fbbfc64f27c84ff620bf4c2d6d3abba72db0ba25a2158d4a020785a9539c4e3f3b383e75cba4d7150e7d84ec08faf94dfb109d68debbf190cae6e6
diff --git a/dev-python/pymongo/files/pymongo-4.15.2-backports.patch b/dev-python/pymongo/files/pymongo-4.15.2-backports.patch
deleted file mode 100644
index 0bc1a4c49256..000000000000
--- a/dev-python/pymongo/files/pymongo-4.15.2-backports.patch
+++ /dev/null
@@ -1,212 +0,0 @@
-diff --git a/bson/__init__.py b/bson/__init__.py
-index b655e30c2c..6b2ba293a6 100644
---- a/bson/__init__.py
-+++ b/bson/__init__.py
-@@ -1009,7 +1009,7 @@ def _dict_to_bson(
- try:
- elements.append(_element_to_bson(key, value, check_keys, opts))
- except InvalidDocument as err:
-- raise InvalidDocument(f"Invalid document {doc} | {err}") from err
-+ raise InvalidDocument(f"Invalid document: {err}", doc) from err
- except AttributeError:
- raise TypeError(f"encoder expected a mapping type but got: {doc!r}") from None
-
-diff --git a/bson/_cbsonmodule.c b/bson/_cbsonmodule.c
-index be91e41734..bee7198567 100644
---- a/bson/_cbsonmodule.c
-+++ b/bson/_cbsonmodule.c
-@@ -1645,11 +1645,11 @@ static int write_raw_doc(buffer_t buffer, PyObject* raw, PyObject* _raw_str) {
- }
-
-
--/* Update Invalid Document error message to include doc.
-+/* Update Invalid Document error to include doc as a property.
- */
- void handle_invalid_doc_error(PyObject* dict) {
- PyObject *etype = NULL, *evalue = NULL, *etrace = NULL;
-- PyObject *msg = NULL, *dict_str = NULL, *new_msg = NULL;
-+ PyObject *msg = NULL, *new_msg = NULL, *new_evalue = NULL;
- PyErr_Fetch(&etype, &evalue, &etrace);
- PyObject *InvalidDocument = _error("InvalidDocument");
- if (InvalidDocument == NULL) {
-@@ -1659,26 +1659,22 @@ void handle_invalid_doc_error(PyObject* dict) {
- if (evalue && PyErr_GivenExceptionMatches(etype, InvalidDocument)) {
- PyObject *msg = PyObject_Str(evalue);
- if (msg) {
-- // Prepend doc to the existing message
-- PyObject *dict_str = PyObject_Str(dict);
-- if (dict_str == NULL) {
-- goto cleanup;
-- }
-- const char * dict_str_utf8 = PyUnicode_AsUTF8(dict_str);
-- if (dict_str_utf8 == NULL) {
-- goto cleanup;
-- }
- const char * msg_utf8 = PyUnicode_AsUTF8(msg);
- if (msg_utf8 == NULL) {
- goto cleanup;
- }
-- PyObject *new_msg = PyUnicode_FromFormat("Invalid document %s | %s", dict_str_utf8, msg_utf8);
-+ PyObject *new_msg = PyUnicode_FromFormat("Invalid document: %s", msg_utf8);
-+ if (new_msg == NULL) {
-+ goto cleanup;
-+ }
-+ // Add doc to the error instance as a property.
-+ PyObject *new_evalue = PyObject_CallFunctionObjArgs(InvalidDocument, new_msg, dict, NULL);
- Py_DECREF(evalue);
- Py_DECREF(etype);
- etype = InvalidDocument;
- InvalidDocument = NULL;
-- if (new_msg) {
-- evalue = new_msg;
-+ if (new_evalue) {
-+ evalue = new_evalue;
- } else {
- evalue = msg;
- }
-@@ -1689,7 +1685,7 @@ void handle_invalid_doc_error(PyObject* dict) {
- PyErr_Restore(etype, evalue, etrace);
- Py_XDECREF(msg);
- Py_XDECREF(InvalidDocument);
-- Py_XDECREF(dict_str);
-+ Py_XDECREF(new_evalue);
- Py_XDECREF(new_msg);
- }
-
-diff --git a/bson/errors.py b/bson/errors.py
-index a3699e704c..ffc117f7ac 100644
---- a/bson/errors.py
-+++ b/bson/errors.py
-@@ -15,6 +15,8 @@
- """Exceptions raised by the BSON package."""
- from __future__ import annotations
-
-+from typing import Any, Optional
-+
-
- class BSONError(Exception):
- """Base class for all BSON exceptions."""
-@@ -31,6 +33,17 @@ class InvalidStringData(BSONError):
- class InvalidDocument(BSONError):
- """Raised when trying to create a BSON object from an invalid document."""
-
-+ def __init__(self, message: str, document: Optional[Any] = None) -> None:
-+ super().__init__(message)
-+ self._document = document
-+
-+ @property
-+ def document(self) -> Any:
-+ """The invalid document that caused the error.
-+
-+ ..versionadded:: 4.16"""
-+ return self._document
-+
-
- class InvalidId(BSONError):
- """Raised when trying to create an ObjectId from invalid data."""
-diff --git a/doc/changelog.rst b/doc/changelog.rst
-index 082c22fafc..7270043d41 100644
---- a/doc/changelog.rst
-+++ b/doc/changelog.rst
-@@ -1,6 +1,15 @@
- Changelog
- =========
-
-+Changes in Version 4.16.0 (XXXX/XX/XX)
-+--------------------------------------
-+
-+PyMongo 4.16 brings a number of changes including:
-+
-+- Removed invalid documents from :class:`bson.errors.InvalidDocument` error messages as
-+ doing so may leak sensitive user data.
-+ Instead, invalid documents are stored in :attr:`bson.errors.InvalidDocument.document`.
-+
- Changes in Version 4.15.1 (2025/09/16)
- --------------------------------------
-
-diff --git a/test/test_bson.py b/test/test_bson.py
-index e4cf85c46c..f792db1e89 100644
---- a/test/test_bson.py
-+++ b/test/test_bson.py
-@@ -1163,7 +1163,7 @@ def __repr__(self):
- ):
- encode({"t": Wrapper(1)})
-
-- def test_doc_in_invalid_document_error_message(self):
-+ def test_doc_in_invalid_document_error_as_property(self):
- class Wrapper:
- def __init__(self, val):
- self.val = val
-@@ -1173,10 +1173,11 @@ def __repr__(self):
-
- self.assertEqual("1", repr(Wrapper(1)))
- doc = {"t": Wrapper(1)}
-- with self.assertRaisesRegex(InvalidDocument, f"Invalid document {doc}"):
-+ with self.assertRaisesRegex(InvalidDocument, "Invalid document:") as cm:
- encode(doc)
-+ self.assertEqual(cm.exception.document, doc)
-
-- def test_doc_in_invalid_document_error_message_mapping(self):
-+ def test_doc_in_invalid_document_error_as_property_mapping(self):
- class MyMapping(abc.Mapping):
- def keys(self):
- return ["t"]
-@@ -1192,6 +1193,11 @@ def __len__(self):
- def __iter__(self):
- return iter(["t"])
-
-+ def __eq__(self, other):
-+ if isinstance(other, MyMapping):
-+ return True
-+ return False
-+
- class Wrapper:
- def __init__(self, val):
- self.val = val
-@@ -1201,8 +1207,9 @@ def __repr__(self):
-
- self.assertEqual("1", repr(Wrapper(1)))
- doc = MyMapping()
-- with self.assertRaisesRegex(InvalidDocument, f"Invalid document {doc}"):
-+ with self.assertRaisesRegex(InvalidDocument, "Invalid document:") as cm:
- encode(doc)
-+ self.assertEqual(cm.exception.document, doc)
-
-
- class TestCodecOptions(unittest.TestCase):
-diff --git a/bson/_cbsonmodule.c b/bson/_cbsonmodule.c
-index bee7198567..7d184641c5 100644
---- a/bson/_cbsonmodule.c
-+++ b/bson/_cbsonmodule.c
-@@ -1657,26 +1657,28 @@ void handle_invalid_doc_error(PyObject* dict) {
- }
-
- if (evalue && PyErr_GivenExceptionMatches(etype, InvalidDocument)) {
-- PyObject *msg = PyObject_Str(evalue);
-+ msg = PyObject_Str(evalue);
- if (msg) {
- const char * msg_utf8 = PyUnicode_AsUTF8(msg);
- if (msg_utf8 == NULL) {
- goto cleanup;
- }
-- PyObject *new_msg = PyUnicode_FromFormat("Invalid document: %s", msg_utf8);
-+ new_msg = PyUnicode_FromFormat("Invalid document: %s", msg_utf8);
- if (new_msg == NULL) {
- goto cleanup;
- }
- // Add doc to the error instance as a property.
-- PyObject *new_evalue = PyObject_CallFunctionObjArgs(InvalidDocument, new_msg, dict, NULL);
-+ new_evalue = PyObject_CallFunctionObjArgs(InvalidDocument, new_msg, dict, NULL);
- Py_DECREF(evalue);
- Py_DECREF(etype);
- etype = InvalidDocument;
- InvalidDocument = NULL;
- if (new_evalue) {
- evalue = new_evalue;
-+ new_evalue = NULL;
- } else {
- evalue = msg;
-+ msg = NULL;
- }
- }
- PyErr_NormalizeException(&etype, &evalue, &etrace);
diff --git a/dev-python/pymongo/pymongo-4.15.1.ebuild b/dev-python/pymongo/pymongo-4.15.1.ebuild
deleted file mode 100644
index efef80cbe26a..000000000000
--- a/dev-python/pymongo/pymongo-4.15.1.ebuild
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{10..14} )
-
-inherit check-reqs distutils-r1
-
-MY_P=mongo-python-driver-${PV}
-DESCRIPTION="Python driver for MongoDB"
-HOMEPAGE="
- https://github.com/mongodb/mongo-python-driver/
- https://pypi.org/project/pymongo/
-"
-SRC_URI="
- https://github.com/mongodb/mongo-python-driver/archive/${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="doc kerberos +native-extensions +test-full"
-
-RDEPEND="
- <dev-python/dnspython-3.0.0[${PYTHON_USEDEP}]
- kerberos? ( dev-python/kerberos[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? (
- test-full? (
- >=dev-db/mongodb-2.6.0
- )
- )
-"
-
-distutils_enable_sphinx doc
-
-EPYTEST_PLUGINS=( pytest-asyncio )
-EPYTEST_RERUNS=5
-distutils_enable_tests pytest
-
-reqcheck() {
- if use test && use test-full; then
- # During the tests, database size reaches 1.5G.
- local CHECKREQS_DISK_BUILD=1536M
-
- check-reqs_${1}
- fi
-}
-
-pkg_pretend() {
- reqcheck pkg_pretend
-}
-
-pkg_setup() {
- reqcheck pkg_setup
-}
-
-src_prepare() {
- distutils-r1_src_prepare
- # we do not want hatch-requirements-txt and its ton of NIH deps
- sed -i -e '/requirements/d' pyproject.toml || die
-}
-
-python_compile() {
- # causes build errors to be fatal
- local -x TOX_ENV_NAME=whatever
- local DISTUTILS_ARGS=()
- # unconditionally implicitly disabled on pypy3
- if ! use native-extensions; then
- export NO_EXT=1
- else
- export PYMONGO_C_EXT_MUST_BUILD=1
- unset NO_EXT
- fi
-
- distutils-r1_python_compile
-
- # upstream forces setup.py build_ext -i in their setuptools hack
- find -name '*.so' -delete || die
-}
-
-python_test() {
- rm -rf bson pymongo || die
-
- local EPYTEST_DESELECT=(
- # network-sandbox
- test/asynchronous/test_async_loop_unblocked.py::TestClientLoopUnblocked::test_client_does_not_block_loop
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_logging
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_warning
- test/asynchronous/test_client.py::TestClient::test_service_name_from_kwargs
- test/asynchronous/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_client.py::ClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/test_client.py::ClientUnitTest::test_detected_environment_logging
- test/test_client.py::ClientUnitTest::test_detected_environment_warning
- test/test_client.py::TestClient::test_service_name_from_kwargs
- test/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_dns.py::TestCaseInsensitive::test_connect_case_insensitive
- test/asynchronous/test_dns.py::IsolatedAsyncioTestCaseInsensitive::test_connect_case_insensitive
- test/test_srv_polling.py
- test/asynchronous/test_srv_polling.py
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced=fa
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_loadBalanced=true
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_replicaSet
-
- # broken regularly by changes in mypy
- test/test_typing.py::TestMypyFails::test_mypy_failures
-
- # fragile to timing? fails because we're getting too many logs
- test/test_connection_logging.py::TestConnectionLoggingConnectionPoolOptions::test_maxConnecting_should_be_included_in_connection_pool_created_message_when_specified
-
- # hangs?
- test/asynchronous/test_grid_file.py::AsyncTestGridFile::test_small_chunks
-
- # broken async tests?
- test/asynchronous/test_encryption.py
-
- # -Werror
- test/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
- test/asynchronous/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
-
- # fragile to timing? Internet?
- test/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_ssl.py::TestSSL::test_pyopenssl_ignored_in_async
- )
-
- if ! use test-full; then
- # .invalid is guaranteed to return NXDOMAIN per RFC 6761
- local -x DB_IP=mongodb.invalid
- epytest -p asyncio
- return
- fi
-
- # Yes, we need TCP/IP for that...
- local -x DB_IP=127.0.0.1
- local -x DB_PORT=27000
-
- local dbpath=${TMPDIR}/mongo.db
- local logpath=${TMPDIR}/mongod.log
-
- local failed=
- mkdir -p "${dbpath}" || die
- while true; do
- ebegin "Trying to start mongod on port ${DB_PORT}"
-
- # mongodb is extremely inefficient
- # https://www.mongodb.com/docs/manual/reference/ulimit/#review-and-set-resource-limits
- ulimit -n 64000 || die
-
- local mongod_options=(
- --dbpath "${dbpath}"
- --bind_ip "${DB_IP}"
- --port "${DB_PORT}"
- --unixSocketPrefix "${TMPDIR}"
- --logpath "${logpath}"
- --fork
-
- # try to reduce resource use
- --wiredTigerCacheSizeGB 0.25
- )
-
- LC_ALL=C mongod "${mongod_options[@]}" && sleep 2
-
- # Now we need to check if the server actually started...
- if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then
- # yay!
- eend 0
- break
- elif grep -q 'Address already in use' "${logpath}"; then
- # ay, someone took our port!
- eend 1
- : $(( DB_PORT += 1 ))
- continue
- else
- eend 1
- eerror "Unable to start mongod for tests. See the server log:"
- eerror " ${logpath}"
- die "Unable to start mongod for tests."
- fi
- done
-
- nonfatal epytest -m "default or default_async or encryption" || failed=1
-
- mongod --dbpath "${dbpath}" --shutdown || die
-
- [[ ${failed} ]] && die "Tests fail with ${EPYTHON}"
-
- rm -rf "${dbpath}" || die
-}
diff --git a/dev-python/pymongo/pymongo-4.15.2-r1.ebuild b/dev-python/pymongo/pymongo-4.15.2-r1.ebuild
deleted file mode 100644
index 32a1d710ae96..000000000000
--- a/dev-python/pymongo/pymongo-4.15.2-r1.ebuild
+++ /dev/null
@@ -1,207 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{10..14} )
-
-inherit check-reqs distutils-r1
-
-MY_P=mongo-python-driver-${PV}
-DESCRIPTION="Python driver for MongoDB"
-HOMEPAGE="
- https://github.com/mongodb/mongo-python-driver/
- https://pypi.org/project/pymongo/
-"
-SRC_URI="
- https://github.com/mongodb/mongo-python-driver/archive/${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="doc kerberos +native-extensions +test-full"
-
-RDEPEND="
- <dev-python/dnspython-3.0.0[${PYTHON_USEDEP}]
- kerberos? ( dev-python/kerberos[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? (
- test-full? (
- >=dev-db/mongodb-2.6.0
- )
- )
-"
-
-distutils_enable_sphinx doc
-
-EPYTEST_PLUGINS=( pytest-asyncio )
-EPYTEST_RERUNS=5
-distutils_enable_tests pytest
-
-reqcheck() {
- if use test && use test-full; then
- # During the tests, database size reaches 1.5G.
- local CHECKREQS_DISK_BUILD=1536M
-
- check-reqs_${1}
- fi
-}
-
-pkg_pretend() {
- reqcheck pkg_pretend
-}
-
-pkg_setup() {
- reqcheck pkg_setup
-}
-
-src_prepare() {
- local PATCHES=(
- # https://github.com/mongodb/mongo-python-driver/pull/2539
- # https://github.com/mongodb/mongo-python-driver/pull/2573
- "${FILESDIR}/${P}-backports.patch"
- )
-
- distutils-r1_src_prepare
- # we do not want hatch-requirements-txt and its ton of NIH deps
- sed -i -e '/requirements/d' pyproject.toml || die
-}
-
-python_compile() {
- # causes build errors to be fatal
- local -x TOX_ENV_NAME=whatever
- local DISTUTILS_ARGS=()
- # unconditionally implicitly disabled on pypy3
- if ! use native-extensions; then
- export NO_EXT=1
- else
- export PYMONGO_C_EXT_MUST_BUILD=1
- unset NO_EXT
- fi
-
- distutils-r1_python_compile
-
- # upstream forces setup.py build_ext -i in their setuptools hack
- find -name '*.so' -delete || die
-}
-
-python_test() {
- rm -rf bson pymongo || die
-
- local EPYTEST_DESELECT=(
- # network-sandbox
- test/asynchronous/test_async_loop_unblocked.py::TestClientLoopUnblocked::test_client_does_not_block_loop
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_logging
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_warning
- test/asynchronous/test_client.py::TestClient::test_service_name_from_kwargs
- test/asynchronous/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_client.py::ClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/test_client.py::ClientUnitTest::test_detected_environment_logging
- test/test_client.py::ClientUnitTest::test_detected_environment_warning
- test/test_client.py::TestClient::test_service_name_from_kwargs
- test/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_dns.py::TestCaseInsensitive::test_connect_case_insensitive
- test/asynchronous/test_dns.py::IsolatedAsyncioTestCaseInsensitive::test_connect_case_insensitive
- test/test_srv_polling.py
- test/asynchronous/test_srv_polling.py
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced=fa
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_loadBalanced=true
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_replicaSet
-
- # broken regularly by changes in mypy
- test/test_typing.py::TestMypyFails::test_mypy_failures
-
- # fragile to timing? fails because we're getting too many logs
- test/test_connection_logging.py::TestConnectionLoggingConnectionPoolOptions::test_maxConnecting_should_be_included_in_connection_pool_created_message_when_specified
-
- # hangs?
- test/asynchronous/test_grid_file.py::AsyncTestGridFile::test_small_chunks
-
- # broken async tests?
- test/asynchronous/test_encryption.py
-
- # -Werror
- test/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
- test/asynchronous/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
-
- # fragile to timing? Internet?
- test/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_ssl.py::TestSSL::test_pyopenssl_ignored_in_async
- )
-
- if ! use test-full; then
- # .invalid is guaranteed to return NXDOMAIN per RFC 6761
- local -x DB_IP=mongodb.invalid
- epytest -p asyncio
- return
- fi
-
- # Yes, we need TCP/IP for that...
- local -x DB_IP=127.0.0.1
- local -x DB_PORT=27000
-
- local dbpath=${TMPDIR}/mongo.db
- local logpath=${TMPDIR}/mongod.log
-
- local failed=
- mkdir -p "${dbpath}" || die
- while true; do
- ebegin "Trying to start mongod on port ${DB_PORT}"
-
- # mongodb is extremely inefficient
- # https://www.mongodb.com/docs/manual/reference/ulimit/#review-and-set-resource-limits
- ulimit -n 64000 || die
-
- local mongod_options=(
- --dbpath "${dbpath}"
- --bind_ip "${DB_IP}"
- --port "${DB_PORT}"
- --unixSocketPrefix "${TMPDIR}"
- --logpath "${logpath}"
- --fork
-
- # try to reduce resource use
- --wiredTigerCacheSizeGB 0.25
- )
-
- LC_ALL=C mongod "${mongod_options[@]}" && sleep 2
-
- # Now we need to check if the server actually started...
- if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then
- # yay!
- eend 0
- break
- elif grep -q 'Address already in use' "${logpath}"; then
- # ay, someone took our port!
- eend 1
- : $(( DB_PORT += 1 ))
- continue
- else
- eend 1
- eerror "Unable to start mongod for tests. See the server log:"
- eerror " ${logpath}"
- die "Unable to start mongod for tests."
- fi
- done
-
- nonfatal epytest -m "default or default_async or encryption" || failed=1
-
- mongod --dbpath "${dbpath}" --shutdown || die
-
- [[ ${failed} ]] && die "Tests fail with ${EPYTHON}"
-
- rm -rf "${dbpath}" || die
-}
diff --git a/dev-python/pymongo/pymongo-4.15.2.ebuild b/dev-python/pymongo/pymongo-4.15.2.ebuild
deleted file mode 100644
index efef80cbe26a..000000000000
--- a/dev-python/pymongo/pymongo-4.15.2.ebuild
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{10..14} )
-
-inherit check-reqs distutils-r1
-
-MY_P=mongo-python-driver-${PV}
-DESCRIPTION="Python driver for MongoDB"
-HOMEPAGE="
- https://github.com/mongodb/mongo-python-driver/
- https://pypi.org/project/pymongo/
-"
-SRC_URI="
- https://github.com/mongodb/mongo-python-driver/archive/${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="doc kerberos +native-extensions +test-full"
-
-RDEPEND="
- <dev-python/dnspython-3.0.0[${PYTHON_USEDEP}]
- kerberos? ( dev-python/kerberos[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? (
- test-full? (
- >=dev-db/mongodb-2.6.0
- )
- )
-"
-
-distutils_enable_sphinx doc
-
-EPYTEST_PLUGINS=( pytest-asyncio )
-EPYTEST_RERUNS=5
-distutils_enable_tests pytest
-
-reqcheck() {
- if use test && use test-full; then
- # During the tests, database size reaches 1.5G.
- local CHECKREQS_DISK_BUILD=1536M
-
- check-reqs_${1}
- fi
-}
-
-pkg_pretend() {
- reqcheck pkg_pretend
-}
-
-pkg_setup() {
- reqcheck pkg_setup
-}
-
-src_prepare() {
- distutils-r1_src_prepare
- # we do not want hatch-requirements-txt and its ton of NIH deps
- sed -i -e '/requirements/d' pyproject.toml || die
-}
-
-python_compile() {
- # causes build errors to be fatal
- local -x TOX_ENV_NAME=whatever
- local DISTUTILS_ARGS=()
- # unconditionally implicitly disabled on pypy3
- if ! use native-extensions; then
- export NO_EXT=1
- else
- export PYMONGO_C_EXT_MUST_BUILD=1
- unset NO_EXT
- fi
-
- distutils-r1_python_compile
-
- # upstream forces setup.py build_ext -i in their setuptools hack
- find -name '*.so' -delete || die
-}
-
-python_test() {
- rm -rf bson pymongo || die
-
- local EPYTEST_DESELECT=(
- # network-sandbox
- test/asynchronous/test_async_loop_unblocked.py::TestClientLoopUnblocked::test_client_does_not_block_loop
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_logging
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_warning
- test/asynchronous/test_client.py::TestClient::test_service_name_from_kwargs
- test/asynchronous/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_client.py::ClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/test_client.py::ClientUnitTest::test_detected_environment_logging
- test/test_client.py::ClientUnitTest::test_detected_environment_warning
- test/test_client.py::TestClient::test_service_name_from_kwargs
- test/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_dns.py::TestCaseInsensitive::test_connect_case_insensitive
- test/asynchronous/test_dns.py::IsolatedAsyncioTestCaseInsensitive::test_connect_case_insensitive
- test/test_srv_polling.py
- test/asynchronous/test_srv_polling.py
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced=fa
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_loadBalanced=true
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_replicaSet
-
- # broken regularly by changes in mypy
- test/test_typing.py::TestMypyFails::test_mypy_failures
-
- # fragile to timing? fails because we're getting too many logs
- test/test_connection_logging.py::TestConnectionLoggingConnectionPoolOptions::test_maxConnecting_should_be_included_in_connection_pool_created_message_when_specified
-
- # hangs?
- test/asynchronous/test_grid_file.py::AsyncTestGridFile::test_small_chunks
-
- # broken async tests?
- test/asynchronous/test_encryption.py
-
- # -Werror
- test/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
- test/asynchronous/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
-
- # fragile to timing? Internet?
- test/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_ssl.py::TestSSL::test_pyopenssl_ignored_in_async
- )
-
- if ! use test-full; then
- # .invalid is guaranteed to return NXDOMAIN per RFC 6761
- local -x DB_IP=mongodb.invalid
- epytest -p asyncio
- return
- fi
-
- # Yes, we need TCP/IP for that...
- local -x DB_IP=127.0.0.1
- local -x DB_PORT=27000
-
- local dbpath=${TMPDIR}/mongo.db
- local logpath=${TMPDIR}/mongod.log
-
- local failed=
- mkdir -p "${dbpath}" || die
- while true; do
- ebegin "Trying to start mongod on port ${DB_PORT}"
-
- # mongodb is extremely inefficient
- # https://www.mongodb.com/docs/manual/reference/ulimit/#review-and-set-resource-limits
- ulimit -n 64000 || die
-
- local mongod_options=(
- --dbpath "${dbpath}"
- --bind_ip "${DB_IP}"
- --port "${DB_PORT}"
- --unixSocketPrefix "${TMPDIR}"
- --logpath "${logpath}"
- --fork
-
- # try to reduce resource use
- --wiredTigerCacheSizeGB 0.25
- )
-
- LC_ALL=C mongod "${mongod_options[@]}" && sleep 2
-
- # Now we need to check if the server actually started...
- if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then
- # yay!
- eend 0
- break
- elif grep -q 'Address already in use' "${logpath}"; then
- # ay, someone took our port!
- eend 1
- : $(( DB_PORT += 1 ))
- continue
- else
- eend 1
- eerror "Unable to start mongod for tests. See the server log:"
- eerror " ${logpath}"
- die "Unable to start mongod for tests."
- fi
- done
-
- nonfatal epytest -m "default or default_async or encryption" || failed=1
-
- mongod --dbpath "${dbpath}" --shutdown || die
-
- [[ ${failed} ]] && die "Tests fail with ${EPYTHON}"
-
- rm -rf "${dbpath}" || die
-}
diff --git a/dev-python/pymongo/pymongo-4.15.3.ebuild b/dev-python/pymongo/pymongo-4.15.3.ebuild
deleted file mode 100644
index efef80cbe26a..000000000000
--- a/dev-python/pymongo/pymongo-4.15.3.ebuild
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=hatchling
-PYTHON_COMPAT=( python3_{10..14} )
-
-inherit check-reqs distutils-r1
-
-MY_P=mongo-python-driver-${PV}
-DESCRIPTION="Python driver for MongoDB"
-HOMEPAGE="
- https://github.com/mongodb/mongo-python-driver/
- https://pypi.org/project/pymongo/
-"
-SRC_URI="
- https://github.com/mongodb/mongo-python-driver/archive/${PV}.tar.gz
- -> ${MY_P}.gh.tar.gz
-"
-S=${WORKDIR}/${MY_P}
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="doc kerberos +native-extensions +test-full"
-
-RDEPEND="
- <dev-python/dnspython-3.0.0[${PYTHON_USEDEP}]
- kerberos? ( dev-python/kerberos[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? (
- test-full? (
- >=dev-db/mongodb-2.6.0
- )
- )
-"
-
-distutils_enable_sphinx doc
-
-EPYTEST_PLUGINS=( pytest-asyncio )
-EPYTEST_RERUNS=5
-distutils_enable_tests pytest
-
-reqcheck() {
- if use test && use test-full; then
- # During the tests, database size reaches 1.5G.
- local CHECKREQS_DISK_BUILD=1536M
-
- check-reqs_${1}
- fi
-}
-
-pkg_pretend() {
- reqcheck pkg_pretend
-}
-
-pkg_setup() {
- reqcheck pkg_setup
-}
-
-src_prepare() {
- distutils-r1_src_prepare
- # we do not want hatch-requirements-txt and its ton of NIH deps
- sed -i -e '/requirements/d' pyproject.toml || die
-}
-
-python_compile() {
- # causes build errors to be fatal
- local -x TOX_ENV_NAME=whatever
- local DISTUTILS_ARGS=()
- # unconditionally implicitly disabled on pypy3
- if ! use native-extensions; then
- export NO_EXT=1
- else
- export PYMONGO_C_EXT_MUST_BUILD=1
- unset NO_EXT
- fi
-
- distutils-r1_python_compile
-
- # upstream forces setup.py build_ext -i in their setuptools hack
- find -name '*.so' -delete || die
-}
-
-python_test() {
- rm -rf bson pymongo || die
-
- local EPYTEST_DESELECT=(
- # network-sandbox
- test/asynchronous/test_async_loop_unblocked.py::TestClientLoopUnblocked::test_client_does_not_block_loop
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_logging
- test/asynchronous/test_client.py::AsyncClientUnitTest::test_detected_environment_warning
- test/asynchronous/test_client.py::TestClient::test_service_name_from_kwargs
- test/asynchronous/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_client.py::ClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver
- test/test_client.py::ClientUnitTest::test_detected_environment_logging
- test/test_client.py::ClientUnitTest::test_detected_environment_warning
- test/test_client.py::TestClient::test_service_name_from_kwargs
- test/test_client.py::TestClient::test_srv_max_hosts_kwarg
- test/test_dns.py::TestCaseInsensitive::test_connect_case_insensitive
- test/asynchronous/test_dns.py::IsolatedAsyncioTestCaseInsensitive::test_connect_case_insensitive
- test/test_srv_polling.py
- test/asynchronous/test_srv_polling.py
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced=fa
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_loadBalanced=true
- test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_replicaSet
-
- # broken regularly by changes in mypy
- test/test_typing.py::TestMypyFails::test_mypy_failures
-
- # fragile to timing? fails because we're getting too many logs
- test/test_connection_logging.py::TestConnectionLoggingConnectionPoolOptions::test_maxConnecting_should_be_included_in_connection_pool_created_message_when_specified
-
- # hangs?
- test/asynchronous/test_grid_file.py::AsyncTestGridFile::test_small_chunks
-
- # broken async tests?
- test/asynchronous/test_encryption.py
-
- # -Werror
- test/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
- test/asynchronous/test_read_preferences.py::TestMongosAndReadPreference::test_read_preference_hedge_deprecated
-
- # fragile to timing? Internet?
- test/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_client.py::TestClient::test_repr_srv_host
- test/asynchronous/test_ssl.py::TestSSL::test_pyopenssl_ignored_in_async
- )
-
- if ! use test-full; then
- # .invalid is guaranteed to return NXDOMAIN per RFC 6761
- local -x DB_IP=mongodb.invalid
- epytest -p asyncio
- return
- fi
-
- # Yes, we need TCP/IP for that...
- local -x DB_IP=127.0.0.1
- local -x DB_PORT=27000
-
- local dbpath=${TMPDIR}/mongo.db
- local logpath=${TMPDIR}/mongod.log
-
- local failed=
- mkdir -p "${dbpath}" || die
- while true; do
- ebegin "Trying to start mongod on port ${DB_PORT}"
-
- # mongodb is extremely inefficient
- # https://www.mongodb.com/docs/manual/reference/ulimit/#review-and-set-resource-limits
- ulimit -n 64000 || die
-
- local mongod_options=(
- --dbpath "${dbpath}"
- --bind_ip "${DB_IP}"
- --port "${DB_PORT}"
- --unixSocketPrefix "${TMPDIR}"
- --logpath "${logpath}"
- --fork
-
- # try to reduce resource use
- --wiredTigerCacheSizeGB 0.25
- )
-
- LC_ALL=C mongod "${mongod_options[@]}" && sleep 2
-
- # Now we need to check if the server actually started...
- if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then
- # yay!
- eend 0
- break
- elif grep -q 'Address already in use' "${logpath}"; then
- # ay, someone took our port!
- eend 1
- : $(( DB_PORT += 1 ))
- continue
- else
- eend 1
- eerror "Unable to start mongod for tests. See the server log:"
- eerror " ${logpath}"
- die "Unable to start mongod for tests."
- fi
- done
-
- nonfatal epytest -m "default or default_async or encryption" || failed=1
-
- mongod --dbpath "${dbpath}" --shutdown || die
-
- [[ ${failed} ]] && die "Tests fail with ${EPYTHON}"
-
- rm -rf "${dbpath}" || die
-}
diff --git a/dev-python/pymongo/pymongo-4.15.0.ebuild b/dev-python/pymongo/pymongo-4.15.5.ebuild
index efef80cbe26a..efef80cbe26a 100644
--- a/dev-python/pymongo/pymongo-4.15.0.ebuild
+++ b/dev-python/pymongo/pymongo-4.15.5.ebuild
diff --git a/dev-python/pytest-httpx/Manifest b/dev-python/pytest-httpx/Manifest
index cf272698ef28..e0cb756507b3 100644
--- a/dev-python/pytest-httpx/Manifest
+++ b/dev-python/pytest-httpx/Manifest
@@ -1 +1,2 @@
DIST pytest_httpx-0.35.0.tar.gz 54146 BLAKE2B 1d0814478c3ef26720b42c0bf0fd0a2b42c57eda887b99ba8b09acd6d12a8af04dc3821645130e786558f2f0d42625e0f9145231a86f9ecd0e508fb9a5247a90 SHA512 70ecfc7778aa4eb617e4685851dacec563e507d5f2aa571cd5acae7ac9f1667d7c67ce40144fa5e2649993c0e0aaa11650ea32f2dfe74652ecb115291a4c77ff
+DIST pytest_httpx-0.36.0.tar.gz 56793 BLAKE2B cac3afb3c6f3916d9112e961e47324bb8fdf43330db16072548d7af4c8d395fbc2e0e92ae03342b4c7922046d7cead7cbde14c063576765695d5e095c3585721 SHA512 2e8aefa3483a6edcbae001f65881b4720b5a422e10da73a798fa10fbbe164ae4279eef68d5210178e41a907096a9a85400bc3527a967f1dcc813e62769170ec7
diff --git a/dev-python/pytest-httpx/pytest-httpx-0.36.0.ebuild b/dev-python/pytest-httpx/pytest-httpx-0.36.0.ebuild
new file mode 100644
index 000000000000..ebd49569b7de
--- /dev/null
+++ b/dev-python/pytest-httpx/pytest-httpx-0.36.0.ebuild
@@ -0,0 +1,39 @@
+# Copyright 2022-2025 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 pypi
+
+DESCRIPTION="Send responses to HTTPX using pytest"
+HOMEPAGE="
+ https://colin-b.github.io/pytest_httpx/
+ https://github.com/Colin-b/pytest_httpx/
+ https://pypi.org/project/pytest-httpx/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/httpx-0.28[${PYTHON_USEDEP}]
+ >=dev-python/pytest-8[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=( "${PN}" pytest-asyncio )
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # unpin dependencies
+ sed -i -e '/==/{s:==:>=:;s:\.\*::}' pyproject.toml || die
+}
diff --git a/dev-python/python-tests/Manifest b/dev-python/python-tests/Manifest
index 1fbdc25d1594..c4878ea24d8e 100644
--- a/dev-python/python-tests/Manifest
+++ b/dev-python/python-tests/Manifest
@@ -18,6 +18,8 @@ DIST Python-3.13.9.tar.xz 22681368 BLAKE2B 8fbf9b9e0dcc480a5bac82d5c18d6fdb63076
DIST Python-3.13.9.tar.xz.asc 963 BLAKE2B 7989940e3dfc62c553016f9d2b9aef447e770d63b2508f287e14495ba3e98326279d2bdb3b96bbc65ff2a859253bc43d8ce5387873842f656a66abef8380a3b7 SHA512 c33fba3a6b22dccc08beb7f13bd61a25a30f609a54da7c8dfd3b3b4a3490a7b24c11f9617a835388f22709fb09375d35febc417cf104a18f5bec3b43ec999e82
DIST Python-3.14.0.tar.xz 23595844 BLAKE2B 0fe495d62819c9066240927ceff022dc36920cfd9aa7f80f09fd82a6baf42fe0ef85aed7087418ad9769504e62dc0592cf9c06a542335d83ab65fc6399b5ac76 SHA512 46e9e205c3a084cba68bf7f267ab2fd0862a05430165e0eb713f2d6b3a1a4452f72f563de5de55caea824be9df56f66dd568f4814941667a9bb0954229772c53
DIST Python-3.14.0.tar.xz.sigstore 5374 BLAKE2B 50ed6dada3a7dfcfeb47e0cc55568c0e2ea01a5710f341d6423bb5b0982897b13a7a7c91d8b7c995499f687b17a6cf432fdcd3338b0ac658d19a8ad032438957 SHA512 147bf060a55b9108efb6f6a7f478c0b4dc1e7b1e215b842fb8adfe1b96bbe8d1b49ad352455e047d694638130f8533e3ea1c3a246e9ed0fde0d08e80113a6c44
+DIST Python-3.14.1.tar.xz 23563532 BLAKE2B c75d6048ca6b504217578041a6777b507a783f639736d580e0a2964a7d0411011d025a4562c38f68ffe46ee2f35135426f6c6c5d070c1d9106477421d6f92266 SHA512 b5ec011190536126fedade5c33a4afabc081a133ad5c734f4b872769d376735775219d63a482812d139fdd90c46707927065ab9dc733d0bce2d1ebc59fe705a2
+DIST Python-3.14.1.tar.xz.sigstore 5123 BLAKE2B b20634370ea0915c564c586b7537cfc19b8fb6f032fd6ad5df795fe818eea85e78375a32f3f079afdcd86e9aa4e5c2eae8933a326e0699e5c16ba094c39ddd94 SHA512 5b668deafa301d6eb69a7ffb03627c89d2f5de794be292f34cf44f6a1d81b46778f469282a746147a6ca5767a7b4c093b89d25a3a14fcb8f3b9c3e4f40808b27
DIST python-gentoo-patches-3.11.11.tar.xz 10604 BLAKE2B 6be4c66b0458f7a7085aef976cff3dcb4d114ac0b64fb27327a5693e8d41a77f7eeed718b9c5a1b1961278235ee4cd43497aa3dc27e6e6bed65804b95f667a15 SHA512 ab8113a94949cead34d976179f80c3e0a6686bf2476079a74f97b4d08c24a237500dc7ee09dc3b0ec98d2fbcb138397c73d7e2252e617a957a13999e59115158
DIST python-gentoo-patches-3.11.13_p1.tar.xz 27748 BLAKE2B 26e0b5397d7927711bcc40330f72f54fb16c660c56a2f87166c5336eb2f53ccd4e920b906854ee122d64360b414e11a38a31a410936b4a49f6610626203f4322 SHA512 7c7eca7bf827255925e073c0ed5c69e9036b79e35e8f6ccb2684709bdc41fec80823a1df192c3decf56ba6d53e2c9feaf7fb81f3a214da69773da6a2997ca19b
DIST python-gentoo-patches-3.11.14.tar.xz 15968 BLAKE2B 5bd091046feee03afd59a87b72c44b3a0874b23f89eb98020cc057f5651d31857721eb095bd056dae8bef85220dbe5aff2900cf8411dceb14e8775a4a2f09a93 SHA512 760df16f98c1a91164b43c13eb36073c74169321569791125fdad8682419b818736fe02e40c1aa1232a11081b1007c923a8fd2afd002eb4fdff0800da92d03e2
@@ -33,3 +35,4 @@ DIST python-gentoo-patches-3.13.9.tar.xz 8952 BLAKE2B 9941b3dd241adcdde64b38bdc3
DIST python-gentoo-patches-3.14.0.tar.xz 7992 BLAKE2B 8faff97c198abc1549d7c871c82ff649bbdbe18f9cfdad31aa7b6535391fff8e6adc387a120a6298ede8842421bc103cfae27da807e651c9898d4edb192f4fd7 SHA512 7bc425a89d0f3ebbdab4f52ce1300e16512bda4f08968222e8e68f22d3a794fc7d32a00644f4949810ebb41da0ffd4a5a962dcbee86c7660cd4214406ad16b01
DIST python-gentoo-patches-3.14.0_p1.tar.xz 8952 BLAKE2B d53c5a055be72e3f92a63e18cf75d2f6eb1e352a7529f7ce8256aaf0fa5ac92443646fe07bdbc707a28c1ed395c4c2edd29db0b8fc591679c7602aedfc968489 SHA512 ec03a259281d675063ad82dfd9c0fcb08402120663b9c2a56e37de45bb03e678fccd0c3723b6deffc4f5b8ea4ad17492040a98c7434853da2007f31cdb549bdd
DIST python-gentoo-patches-3.14.0b1.tar.xz 5680 BLAKE2B 514b3edc3025e5bf675d371b5ada17dea426856edf1fb6095c2ee400eae95bd4265ef81fe593ae9338e801e7d0a25b1d5ba2d05ca563fd9dd020114b13575746 SHA512 74289e42cf532b54bb1b66a283ec19156f8a36ba38764209c133842314c9efb2ce2ebcba5aa9213bcf7fc0c8a5ca9b6e7adbd5dbfa4397233136d7cd55f53ee7
+DIST python-gentoo-patches-3.14.1.tar.xz 8008 BLAKE2B 52b47d49126a9e93ccc8425322fb3055337cacd8b913104cfec320acae267d44140286b8be720fa5a98b146257e4847b8df46a6f9124d8e81368a1ad24194c0e SHA512 28f6a746dd5e06e432a79eef33fc80faa8ac589f1d328e4e86fdd9e6aa5012f248c81e47204c1fe64ed16cc15038eafef27d6fffb947dbbc4705b559d5639b13
diff --git a/dev-python/python-tests/python-tests-0.3.14.1.ebuild b/dev-python/python-tests/python-tests-0.3.14.1.ebuild
new file mode 100644
index 000000000000..2a767ce8401e
--- /dev/null
+++ b/dev-python/python-tests/python-tests-0.3.14.1.ebuild
@@ -0,0 +1,73 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+VERIFY_SIG_METHOD=sigstore
+
+inherit python-r1 verify-sig
+
+REAL_PV=${PV#0.}
+MY_PV=${REAL_PV/_/}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 2-3)t
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="Test modules from dev-lang/python"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${REAL_PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${REAL_PV%%_*}/${MY_P}.tar.xz.sigstore
+ )
+"
+S="${WORKDIR}/${MY_P}/Lib"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+# enable by default to help CI handle it (we have no additional deps)
+IUSE="+python_targets_${PYTHON_COMPAT[0]}"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ ~dev-lang/python-${PV}:${PYVER}
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+"
+
+# https://www.python.org/downloads/metadata/sigstore/
+VERIFY_SIG_CERT_IDENTITY=hugo@python.org
+VERIFY_SIG_CERT_OIDC_ISSUER=https://github.com/login/oauth
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.sigstore}
+ fi
+ default
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ cd .. || die
+ default
+}
+
+src_install() {
+ python_setup
+ # keep in sync with TESTSUBDIRS in Makefile.pre.in
+ python_moduleinto "/usr/lib/python${PYVER}"
+ python_domodule test
+ python_moduleinto "/usr/lib/python${PYVER}/idlelib"
+ python_domodule idlelib/idle_test
+}
diff --git a/dev-python/python-tests/python-tests-3.14.1.ebuild b/dev-python/python-tests/python-tests-3.14.1.ebuild
new file mode 100644
index 000000000000..28992a8422de
--- /dev/null
+++ b/dev-python/python-tests/python-tests-3.14.1.ebuild
@@ -0,0 +1,72 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+VERIFY_SIG_METHOD=sigstore
+
+inherit python-r1 verify-sig
+
+MY_PV=${PV/_/}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="Test modules from dev-lang/python"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.sigstore
+ )
+"
+S="${WORKDIR}/${MY_P}/Lib"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+# enable by default to help CI handle it (we have no additional deps)
+IUSE="+python_targets_${PYTHON_COMPAT[0]}"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ ~dev-lang/python-${PV}:${PYVER}
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+"
+
+# https://www.python.org/downloads/metadata/sigstore/
+VERIFY_SIG_CERT_IDENTITY=hugo@python.org
+VERIFY_SIG_CERT_OIDC_ISSUER=https://github.com/login/oauth
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.sigstore}
+ fi
+ default
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ cd .. || die
+ default
+}
+
+src_install() {
+ python_setup
+ # keep in sync with TESTSUBDIRS in Makefile.pre.in
+ python_moduleinto "/usr/lib/python${PYVER}"
+ python_domodule test
+ python_moduleinto "/usr/lib/python${PYVER}/idlelib"
+ python_domodule idlelib/idle_test
+}
diff --git a/dev-python/pyzotero/Manifest b/dev-python/pyzotero/Manifest
index f417edc87f41..f3ef2ac9a08b 100644
--- a/dev-python/pyzotero/Manifest
+++ b/dev-python/pyzotero/Manifest
@@ -1,4 +1,4 @@
-DIST pyzotero-1.7.3.tar.gz 532004 BLAKE2B e516a4052c5553710cf7b215f41d010a7c5f4d39dd7dd384206861bd75fcc48bee6c3ac3a3bba3c7e3b22f9335ec5aae9128796591faaadce44bb7afc35f1423 SHA512 cc20277fedc9426c939bdf3193f26cf4ba591be559381894b67492d7d43ca9fa6f4cd7493d67f405d5d23253e3a02f1b6d4f345169deae15f49498637db5ccab
-DIST pyzotero-1.7.3.tar.gz.provenance 9152 BLAKE2B de20fce045bcef374fb9d921dfa9f5309a70fe3df2e32bc5a6cdfc106708fe2f6cfd030e4eee13f7b94a2ccb0b03146a566cb3fe7d2032dc10ae393b5080db62 SHA512 9e15c7cf299f2c13564353a0dc5bf45f6cb4b6db945cf060ea4fe7506e3e3f383d31c03adfaf7bc964a1d758d2e19e7e4136a05b06747c959bb5d28f743528d5
DIST pyzotero-1.7.5.tar.gz 532915 BLAKE2B a7ead5ed0764885535ab73aed707b577ce23c17571c3dcba6e54321ce919bde05cd6eb45b901e4947762a9a04aa376749c416af0c29caf9fce66f958e54f9912 SHA512 5317bd314333c9d3fadcd7c604f1372060547f045e770b9706af5b16e34944ec01f5325188c822b248a75179d591a81004e8a7f78ba5247a005e892d66082f0a
DIST pyzotero-1.7.5.tar.gz.provenance 9019 BLAKE2B fedb0d6fdc6b3600d2110a85e9fe27156c42e04e4fa6e714cd64252ec9fd5f3beec812c7f85f548b738e08cc52f3a6ecd3c9fd9179c8f9dd1565edf2d953cfb1 SHA512 7770b38118f98aec8a938a824cc0f949b6019e20100f9f3936830992e363791d8599f8efa23e98ad493b7a735f80ba1e53afc56d7c17b1a9014a47a50b577533
+DIST pyzotero-1.7.6.tar.gz 533398 BLAKE2B 5b7d4f78a2160ede771ad5b47cdcffc30b0d9410099ce63deaac92e24a0e6dc9c5eb9f587218e372c6f7ca550f00e302a4cf9c70bde19e01f442be8f636bd20f SHA512 d5644dc5d3bbcc9c86aa07fc909dccd0b4b3c38dedec3e3a9603ea8154a5fa908af27faa8e0e49128f2bcf3268a85179f7d562eb4e0d2a4f2c787f545d2afb1a
+DIST pyzotero-1.7.6.tar.gz.provenance 9254 BLAKE2B 45d666a961f334c179b163e65a6e1db84b2180b4947dc832a528031488e67e6187a3b7333d7520514d8acba4cb4bb445780c7f0c25f66d69673fcddf9f89d5cc SHA512 bf78192e411c615db1daac105ebce11eb4bab2900ff8c1f57b9562a1e078987754688b248b55fc37e87894e80d39c0766d2c087db80cee6cef9cb9a24fb2d20b
diff --git a/dev-python/pyzotero/pyzotero-1.7.3.ebuild b/dev-python/pyzotero/pyzotero-1.7.6.ebuild
index 375eb6a672e6..375eb6a672e6 100644
--- a/dev-python/pyzotero/pyzotero-1.7.3.ebuild
+++ b/dev-python/pyzotero/pyzotero-1.7.6.ebuild
diff --git a/dev-python/sabctools/Manifest b/dev-python/sabctools/Manifest
index b7e7d1f7072f..47f64db6a19d 100644
--- a/dev-python/sabctools/Manifest
+++ b/dev-python/sabctools/Manifest
@@ -1,2 +1,3 @@
DIST sabctools-8.2.5.gh.tar.gz 8974284 BLAKE2B acc5dcbeaa20e916a8fc8691bd389c8f60c9a9d2eca9dff2fb7dd4da4abee9ad7dcd9003eeb5f37b51f3ec5c7041517ebf60679373bd101b9546d0de7de2ac0e SHA512 8e3ed65ca4cb8879e07a48033bc6b7efd6bbd4f5a7df43db8fa28719dde194aa55a53709c9d4c29ac273369ceeb845188f1b8a0cde6904962148e6352acb40fa
DIST sabctools-8.2.6.gh.tar.gz 8974199 BLAKE2B cefafb57802e7d9b32b99de16b7df2745276c4602c7aa2f9f750bf2c741224b3a9180c2a9dd6d0e807c5297e2a70dbfb3784e546618536e7fa8d6273bc5d3684 SHA512 230a3c78a11d459703bb79d765ac5bf3e21ae239731ada73103e641af64c0cccd6f8e82d4a8a6016585c9935c93f9535cb5a0ead951f4f536a038fc2ebf056db
+DIST sabctools-9.0.0.gh.tar.gz 9731189 BLAKE2B 59f200041c2555cf1aa2ef3adeefc5f46181a0fa673101475f4f45631282efe4b0cc39f3eec258430abe36a24f1d23926a076e22dfbfe5c566ba7866ffd8327d SHA512 f1a37a785c9b4e61f5febc2a782df9bf096c0408289c993307c4c448ef660051b0450ca7a047d771381a288aa246a5aad28f42b4d40986a3f0ec7ee0a1c1166f
diff --git a/dev-python/sabctools/sabctools-9.0.0.ebuild b/dev-python/sabctools/sabctools-9.0.0.ebuild
new file mode 100644
index 000000000000..d9816a9ddfe8
--- /dev/null
+++ b/dev-python/sabctools/sabctools-9.0.0.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2025 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
+
+MY_PN="sabctools"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="Module providing raw yEnc encoding/decoding for SABnzbd"
+HOMEPAGE="
+ https://github.com/sabnzbd/sabctools/
+ https://pypi.org/project/sabctools/
+"
+SRC_URI="
+ https://github.com/sabnzbd/${MY_PN}/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="LGPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+BDEPEND="
+ test? (
+ dev-python/chardet[${PYTHON_USEDEP}]
+ dev-python/portend[${PYTHON_USEDEP}]
+ )
+"
+
+DOCS=( README.md doc/yenc-draft.1.3.txt )
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
diff --git a/dev-python/sphinx-gallery/Manifest b/dev-python/sphinx-gallery/Manifest
index 935032bcb9c6..d85fcb974282 100644
--- a/dev-python/sphinx-gallery/Manifest
+++ b/dev-python/sphinx-gallery/Manifest
@@ -1 +1,2 @@
DIST sphinx_gallery-0.19.0.tar.gz 471479 BLAKE2B 335d976be4786c522693d5a5c08bbcf29aea6c571187fef77d582b827c4958e34bf1a86fec7012fc6af921600b925f46c25924522c0c5c96519331cb42a30c16 SHA512 90ed1aafa718937ee9bd5c8f52937c5a65058ca5a2138606f48f41637dae8a1d3c22cfcbed2eef3aaf3180ee137d943cfbde72ba2625c23f6d7d8e911f3f374f
+DIST sphinx_gallery-0.20.0.tar.gz 473502 BLAKE2B eced250cbd7b5c86a748ee68f0d0c9d2fc02c526b1c9f83b74f6c82f2df9cd4e0571edf0650392f2b9b33a8c33c6c22e700c82f87e2bd63b2bbb94905bdc940d SHA512 571ae48d7aba2b7807b68cdab7d73a538fe8cfb72436c80f85cd3c309d4ded6a5368400485f7684e607a980b1679438be4148ca9681c75a80f754ca084a716b3
diff --git a/dev-python/sphinx-gallery/sphinx-gallery-0.20.0.ebuild b/dev-python/sphinx-gallery/sphinx-gallery-0.20.0.ebuild
new file mode 100644
index 000000000000..07e095586239
--- /dev/null
+++ b/dev-python/sphinx-gallery/sphinx-gallery-0.20.0.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Sphinx extension to automatically generate an examples gallery"
+HOMEPAGE="
+ https://github.com/sphinx-gallery/sphinx-gallery/
+ https://sphinx-gallery.github.io/
+ https://pypi.org/project/sphinx-gallery/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="
+ dev-python/matplotlib[${PYTHON_USEDEP}]
+ dev-python/pillow[${PYTHON_USEDEP}]
+ >=dev-python/sphinx-5[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+ test? (
+ dev-python/joblib[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # Internet
+ sphinx_gallery/tests/test_docs_resolv.py::test_embed_code_links_get_data
+ sphinx_gallery/tests/test_full.py::test_run_sphinx
+ sphinx_gallery/tests/test_full.py::test_embed_links_and_styles
+ # require jupyterlite_sphinx
+ sphinx_gallery/tests/test_full.py
+ sphinx_gallery/tests/test_full_noexec.py
+ sphinx_gallery/tests/test_gen_gallery.py::test_create_jupyterlite_contents
+ sphinx_gallery/tests/test_gen_gallery.py::test_create_jupyterlite_contents_non_default_contents
+ sphinx_gallery/tests/test_gen_gallery.py::test_create_jupyterlite_contents_with_jupyterlite_disabled_via_config
+ )
+
+ epytest -o addopts=
+}
diff --git a/dev-python/sqlglot/Manifest b/dev-python/sqlglot/Manifest
index 325db66b0bdb..b29490957b79 100644
--- a/dev-python/sqlglot/Manifest
+++ b/dev-python/sqlglot/Manifest
@@ -1,6 +1,6 @@
DIST sqlglot-26.33.0-crates.tar.xz 8859792 BLAKE2B abb2051b392c53dc3caa705ddd8df7076819a26dcdaa89fa3760559a79578db01e86943c2d0ffb8006263c2dca3aa50d20023eae9d772f8ebd12a8a2d3266cdd SHA512 7cca439a06433a62bcd4a2af33d240f46e9b5240cc158edbc654efb37a464aa0f1ebbe9749b2fc6352127b4809b63af2341fac6240050c414e578ae99444ba5d
DIST sqlglot-26.33.0.tar.gz 5353340 BLAKE2B 18ace866ec89ced24911803497e8cb5c55fc6c157bf62b893e90df914b8be3360403ffff67f196080cdef9b9b9078b86d471494ae9768e7947a8b4d5d39e49af SHA512 df38e899d59bdd07aca0e5370833133308f9c5be4d0c990bf8112a48776fae034b622938aba968769aa5dc5e2957d56da48c89045b91b2d33783e6e25acc4a7b
DIST sqlglot-27.24.2-crates.tar.xz 8973180 BLAKE2B f893ebe4b94d4c2ab94f8fa902e51066e861511f698b24660d5becd31a98837c5a7f23a3d80c0716e8017012ae61f7202440c0092e1417e5f61b62e2e9f4260b SHA512 6a92b1ba2fbb51eac170db7a927927f8a06f184ebf820107a813c9cfa4dcdbea794199090a33986b48f5f00b3f43b404b7e1d26f5bf9663c53cb2b8f134d69af
-DIST sqlglot-27.28.1.tar.gz 5498876 BLAKE2B 7adc2c5fe063f3ba98ad9f37471c2a0d4eed36c4a110cfde2531783dc17118f495d111f0f27eb37f6562c6db7e8b5eb20689d25b71d01edafa51c3bf265ece16 SHA512 e8d2d43622906510dc003c62c074336e19631c679b7c77f7afd527115744a0076c14cf179bf1d3929a15bd8af5e26d125e34cb286274ee047f8b4da19fb0859a
DIST sqlglot-27.29.0.tar.gz 5503507 BLAKE2B f9c92b8f287ca4c99c792d005e62846afd669ba27b5d09042de06c8c3fa5e46b21abdf5134cc81ae3ae2cb13d0a5997c56ac07c14e5fb938544d5dbc08c70632 SHA512 5fc7a8a81b39a2dba007b501f1f5c2de9fa1e74b39d44e1bea706491db1ead0329aa2fbfb7c4997a50458137af70d259a227a8662ac26ba2904dde2b66922bb1
DIST sqlglot-28.0.0.tar.gz 5520798 BLAKE2B 3dffa572e58380437e03b9cca2a7e0d3bdab70f4543cb7bbec37306143db2ea8abb2dd85771b2833ffd92172b4a962861060e9f8c64c58d53d5d0433bac1817c SHA512 6e39af720b56a5d0ee617d96f5dabc89b0638f04ca9a2d92138e6ca833b73e88016e6d94f19726540bcb55a60290d37a4fcd26f59589f46697a110177d48ae20
+DIST sqlglot-28.1.0.tar.gz 5546281 BLAKE2B 67b6ae2e3e2fef3a4df6759c12e4a028fc561ce3ad6befff9cc05f022273f5b3c076d75a727742c5ccf259425376318548655be2700491eed8d89429d45e6ce6 SHA512 2e4bba3ca9a2165c8d5b9341851828bb386c77b4721a2217e99345d7b0f0d5d98c657771b35de6d108f68aa96eff10a641f5627912342e57a4231162bcb7152d
diff --git a/dev-python/sqlglot/sqlglot-27.28.1.ebuild b/dev-python/sqlglot/sqlglot-28.1.0.ebuild
index 994fd0fba3eb..994fd0fba3eb 100644
--- a/dev-python/sqlglot/sqlglot-27.28.1.ebuild
+++ b/dev-python/sqlglot/sqlglot-28.1.0.ebuild
diff --git a/dev-python/sybil/Manifest b/dev-python/sybil/Manifest
index 8a4799d70a7c..c55c9041e018 100644
--- a/dev-python/sybil/Manifest
+++ b/dev-python/sybil/Manifest
@@ -1,2 +1,2 @@
-DIST sybil-9.1.0.gh.tar.gz 75369 BLAKE2B db9397d212042ea230b6357f8003d620a45e9b8332f7f326cbc7d6dbc188c9c72bac105871a2b56b51e28d6149535aa86c732fbb28ff63f6d265c3751f129e11 SHA512 1b0498ed14114398d0580eb35f3a6c693bc2bbef9cec47beb7084581e82487b15b6fd5266c2cb8927ea412624e3c1a66c65f14f6007196ab7aa9dcd0668cd3d8
DIST sybil-9.2.0.gh.tar.gz 77600 BLAKE2B 1890c40653e21d116adac30d2623c0626b49bd56c0d7c162d765455ad11f45e769948d34ab3db20d73d62d79384b31598955a568b64672350245471e6a0a57a9 SHA512 0c9188f7c98a1c562b773e7a0f1de430d5ecb98738911b5bda5e3e01ac5a2ce4186d1765d7559711b6b9c819497529ac1196eeec27eb2946730b9913105a8e1e
+DIST sybil-9.3.0.gh.tar.gz 79832 BLAKE2B e3dfe125fa678ab6cfd1c4c7af59def3d9b02c506f193e0f7035dd074a1c949e6a30926155a41de8f05766a0c709d03cd3463e84def165cb1ac1526b0c95b553 SHA512 2ea4bc51c8b87cdc034c2d6b4d6016c9b1333d613de9ca49b67fca25b7d3aa800ef790b220db9973e70996f692cb9736dd3dadaf3c0275430f73471e95d96caa
diff --git a/dev-python/sybil/sybil-9.1.0.ebuild b/dev-python/sybil/sybil-9.1.0.ebuild
deleted file mode 100644
index 21cbbb19f0a2..000000000000
--- a/dev-python/sybil/sybil-9.1.0.ebuild
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2019-2025 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
-
-DESCRIPTION="Automated testing for the examples in your documentation"
-HOMEPAGE="
- https://github.com/simplistix/sybil/
- https://pypi.org/project/sybil/
-"
-# tests are missing in sdist, as of 5.0.1
-SRC_URI="
- https://github.com/simplistix/sybil/archive/${PV}.tar.gz
- -> ${P}.gh.tar.gz
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86"
-
-RDEPEND="
- >=dev-python/pytest-8[${PYTHON_USEDEP}]
-"
-BDEPEND="
- test? (
- dev-python/myst-parser[${PYTHON_USEDEP}]
- dev-python/seedir[${PYTHON_USEDEP}]
- dev-python/testfixtures[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-python_test() {
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- epytest
-}
diff --git a/dev-python/sybil/sybil-9.2.0.ebuild b/dev-python/sybil/sybil-9.3.0.ebuild
index 9fbd6d512dce..63d2991d5a62 100644
--- a/dev-python/sybil/sybil-9.2.0.ebuild
+++ b/dev-python/sybil/sybil-9.3.0.ebuild
@@ -21,7 +21,7 @@ SRC_URI="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
RDEPEND="
>=dev-python/pytest-8[${PYTHON_USEDEP}]
diff --git a/dev-python/urwid/Manifest b/dev-python/urwid/Manifest
index 2756c583203f..ca961e96fc4d 100644
--- a/dev-python/urwid/Manifest
+++ b/dev-python/urwid/Manifest
@@ -1,2 +1,2 @@
-DIST urwid-3.0.2.tar.gz 855353 BLAKE2B cc1cf1611d1c9c4702880953b723445cb7972ae0ebedd369c881608cfe4c80873e3ed5ba6c7055466e967d954a8d7e3e7c34a1d31a617866e74907fef99ab4c2 SHA512 60f3a911d85907953c8b791458602a271bdbdebddec0905e02bc424340fef542eadd4a2b8d8ec1883238b794565c96ae1f0396abb0b39ed4d3d5dd66c62140f6
DIST urwid-3.0.3.tar.gz 855817 BLAKE2B 069ebcda9a79192bc098e87f8a0cc2bbc66a53a3482262e7be77017ba0a1b73e3794160f3cc51b8f1916252fffa6d6401bebd2a6268071de2b5bb646d79c73f7 SHA512 4c8ced00f399509225b7b287704a6d00f05b80411b9381355dcf384243e36f200a3efdf01e3ea6f7c9fbeed4c1105595d4dd99220c80e8fd3ddfebdaf1fcf5eb
+DIST urwid-3.0.4.tar.gz 855817 BLAKE2B abf8fa38b2ef4b62878d4473588b95277e9fd88dc8d70c9444e5a6a5ca50d9ad78065e66acb3253e55a5af6ede8feb8c2abd825176136adb01afcc023492b575 SHA512 02e7e089f8a4b90a61e2dd7988a7c1b89caf11174f27c8d8fe423f4688853e25210f6eec0d299570676cc0d106641fb6aebcdfab17c9d4bab91a69234cb8dce0
diff --git a/dev-python/urwid/urwid-3.0.2.ebuild b/dev-python/urwid/urwid-3.0.4.ebuild
index e16c1ccd8464..b8a2bc60a4ab 100644
--- a/dev-python/urwid/urwid-3.0.2.ebuild
+++ b/dev-python/urwid/urwid-3.0.4.ebuild
@@ -18,7 +18,7 @@ HOMEPAGE="
LICENSE="LGPL-2.1"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux"
IUSE="examples"
RDEPEND="
diff --git a/dev-python/uv-build/Manifest b/dev-python/uv-build/Manifest
index aa02181c1380..c4a041b4a6de 100644
--- a/dev-python/uv-build/Manifest
+++ b/dev-python/uv-build/Manifest
@@ -3,6 +3,7 @@ DIST uv_build-0.9.11.tar.gz 336407 BLAKE2B 19177207f53ecab919ee875ae5aecd77f76dc
DIST uv_build-0.9.12.tar.gz 338778 BLAKE2B b11a99bcd9f130107a2529a204bfcb64a3bdc7116a5f8dacef285f08db1cc999ad55b8b791c820dd6c16ff9d6941c9090dd9d58ffafb3d97da6031c350a736c8 SHA512 84e5231654e133032909a30375ab6284fcad3770140d9e9b9d14ea0fc261f380b7b60be3785acb51e2f09e3cdee1f9c76c8af38daa9ca42513c9728725d6ff44
DIST uv_build-0.9.13.tar.gz 338831 BLAKE2B ba0b4eca782afc52d7303a51ecb18957073c22c0be1dae90ccc044c59cc2a6502c89ce06a5fa6b4014fdd54f641d97523cdad4ab15f19e9ae97541aa51a7a5ec SHA512 6ef5fe809b2fc80778b33c43b3083fdd4320be031818d88f3bf9e7f2dd4bcf59303ccd7b5398eacedbf9c500ae336bf18c7ed15de858b6f369594e14b005d71d
DIST uv_build-0.9.14.tar.gz 339665 BLAKE2B a23fa78e67450d3da7c17ce8828f3c635eddbbe36f2742f7bafa324a140dbf064fd19350263b0a87aec1edba2189a5d219a1e04416659287007598487f678f81 SHA512 ac4d578cf61cfaa4b4b0d38917f6f65de64111d7764bc2e837489fda8c6ce2a18b4256965df9e32b223ce34721bc07fbac7aeef078eaf9cac6d6d3309260180a
+DIST uv_build-0.9.15.tar.gz 354021 BLAKE2B a47350ead8d9672d09967bbd7f9ac2f8e231e1dd5afb8c20e59926429792d3872feb1f8e4d7a9318ec447a99ce8add0503dfba0be2b970b2f192f954b472f1a7 SHA512 11fa1ebb1cfc184bd5bedf5e11fb28f14abf118183d94cbe0ac9a1b83f150a69836f0547a671e8cf16527d84ec61dd5b2983efafe5aeccd86e94cda79e1de664
DIST uv_build-0.9.4.tar.gz 332506 BLAKE2B 3b65cc80192cf3abc33bcf01735c8b7f937a12f2dcd0557d0ae255ce8bd4cb7dbb15522e73802be0e17ac10c4acad6f9075f12d5f853bb1881b0c13f1d120b33 SHA512 c3be52cfbc1cf5a229df91d9e1125925a534e3fca3041e29a16edd2334fa28b055c73e21a6bd1a3d1d63924cf8f112645300530e8cb6139fb549499ca672070f
DIST uv_build-0.9.6.tar.gz 332253 BLAKE2B 2c3fa23dbe36b0866a3a3194b07ee1212cb00acd785c375646c3eb6c97a63435f28c9e934f56c8d6feeec145aace1aad37550b85ae2a611f521fc25a4c7d3bc1 SHA512 e8d8bbd46c92722261722f3d8865b2b24e695edf52652c1d1310adae3cb437ebef5397feda90e3bf863394ca75cf3024eb90a5f80b2b92af24ede4e2f81b0ce1
DIST uv_build-0.9.7.tar.gz 332992 BLAKE2B 069e615f41e78098b61cc073cb01bc77e0e6778f3054ccfcf36985be3755d7e819cc1bd151e875db109461f423cc855cd336467015ec7103e47346f230564679 SHA512 d61249de00640f6e0ab62ab440a8aae1802acbd6cf8ecb8aca3efe26361d7191d057735ab91c174c5772fc04accf0ae3281f447d010c99e2f458829f4c618abc
diff --git a/dev-python/uv-build/uv-build-0.9.15.ebuild b/dev-python/uv-build/uv-build-0.9.15.ebuild
new file mode 100644
index 000000000000..fe8e9650d15e
--- /dev/null
+++ b/dev-python/uv-build/uv-build-0.9.15.ebuild
@@ -0,0 +1,99 @@
+# Copyright 2025 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 ~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 40efbf4a0eec..aea111cce11a 100644
--- a/dev-python/uv/Manifest
+++ b/dev-python/uv/Manifest
@@ -13,6 +13,8 @@ DIST uv-0.9.13-crates.tar.xz 46463392 BLAKE2B 54b504453381a619537155898ab8c19d33
DIST uv-0.9.13.gh.tar.gz 4856421 BLAKE2B f7b0a2ead03da04b61e9d5c56add88f17a5f314f6a6b8bca4aa9c66d2d3754595c42cff98be8022ccc729c7213d53a1af002c145f091da6b736f7d7a199a1414 SHA512 eb35b243c18c2e7fb7783eecdb3c6d85c277d808117cc02ed4c600246237f56613988a414f66b7486691f770444eb2b2e5f3bee6c2e539e4c4dec305cb022266
DIST uv-0.9.14-crates.tar.xz 46510364 BLAKE2B f39e68e8419d82dab627525288829f81bcdbfad925b278442fc2a579d704c2e66b96033048275b9eb575b310fd99adc3f00d79ebc781ffc9022431d5822ef4a2 SHA512 c670a8cd21a0f617675735dd5444f05288df9589d9344c32ba92df6fb0e8bd94713c71616245fdaba9b0068e21c52d54e23d07a6d948989a4c46f748f58b15b3
DIST uv-0.9.14.gh.tar.gz 4859989 BLAKE2B b4e8cdd35c9fc40a1777b2b625e870bf5d89a585ff722674c94abc75700047a69f32ab6651f8a3953c68feb02f8e86f61120b1b86057ae30b0162824c9e0a231 SHA512 d1cbdcc36fd65111ceb875c6ba4cc54bc7762556f2fb17f8bb130ed42d037782c5a5f0d55d33fdc47f8d17c7cea19e776c302b188b883f7a94df2c4227ab32a3
+DIST uv-0.9.15-crates.tar.xz 46539408 BLAKE2B 57e582f56e12858292d1dfaec10292eb58fb118051618875eab0d2dcd4f55aa89de6f788b3aa5013ce5e03068bb404ef04faae633d5c208f382366ac5ddf70df SHA512 4db7549d6902682db7af385e5099e74bbd82e54aaf45a44fe64416fda91e065f4bf978b9db55ab72f2872f9e8933b49020102b959c1d2bcef4b9a9877ac1e789
+DIST uv-0.9.15.gh.tar.gz 4887603 BLAKE2B 422a3c004abdf052438b145400675010b1adfc8cb8d49979367544e2d381389594188276fe603ffa983f5926be624f5d863053bd79342eeee10caf1260b2a479 SHA512 2605e2e7d5f6fdbb5ec4839363f65c8e71559944ec003cb9c69040be08094eb5c041831151b669e2dbbcf1799e862f484a21a592090524f79686469eac0e3381
DIST uv-0.9.4-crates.tar.xz 46093644 BLAKE2B bdce4b138718b91a67ccb36e6d8839358ab2ddeeedec3017bc245b0717e32d890a41f8c9c831983681ec715ce458efa8d43356c189b9b7457df3e71122924e3f SHA512 7047b68db7e05abb6a399250a4a531499985d42f12eff61ad1557823b37d62576b38b51ccbe39a02bc9a98af6341de728466b262c49bb48dd30abb64eb804660
DIST uv-0.9.4.gh.tar.gz 4749319 BLAKE2B b46d44830f7a2a621f3ab420db85e9d999b7c42ddebc21403ea2f11e819e8295af37049f1529848a3fd83ef87ac0de26ce1e1c03bf4177c3032b9adfd6dfe1e8 SHA512 ae11c1e777e3d0e036f0a665e2edfb9a4b5b50a9e107d795113b626bc16d406d3fca12e8a133185e54279b2a64f8e3d276372cefc9a96b2ac5f1ed0ece2c10b0
DIST uv-0.9.6-crates.tar.xz 45696768 BLAKE2B 96cff52c0e5477c4e9648e3863d32bde4b34a1a46b6d96703c48fe340b655319e951471aa6403c09818c313a59b0e54804467efa7e13a8410de34299a98f077b SHA512 46964460f3404304faefd1758bb07bcddf1d48efbdd2b890ddb0d2623841e1a0c86108ac3c9312ed8e2f8fcaefbf9b022b57cd6074fdb6d52f43c35e3b3c2d32
diff --git a/dev-python/uv/uv-0.9.15.ebuild b/dev-python/uv/uv-0.9.15.ebuild
new file mode 100644
index 000000000000..253d1ec065af
--- /dev/null
+++ b/dev-python/uv/uv-0.9.15.ebuild
@@ -0,0 +1,167 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+"
+RUST_MIN_VER="1.89.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
+"
+# ring crate
+LICENSE+=" openssl"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+IUSE="test"
+RESTRICT="test"
+PROPERTIES="test_network"
+
+DEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-arch/zstd:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ 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
+}
+
+src_configure() {
+ local myfeatures=(
+ git
+ pypi
+ python
+ )
+
+ cargo_src_configure --no-default-features
+}
+
+src_compile() {
+ cd crates/uv || die
+ cargo_src_compile
+}
+
+src_test() {
+ # work around https://github.com/astral-sh/uv/issues/4376
+ local -x PATH=${BROOT}/usr/lib/python-exec/python3.12:${PATH}
+ local -x COLUMNS=100
+ local -x PYTHONDONTWRITEBYTECODE=
+ # fix tests failing because of our config
+ local -x XDG_CONFIG_DIRS=${T}
+
+ 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/weasyprint/Manifest b/dev-python/weasyprint/Manifest
index ab403c280cb2..3a5853e53ca2 100644
--- a/dev-python/weasyprint/Manifest
+++ b/dev-python/weasyprint/Manifest
@@ -1,2 +1,4 @@
DIST weasyprint-66.0.tar.gz 504224 BLAKE2B 2090b07fa06df89c847c4037fa2b7276bde2866b61e7b54b09d94658a2be3f988128619fa645569194f5087531a5403281e6d2bc926f18e8b5fe4f79dddc3ee9 SHA512 850996c6934156f4d4fca12cc052a8346b85aeadf1a3d99763e20a6ddabd2b93a39983615990e0e680a942c63c09563effa9b66abc5bf0c368963737ddf66264
DIST weasyprint-66.0.tar.gz.provenance 9133 BLAKE2B 11ffc967072d8950d35ac3b9057a642a913626331abf7f326c6766f5dd9d6483c79e34ddf221b856e224e7162b76c830db847e9282f5f63d29d0d361eccd887d SHA512 d336e3f6db27ae2b40d39a2ed9108f151afb219746a2e3ba1081e4be6d6c66acf8b168b15bafa8b5298148750f2d999b81b72b516ba33bf334d0a001dfd22364
+DIST weasyprint-67.0.tar.gz 1534152 BLAKE2B 0c966872817c46c96b58a834d2986766eb25f14215e71636f084bcd5bb1fbab1981295ea46bf69806c29606e29ee4412faafa86d7e2f230f26f45ffecff4639d SHA512 e0241507e57aaee18e0f6ae469de12df4ae4930a5e9f7e9ef428fbd6eb59efe40598423e6ce6de5c12d088439d30ec562cc28f342c7720e742ab16d8110380f1
+DIST weasyprint-67.0.tar.gz.provenance 9415 BLAKE2B 058789a472699b87aa695cf91055d27b274cc8ee60aafbe805ec021ec7bd28f45d9468ea64c63f45ff34f133cd18787972906160b089825dd03ab9afdbac559a SHA512 22d29f3be521d868e798dc01bde3b0f38279ae72d58d6bffc7f6792a58ebb22f02bd47f76cf2e79cb1141ee55fd5340d4a3adaca40776c043123fcbc25190bb8
diff --git a/dev-python/weasyprint/weasyprint-67.0.ebuild b/dev-python/weasyprint/weasyprint-67.0.ebuild
new file mode 100644
index 000000000000..3e3ac308f7f6
--- /dev/null
+++ b/dev-python/weasyprint/weasyprint-67.0.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYPI_VERIFY_REPO=https://github.com/Kozea/WeasyPrint
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Visual rendering engine for HTML and CSS that can export to PDF"
+HOMEPAGE="
+ https://weasyprint.org/
+ https://github.com/Kozea/WeasyPrint/
+ https://pypi.org/project/weasyprint/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ >=dev-python/cffi-0.6:=[${PYTHON_USEDEP}]
+ >=dev-python/cssselect2-0.8.0[${PYTHON_USEDEP}]
+ >=dev-python/fonttools-4.59.2[${PYTHON_USEDEP}]
+ >=dev-python/pillow-9.1.0[jpeg,jpeg2k,${PYTHON_USEDEP}]
+ >=dev-python/pydyf-0.11.0[${PYTHON_USEDEP}]
+ >=dev-python/pyphen-0.9.1[${PYTHON_USEDEP}]
+ >=dev-python/tinycss2-1.5.0[${PYTHON_USEDEP}]
+ >=dev-python/tinyhtml5-2.0.0[${PYTHON_USEDEP}]
+ media-fonts/dejavu
+ x11-libs/pango
+"
+
+BDEPEND="
+ test? (
+ >=app-text/ghostscript-gpl-9.56.1-r3
+ media-fonts/ahem
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest