summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-08-24 09:03:24 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-08-24 09:03:24 +0000
commit068d0b961cfd673c7a6873df843c910c0b054559 (patch)
treebba16f002841f0fdda424f67253e25dba5d54fab /dev-python
parent0caf09d16d18de997a4fd29f35cf3433aaff3951 (diff)
downloadbaldeagleos-repo-068d0b961cfd673c7a6873df843c910c0b054559.tar.gz
baldeagleos-repo-068d0b961cfd673c7a6873df843c910c0b054559.tar.xz
baldeagleos-repo-068d0b961cfd673c7a6873df843c910c0b054559.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/Babel/Babel-2.16.0.ebuild2
-rw-r--r--dev-python/Faker/Faker-26.3.0.ebuild2
-rw-r--r--dev-python/Faker/Faker-28.0.0.ebuild41
-rw-r--r--dev-python/Faker/Manifest1
-rw-r--r--dev-python/aiodns/aiodns-3.2.0.ebuild2
-rw-r--r--dev-python/aiohttp-socks/aiohttp-socks-0.9.0.ebuild2
-rw-r--r--dev-python/aiohttp/Manifest4
-rw-r--r--dev-python/aiohttp/aiohttp-3.10.1-r1.ebuild118
-rw-r--r--dev-python/aiohttp/aiohttp-3.10.2.ebuild112
-rw-r--r--dev-python/aiohttp/aiohttp-3.10.3.ebuild112
-rw-r--r--dev-python/aiohttp/aiohttp-3.10.4.ebuild112
-rw-r--r--dev-python/aiohttp/aiohttp-3.10.5.ebuild2
-rw-r--r--dev-python/aiohttp/files/aiohttp-3.10.1-py313.patch97
-rw-r--r--dev-python/attrs/attrs-24.2.0.ebuild2
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.35.5.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.35.5.ebuild76
-rw-r--r--dev-python/fakeredis/fakeredis-2.23.5.ebuild2
-rw-r--r--dev-python/flake8/flake8-7.1.1.ebuild2
-rw-r--r--dev-python/griffe/Manifest1
-rw-r--r--dev-python/griffe/griffe-1.2.0.ebuild49
-rw-r--r--dev-python/idna/Manifest1
-rw-r--r--dev-python/idna/idna-3.8.ebuild22
-rw-r--r--dev-python/jaraco-vcs/jaraco-vcs-2.4.0.ebuild2
-rw-r--r--dev-python/more-itertools/more-itertools-10.4.0.ebuild2
-rw-r--r--dev-python/myst-parser/myst-parser-4.0.0.ebuild2
-rw-r--r--dev-python/numpydoc/numpydoc-1.8.0.ebuild2
-rw-r--r--dev-python/oslo-utils/oslo-utils-7.3.0.ebuild2
-rw-r--r--dev-python/pikepdf/Manifest1
-rw-r--r--dev-python/pikepdf/pikepdf-9.2.0.ebuild74
-rw-r--r--dev-python/pycares/pycares-4.4.0.ebuild2
-rw-r--r--dev-python/pypy3_10/Manifest1
-rw-r--r--dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild212
-rw-r--r--dev-python/pypy3_9/Manifest1
-rw-r--r--dev-python/pypy3_9/pypy3_9-7.3.16_p2.ebuild211
-rw-r--r--dev-python/pytest-asyncio/Manifest2
-rw-r--r--dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha0.ebuild51
-rw-r--r--dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha1.ebuild44
-rw-r--r--dev-python/pytest-skip-markers/pytest-skip-markers-1.5.2.ebuild2
-rw-r--r--dev-python/rapidfuzz/rapidfuzz-3.9.6.ebuild2
-rw-r--r--dev-python/sabctools/sabctools-8.2.5.ebuild2
-rw-r--r--dev-python/setuptools-rust/setuptools-rust-1.10.1.ebuild2
-rw-r--r--dev-python/sphinx-prompt/sphinx-prompt-1.9.0.ebuild2
-rw-r--r--dev-python/sqlalchemy/Manifest1
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-2.0.30-r1.ebuild124
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-2.0.30.ebuild111
-rw-r--r--dev-python/time-machine/time-machine-2.15.0.ebuild2
-rw-r--r--dev-python/tox/tox-4.17.1.ebuild2
-rw-r--r--dev-python/trio/trio-0.26.2.ebuild2
-rw-r--r--dev-python/uv/Manifest3
-rw-r--r--dev-python/uv/uv-0.3.3.ebuild112
-rw-r--r--dev-python/uvicorn/uvicorn-0.30.5.ebuild2
-rw-r--r--dev-python/yattag/yattag-1.16.0.ebuild2
54 files changed, 886 insertions, 911 deletions
diff --git a/dev-python/Babel/Babel-2.16.0.ebuild b/dev-python/Babel/Babel-2.16.0.ebuild
index b4c93431f556..aa16585172b0 100644
--- a/dev-python/Babel/Babel-2.16.0.ebuild
+++ b/dev-python/Babel/Babel-2.16.0.ebuild
@@ -24,7 +24,7 @@ SRC_URI+="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-macos"
# RDEPEND in BDEPEND for import_cldr.py usage, bug #852158
BDEPEND="
diff --git a/dev-python/Faker/Faker-26.3.0.ebuild b/dev-python/Faker/Faker-26.3.0.ebuild
index cca5ce1813b1..b74ee629e127 100644
--- a/dev-python/Faker/Faker-26.3.0.ebuild
+++ b/dev-python/Faker/Faker-26.3.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
>=dev-python/python-dateutil-2.4.2[${PYTHON_USEDEP}]
diff --git a/dev-python/Faker/Faker-28.0.0.ebuild b/dev-python/Faker/Faker-28.0.0.ebuild
new file mode 100644
index 000000000000..a6c1d745e12f
--- /dev/null
+++ b/dev-python/Faker/Faker-28.0.0.ebuild
@@ -0,0 +1,41 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A Python package that generates fake data for you"
+HOMEPAGE="
+ https://github.com/joke2k/faker/
+ https://pypi.org/project/Faker/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/python-dateutil-2.4.2[${PYTHON_USEDEP}]
+ !dev-ruby/faker
+"
+BDEPEND="
+ test? (
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ dev-python/pillow[${PYTHON_USEDEP},tiff]
+ dev-python/validators[${PYTHON_USEDEP}]
+ )
+"
+
+# note: tests are flaky with xdist
+distutils_enable_tests pytest
+
+python_test() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ local -x PYTEST_PLUGINS=faker.contrib.pytest.plugin
+ epytest
+ epytest --exclusive-faker-session tests/pytest/session_overrides
+}
diff --git a/dev-python/Faker/Manifest b/dev-python/Faker/Manifest
index 898ecefa1f8a..049f4c3b8a8c 100644
--- a/dev-python/Faker/Manifest
+++ b/dev-python/Faker/Manifest
@@ -3,3 +3,4 @@ DIST Faker-26.1.0.tar.gz 1763636 BLAKE2B 997d2449c70fd179a7bea5be93e05a916804b55
DIST Faker-26.2.0.tar.gz 1764867 BLAKE2B aa1a5bdb5b9867c3fced1b9fdcb53f600d7311b27122d0c7895c419c18e3c04d48ba07897e9052f99583f8319bad4b2262925b54dbe6434ca193c085c2c93bae SHA512 f5d1bb832f3f4e21b694ea77e941b6862066514a2970c665e36b1bfec76b3b05a19d7bfb0a962b08bb39cae53a3ed57b329a7a8f447d9f327ecf1bfd61e99d6d
DIST Faker-26.3.0.tar.gz 1765030 BLAKE2B d255c03774adb173aaf1d004c96d5c2cbcd3d22e3c8ed0ea55cb93a2671ea1bd6fbe243f82b31d0ad96ff613bab3d452b3af806179aaf3b185ec027dc4a2d311 SHA512 71e63ebffe0c6c0a4761612adceac18bec8c6e8cb57e2ecbcbe91da6b6d7700d69c4417d45e9d3ec13d75b5c6d0aaaa0ee948d27a60e62dd9b644f69d21e1090
DIST faker-27.0.0.tar.gz 1764992 BLAKE2B 4ddb83d76abd29eb2281bc27122632e098d3a09bb220881df60d9b67806f58d3c356229035f5316a3fe5dbab70db667d7b8d28d828b4585fc75736ecbc9f0186 SHA512 90b1b76f94066d6d27c4e857297b55b3675f96226cdbefd1bdd99a28599343ffee2b64edd3b15c6cb893ee2b4df446f079269609787a7ef054af3c6a03cca8a1
+DIST faker-28.0.0.tar.gz 1782120 BLAKE2B b550805dced81c2e15e44567dd14c16477cd65545bc0f23825929ce98ab5a485f44df8c95fa7e74598d1e4944a5be057faed9e7ccada077f2daa149921be99f1 SHA512 f043abcf2313f665c18815c949f8c5349f1aa748ebf5fca775b0fb517d959a5972a0f4ff14b672ff6320acd090a36b295ac449418cca547d805dbfd77f6aa88a
diff --git a/dev-python/aiodns/aiodns-3.2.0.ebuild b/dev-python/aiodns/aiodns-3.2.0.ebuild
index 907a1ec9b747..4779c94c984c 100644
--- a/dev-python/aiodns/aiodns-3.2.0.ebuild
+++ b/dev-python/aiodns/aiodns-3.2.0.ebuild
@@ -16,7 +16,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
# Tests fail with network-sandbox, since they try to resolve google.com
PROPERTIES="test_network"
diff --git a/dev-python/aiohttp-socks/aiohttp-socks-0.9.0.ebuild b/dev-python/aiohttp-socks/aiohttp-socks-0.9.0.ebuild
index 6e90358c673b..319d5c0a4ee6 100644
--- a/dev-python/aiohttp-socks/aiohttp-socks-0.9.0.ebuild
+++ b/dev-python/aiohttp-socks/aiohttp-socks-0.9.0.ebuild
@@ -20,7 +20,7 @@ SRC_URI="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
RDEPEND="
>=dev-python/aiohttp-3.10.0[${PYTHON_USEDEP}]
diff --git a/dev-python/aiohttp/Manifest b/dev-python/aiohttp/Manifest
index 28a995369cfa..1e1ca709506f 100644
--- a/dev-python/aiohttp/Manifest
+++ b/dev-python/aiohttp/Manifest
@@ -1,6 +1,2 @@
-DIST aiohttp-3.10.1.tar.gz 7517572 BLAKE2B 4400cbda0997f3602ace4aae7ba153dcb515d49d8d3431fab087ebba3126d8fa82121998b1d8e36e2b86c9144a5c124ac16c12520cd47fea7956e6c04e2b4e55 SHA512 59f743ce7821b46da531eb576bbf20409407726b6ba78be9615f715ab2404cc3668120d2ec1566dcab7017ba36bf1753a3365b81097da53685c93ba013c3c94a
-DIST aiohttp-3.10.2.tar.gz 7520621 BLAKE2B a8e44ba6292e614ac9a7b15649a9838e354ca17bb14df61ccf9b1f2c0ce647e5786933701c85105a493b11e6a4c3edcb80e6ba43a501c4600a3b7b699c5c64f6 SHA512 61baa7a264a2bf38624a339b8e0ddc066aba7cb3da13d8e24fc705d4bf098796f198354c7b913a12ee3c8bc0c5468313432dad51f343c8dfc8efef020b385c88
-DIST aiohttp-3.10.3.tar.gz 7521618 BLAKE2B 2b5ff621d5b58f5c09060ee2e245fc758dde81741fa98ea9ee2215ea7f0f511f2732111af84df5d14075284376a619c3025fd6790d9a7c460d7e0b9a2cb8d8f2 SHA512 fabf06bb8556b5870be37c76c50664289227d79a0f322aef830ebbcbdd2429d4499a767c74f53c83b1622cbb8278c36294777baae84ee5b86fab652d7fcd5c7c
-DIST aiohttp-3.10.4.tar.gz 7524267 BLAKE2B dc79b89c215ea7c9dcaca674f84b1c13787e80bf32f791439958ad021a2abc650d3e69fef7cc6bad9455a82222ae4abed2392c8d4b3a98fb5fcb1e7c8242bcb8 SHA512 060286794f09e38dda3d5bdb6f5c0bd4cf8bc1eaaf58bf403a526f8afb50f53cb880d9ece1de70f4fb88d5e72357beceba86f33b9e77e748425ae636552406b8
DIST aiohttp-3.10.5.tar.gz 7524360 BLAKE2B 57ca70d1a075ae7f9ba9b86a19be52e05e88518e28baefb16e852ce83707bfbad9cb06af08a2cea3371349649e85ab6dfb3426ee2759a4e84456041373575a8b SHA512 bb932d24b3ce332d8a232ef3bf1fbe9b0a7df9986ad5e81d5f41bc31a81204653e5250c4f0ee77a9eeb53d404bd907b12977d31caae54c00ef0146350629e750
DIST aiohttp-3.9.5.tar.gz 7504841 BLAKE2B f051ee88d45952219f72d542f1c6d0cc33c699c6c5fb5dbe3bc054ee4d0e03121b219c8c8524fd1236a8b878329b0997b8afe07d6c66074102d4a2052a8738ff SHA512 da11468a2f131275593395b052700a99cf79055a32d48327dca0f58547ad30add8cd0a375dbd831e2f06fe7a739183251e4ad69c16f3d141799bbed45a8a5dc4
diff --git a/dev-python/aiohttp/aiohttp-3.10.1-r1.ebuild b/dev-python/aiohttp/aiohttp-3.10.1-r1.ebuild
deleted file mode 100644
index 6080d0a82f73..000000000000
--- a/dev-python/aiohttp/aiohttp-3.10.1-r1.ebuild
+++ /dev/null
@@ -1,118 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="HTTP client/server for asyncio"
-HOMEPAGE="
- https://github.com/aio-libs/aiohttp/
- https://pypi.org/project/aiohttp/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="test-rust"
-
-RDEPEND="
- >=dev-python/aiodns-3.2.0[${PYTHON_USEDEP}]
- >=dev-python/aiohappyeyeballs-2.3.0[${PYTHON_USEDEP}]
- >=dev-python/aiosignal-1.1.2[${PYTHON_USEDEP}]
- >=dev-python/attrs-17.3.0[${PYTHON_USEDEP}]
- dev-python/brotlicffi[${PYTHON_USEDEP}]
- >=dev-python/frozenlist-1.1.1[${PYTHON_USEDEP}]
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.0[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- <dev-python/async-timeout-5[${PYTHON_USEDEP}]
- >=dev-python/async-timeout-4.0[${PYTHON_USEDEP}]
- ' 3.10)
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- dev-python/freezegun[${PYTHON_USEDEP}]
- www-servers/gunicorn[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- dev-python/re-assert[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- dev-python/time-machine[${PYTHON_USEDEP}]
- ' 'python3*')
- test-rust? (
- dev-python/trustme[${PYTHON_USEDEP}]
- )
- )
-"
-
-DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_prepare() {
- local PATCHES=(
- # https://github.com/aio-libs/aiohttp/pull/8623
- # https://github.com/aio-libs/aiohttp/pull/8648
- "${FILESDIR}/${P}-py313.patch"
- )
-
- # increase the timeout a little
- sed -e '/abs=/s/0.001/0.01/' -i tests/test_helpers.py || die
- # xfail_strict fails on py3.10
- sed -i -e '/--cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
-
- distutils-r1_src_prepare
-}
-
-python_configure_all() {
- # workaround missing files
- mkdir tools || die
- > requirements/cython.txt || die
- > tools/gen.py || die
- chmod +x tools/gen.py || die
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- # proxy is not packaged
- tests/test_proxy_functional.py
- # python_on_whales is not packaged
- tests/autobahn/test_autobahn.py
- )
-
- local EPYTEST_DESELECT=(
- # Internet
- tests/test_client_session.py::test_client_session_timeout_zero
- # broken by irrelevant deprecation warnings
- tests/test_circular_imports.py::test_no_warnings
- )
-
- case ${EPYTHON} in
- pypy3)
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch,
- # sigh
- local -x AIOHTTP_NO_EXTENSIONS=1
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_mock,xdist.plugin
- rm -rf aiohttp || die
- epytest -m "not internal and not dev_mode" \
- -p rerunfailures --reruns=5
-}
diff --git a/dev-python/aiohttp/aiohttp-3.10.2.ebuild b/dev-python/aiohttp/aiohttp-3.10.2.ebuild
deleted file mode 100644
index c8ebadae0b89..000000000000
--- a/dev-python/aiohttp/aiohttp-3.10.2.ebuild
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="HTTP client/server for asyncio"
-HOMEPAGE="
- https://github.com/aio-libs/aiohttp/
- https://pypi.org/project/aiohttp/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="test-rust"
-
-RDEPEND="
- >=dev-python/aiodns-3.2.0[${PYTHON_USEDEP}]
- >=dev-python/aiohappyeyeballs-2.3.0[${PYTHON_USEDEP}]
- >=dev-python/aiosignal-1.1.2[${PYTHON_USEDEP}]
- >=dev-python/attrs-17.3.0[${PYTHON_USEDEP}]
- dev-python/brotlicffi[${PYTHON_USEDEP}]
- >=dev-python/frozenlist-1.1.1[${PYTHON_USEDEP}]
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.0[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- <dev-python/async-timeout-5[${PYTHON_USEDEP}]
- >=dev-python/async-timeout-4.0[${PYTHON_USEDEP}]
- ' 3.10)
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- dev-python/freezegun[${PYTHON_USEDEP}]
- www-servers/gunicorn[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- dev-python/re-assert[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- dev-python/time-machine[${PYTHON_USEDEP}]
- ' 'python3*')
- test-rust? (
- dev-python/trustme[${PYTHON_USEDEP}]
- )
- )
-"
-
-DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_prepare() {
- # increase the timeout a little
- sed -e '/abs=/s/0.001/0.01/' -i tests/test_helpers.py || die
- # xfail_strict fails on py3.10
- sed -i -e '/--cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
-
- distutils-r1_src_prepare
-}
-
-python_configure_all() {
- # workaround missing files
- mkdir tools || die
- > requirements/cython.txt || die
- > tools/gen.py || die
- chmod +x tools/gen.py || die
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- # proxy is not packaged
- tests/test_proxy_functional.py
- # python_on_whales is not packaged
- tests/autobahn/test_autobahn.py
- )
-
- local EPYTEST_DESELECT=(
- # Internet
- tests/test_client_session.py::test_client_session_timeout_zero
- # broken by irrelevant deprecation warnings
- tests/test_circular_imports.py::test_no_warnings
- )
-
- case ${EPYTHON} in
- pypy3)
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch,
- # sigh
- local -x AIOHTTP_NO_EXTENSIONS=1
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_mock,xdist.plugin
- rm -rf aiohttp || die
- epytest -m "not internal and not dev_mode" \
- -p rerunfailures --reruns=5
-}
diff --git a/dev-python/aiohttp/aiohttp-3.10.3.ebuild b/dev-python/aiohttp/aiohttp-3.10.3.ebuild
deleted file mode 100644
index c8ebadae0b89..000000000000
--- a/dev-python/aiohttp/aiohttp-3.10.3.ebuild
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="HTTP client/server for asyncio"
-HOMEPAGE="
- https://github.com/aio-libs/aiohttp/
- https://pypi.org/project/aiohttp/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="test-rust"
-
-RDEPEND="
- >=dev-python/aiodns-3.2.0[${PYTHON_USEDEP}]
- >=dev-python/aiohappyeyeballs-2.3.0[${PYTHON_USEDEP}]
- >=dev-python/aiosignal-1.1.2[${PYTHON_USEDEP}]
- >=dev-python/attrs-17.3.0[${PYTHON_USEDEP}]
- dev-python/brotlicffi[${PYTHON_USEDEP}]
- >=dev-python/frozenlist-1.1.1[${PYTHON_USEDEP}]
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.0[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- <dev-python/async-timeout-5[${PYTHON_USEDEP}]
- >=dev-python/async-timeout-4.0[${PYTHON_USEDEP}]
- ' 3.10)
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- dev-python/freezegun[${PYTHON_USEDEP}]
- www-servers/gunicorn[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- dev-python/re-assert[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- dev-python/time-machine[${PYTHON_USEDEP}]
- ' 'python3*')
- test-rust? (
- dev-python/trustme[${PYTHON_USEDEP}]
- )
- )
-"
-
-DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_prepare() {
- # increase the timeout a little
- sed -e '/abs=/s/0.001/0.01/' -i tests/test_helpers.py || die
- # xfail_strict fails on py3.10
- sed -i -e '/--cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
-
- distutils-r1_src_prepare
-}
-
-python_configure_all() {
- # workaround missing files
- mkdir tools || die
- > requirements/cython.txt || die
- > tools/gen.py || die
- chmod +x tools/gen.py || die
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- # proxy is not packaged
- tests/test_proxy_functional.py
- # python_on_whales is not packaged
- tests/autobahn/test_autobahn.py
- )
-
- local EPYTEST_DESELECT=(
- # Internet
- tests/test_client_session.py::test_client_session_timeout_zero
- # broken by irrelevant deprecation warnings
- tests/test_circular_imports.py::test_no_warnings
- )
-
- case ${EPYTHON} in
- pypy3)
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch,
- # sigh
- local -x AIOHTTP_NO_EXTENSIONS=1
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_mock,xdist.plugin
- rm -rf aiohttp || die
- epytest -m "not internal and not dev_mode" \
- -p rerunfailures --reruns=5
-}
diff --git a/dev-python/aiohttp/aiohttp-3.10.4.ebuild b/dev-python/aiohttp/aiohttp-3.10.4.ebuild
deleted file mode 100644
index c8ebadae0b89..000000000000
--- a/dev-python/aiohttp/aiohttp-3.10.4.ebuild
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="HTTP client/server for asyncio"
-HOMEPAGE="
- https://github.com/aio-libs/aiohttp/
- https://pypi.org/project/aiohttp/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
-IUSE="test-rust"
-
-RDEPEND="
- >=dev-python/aiodns-3.2.0[${PYTHON_USEDEP}]
- >=dev-python/aiohappyeyeballs-2.3.0[${PYTHON_USEDEP}]
- >=dev-python/aiosignal-1.1.2[${PYTHON_USEDEP}]
- >=dev-python/attrs-17.3.0[${PYTHON_USEDEP}]
- dev-python/brotlicffi[${PYTHON_USEDEP}]
- >=dev-python/frozenlist-1.1.1[${PYTHON_USEDEP}]
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.0[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- <dev-python/async-timeout-5[${PYTHON_USEDEP}]
- >=dev-python/async-timeout-4.0[${PYTHON_USEDEP}]
- ' 3.10)
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- dev-python/freezegun[${PYTHON_USEDEP}]
- www-servers/gunicorn[${PYTHON_USEDEP}]
- dev-python/pytest-mock[${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- dev-python/re-assert[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- dev-python/time-machine[${PYTHON_USEDEP}]
- ' 'python3*')
- test-rust? (
- dev-python/trustme[${PYTHON_USEDEP}]
- )
- )
-"
-
-DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_prepare() {
- # increase the timeout a little
- sed -e '/abs=/s/0.001/0.01/' -i tests/test_helpers.py || die
- # xfail_strict fails on py3.10
- sed -i -e '/--cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
-
- distutils-r1_src_prepare
-}
-
-python_configure_all() {
- # workaround missing files
- mkdir tools || die
- > requirements/cython.txt || die
- > tools/gen.py || die
- chmod +x tools/gen.py || die
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- # proxy is not packaged
- tests/test_proxy_functional.py
- # python_on_whales is not packaged
- tests/autobahn/test_autobahn.py
- )
-
- local EPYTEST_DESELECT=(
- # Internet
- tests/test_client_session.py::test_client_session_timeout_zero
- # broken by irrelevant deprecation warnings
- tests/test_circular_imports.py::test_no_warnings
- )
-
- case ${EPYTHON} in
- pypy3)
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch,
- # sigh
- local -x AIOHTTP_NO_EXTENSIONS=1
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_mock,xdist.plugin
- rm -rf aiohttp || die
- epytest -m "not internal and not dev_mode" \
- -p rerunfailures --reruns=5
-}
diff --git a/dev-python/aiohttp/aiohttp-3.10.5.ebuild b/dev-python/aiohttp/aiohttp-3.10.5.ebuild
index c8ebadae0b89..d23d110c71a7 100644
--- a/dev-python/aiohttp/aiohttp-3.10.5.ebuild
+++ b/dev-python/aiohttp/aiohttp-3.10.5.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="test-rust"
RDEPEND="
diff --git a/dev-python/aiohttp/files/aiohttp-3.10.1-py313.patch b/dev-python/aiohttp/files/aiohttp-3.10.1-py313.patch
deleted file mode 100644
index 03299a43a3c5..000000000000
--- a/dev-python/aiohttp/files/aiohttp-3.10.1-py313.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 02961d854c8f4277219699cd66970d1e90b371d4 Mon Sep 17 00:00:00 2001
-From: Steve Repsher <steverep@users.noreply.github.com>
-Date: Wed, 7 Aug 2024 07:51:50 -0400
-Subject: [PATCH] Fix monkey patches for pathlib changes in Python 3.13 (#8619)
-
-(cherry picked from commit d1c8dfbb11ea9989446e295fcee350255d5461c0)
----
- CHANGES/8551.contrib.rst | 1 +
- tests/test_web_urldispatcher.py | 8 ++++----
- 2 files changed, 5 insertions(+), 4 deletions(-)
- create mode 100644 CHANGES/8551.contrib.rst
-
-diff --git a/tests/test_web_urldispatcher.py b/tests/test_web_urldispatcher.py
-index a799f4ba146..de44ea0648c 100644
---- a/tests/test_web_urldispatcher.py
-+++ b/tests/test_web_urldispatcher.py
-@@ -434,10 +434,10 @@ def mock_iterdir(self: pathlib.Path) -> Generator[pathlib.Path, None, None]:
- raise PermissionError()
- return real_iterdir(self)
-
-- def mock_is_dir(self: pathlib.Path) -> bool:
-+ def mock_is_dir(self: pathlib.Path, **kwargs: Any) -> bool:
- if my_dir.samefile(self.parent):
- raise PermissionError()
-- return real_is_dir(self)
-+ return real_is_dir(self, **kwargs)
-
- monkeypatch.setattr("pathlib.Path.iterdir", mock_iterdir)
- monkeypatch.setattr("pathlib.Path.is_dir", mock_is_dir)
-@@ -554,8 +554,8 @@ async def test_access_mock_special_resource(
- real_result = my_special.stat()
- real_stat = pathlib.Path.stat
-
-- def mock_stat(self: pathlib.Path) -> os.stat_result:
-- s = real_stat(self)
-+ def mock_stat(self: pathlib.Path, **kwargs: Any) -> os.stat_result:
-+ s = real_stat(self, **kwargs)
- if os.path.samestat(s, real_result):
- mock_mode = S_IFIFO | S_IMODE(s.st_mode)
- s = os.stat_result([mock_mode] + list(s)[1:])
-From 75ff8e12d0c95af9347bb16de785d028930f7228 Mon Sep 17 00:00:00 2001
-From: Steve Repsher <steverep@users.noreply.github.com>
-Date: Thu, 8 Aug 2024 10:55:35 -0400
-Subject: [PATCH] Fix response to circular symlinks with Python v3.13 (#8642)
-
-Co-authored-by: J. Nick Koston <nick@koston.org>
-(cherry picked from commit e494277110e40fb5c1cc65a1558dfea7d8ae7ca8)
----
- CHANGES/8565.bugfix.rst | 1 +
- aiohttp/web_fileresponse.py | 4 +++-
- aiohttp/web_urldispatcher.py | 9 +++++----
- 3 files changed, 9 insertions(+), 5 deletions(-)
- create mode 100644 CHANGES/8565.bugfix.rst
-
-diff --git a/aiohttp/web_fileresponse.py b/aiohttp/web_fileresponse.py
-index 7fc5b3d787f..d8bbbe08993 100644
---- a/aiohttp/web_fileresponse.py
-+++ b/aiohttp/web_fileresponse.py
-@@ -191,7 +191,9 @@ async def prepare(self, request: "BaseRequest") -> Optional[AbstractStreamWriter
- file_path, st, file_encoding = await loop.run_in_executor(
- None, self._get_file_path_stat_encoding, accept_encoding
- )
-- except FileNotFoundError:
-+ except OSError:
-+ # Most likely to be FileNotFoundError or OSError for circular
-+ # symlinks in python >= 3.13, so respond with 404.
- self.set_status(HTTPNotFound.status_code)
- return await super().prepare(request)
-
-diff --git a/aiohttp/web_urldispatcher.py b/aiohttp/web_urldispatcher.py
-index 688946626fd..558fb7d0c9b 100644
---- a/aiohttp/web_urldispatcher.py
-+++ b/aiohttp/web_urldispatcher.py
-@@ -80,9 +80,9 @@
- BaseDict = dict
-
- CIRCULAR_SYMLINK_ERROR = (
-- OSError
-+ (OSError,)
- if sys.version_info < (3, 10) and sys.platform.startswith("win32")
-- else RuntimeError
-+ else (RuntimeError,) if sys.version_info < (3, 13) else ()
- )
-
- YARL_VERSION: Final[Tuple[int, ...]] = tuple(map(int, yarl_version.split(".")[:2]))
-@@ -694,8 +694,9 @@ def _resolve_path_to_response(self, unresolved_path: Path) -> StreamResponse:
- else:
- file_path = unresolved_path.resolve()
- file_path.relative_to(self._directory)
-- except (ValueError, CIRCULAR_SYMLINK_ERROR) as error:
-- # ValueError for relative check; RuntimeError for circular symlink.
-+ except (ValueError, *CIRCULAR_SYMLINK_ERROR) as error:
-+ # ValueError is raised for the relative check. Circular symlinks
-+ # raise here on resolving for python < 3.13.
- raise HTTPNotFound() from error
-
- # if path is a directory, return the contents if permitted. Note the
diff --git a/dev-python/attrs/attrs-24.2.0.ebuild b/dev-python/attrs/attrs-24.2.0.ebuild
index fb4588967623..008c35b610a5 100644
--- a/dev-python/attrs/attrs-24.2.0.ebuild
+++ b/dev-python/attrs/attrs-24.2.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
BDEPEND="
>=dev-python/hatch-fancy-pypi-readme-23.2.0[${PYTHON_USEDEP}]
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index 8647558efbff..73ec8d982f45 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -5,3 +5,4 @@ DIST boto3-1.35.1.gh.tar.gz 852178 BLAKE2B c1706b6f22fec5046ec0653a87be74113ed80
DIST boto3-1.35.2.gh.tar.gz 852524 BLAKE2B 28a0408e2187952eb8f9f0e37de105007e6c4d0f11358c8ccc5246a8798b24f1472eaa788e3268c9e9fe9888953d6ab323e337e5d4a53179cd4bbd26c1776e89 SHA512 7b25f6ab5b29789e1b90f888f74708ade430e5c9f746346fb4ba0aa15f6ab55d892a9331d4c3e06fab5c683c2e0d7745c8adf10a6a259398f8fb88b1dafe52f1
DIST boto3-1.35.3.gh.tar.gz 853055 BLAKE2B 2dd22a7e4285574781b2c2eb9a0f706f736d892e7dff7e5846a8fcca504b29fbdc75525178395084698a7fea43e797c1aa9d29077738913a7a3855095fce424b SHA512 98ce858ea952ffb7070b626b6b53edfa2f6ba0ad8f9d3cde784fc4cca8fd2586c0c7934a41527d8623482a3f787dc43f479ad1e16aa3ecd48beba30c0f5e236e
DIST boto3-1.35.4.gh.tar.gz 853655 BLAKE2B f2356cf47b5460499b324f0241cae4faa0a206d3e046803c5c5d3085deefbaabeebdd57ea645627daa967c0e8e1c29f0e741ba44240a6ce0e49c7e3cd5d4139f SHA512 31efa31f05729010c48c7b0b1a4baeecc3d5467916242d2d56e78109bc79580bade2d42693e6eb25f1924a595c4d29968cfe53e6967bd507c43ca65438b8b9c4
+DIST boto3-1.35.5.gh.tar.gz 854016 BLAKE2B f94d738e310725cd5f9c7b405a094155f3ecf640f02045662ed94ab3689ea549fde7eee19ae2be450768560ad705b8740fda78b79ed42cf536231626d247e09a SHA512 fc1106abbb306bacb80dce825bf71303e71b0d0698d7e3bb4dcaca4ea6e4f7a97e70753367200294f334b351e764bca57f2316afec854d2e46db4644dfefc25b
diff --git a/dev-python/boto3/boto3-1.35.5.ebuild b/dev-python/boto3/boto3-1.35.5.ebuild
new file mode 100644
index 000000000000..509842b2699d
--- /dev/null
+++ b/dev-python/boto3/boto3-1.35.5.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+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 ~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.10.0[${PYTHON_USEDEP}]
+"
+
+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() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/botocore/Manifest b/dev-python/botocore/Manifest
index 350cc01f128d..705a47280533 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -5,3 +5,4 @@ DIST botocore-1.35.1.gh.tar.gz 13301129 BLAKE2B 70c99036e54331a63107c5c031cd32c5
DIST botocore-1.35.2.gh.tar.gz 13303549 BLAKE2B a93f708264e5d4332d4a63b11e57ea9575913e09cd5e2f0a23d050625e185f985c56bdc2652f2362bbdd037a74d2229c3998185cc96ba468bf2669f2dac4d773 SHA512 7f2309967c6c18445d122164d84951e7d602253388967dcf517e3b6bebe3a262eb0473181ce9145aefefefc2e9456aac05b321ec1b59fa08c162fced85a7dfe2
DIST botocore-1.35.3.gh.tar.gz 13297160 BLAKE2B 930687ad4c327ab4aa964abf5b39729f766db5585e233d26635f02891c1e57f2c49ef3ee4029f4144757256f80038e196e02a5b98ebe4f344b78b8ecd38a52a1 SHA512 f65c211698d904db43605be3b979ab2c5a84219ae96cdd20ed0e044b9a6040cbb79a656c64c0396ba75cc5d7625255786596e629f4465088da0f5c143337199c
DIST botocore-1.35.4.gh.tar.gz 13300517 BLAKE2B e965ae2b82f85f47b89cff92efe40970696f70ff0ddd5dc12722f933da71218a97e9a38cbf9d6c0f54fbbcb7f9068aeca6d1a2436f4e1b84c01ea28bd2cbd6c5 SHA512 d617a2ddc45a7e651f2983edf315ffa9ddbe37769e5c01953b5908f2c87f1167df966ece8fa7e649833dd3f3ea38a5f4ecf9a2b0a9f16103b311c73e4219b598
+DIST botocore-1.35.5.gh.tar.gz 13303437 BLAKE2B 0a95351fbc93074bb0398871773120a194fe581a26f9a74c1101a5ea57bb3acb9a33937fc2d5a39a065988cdcc6dbe253bd2227cf93e670602ccc67ab82d8845 SHA512 5527420017a4a23d5593f5b3a0eb8caf15357642ed90cd73e0fe22774cc8f9f3637028286063e3e2810e5dafe52e882928269e5c82f6369be9af99bef18fb365
diff --git a/dev-python/botocore/botocore-1.35.5.ebuild b/dev-python/botocore/botocore-1.35.5.ebuild
new file mode 100644
index 000000000000..64a61a30c80b
--- /dev/null
+++ b/dev-python/botocore/botocore-1.35.5.ebuild
@@ -0,0 +1,76 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+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 ~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_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
+ )
+
+ case ${EPYTHON} in
+ python3.13)
+ EPYTEST_DESELECT+=(
+ # memory use tests, probably fragile
+ tests/functional/leak/test_resource_leaks.py::TestDoesNotLeakMemory
+ )
+ ;;
+ esac
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/fakeredis/fakeredis-2.23.5.ebuild b/dev-python/fakeredis/fakeredis-2.23.5.ebuild
index be1ddff28688..9b1f90ad6ceb 100644
--- a/dev-python/fakeredis/fakeredis-2.23.5.ebuild
+++ b/dev-python/fakeredis/fakeredis-2.23.5.ebuild
@@ -16,7 +16,7 @@ HOMEPAGE="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
+KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 ~riscv ~sparc x86"
RDEPEND="
dev-python/packaging[${PYTHON_USEDEP}]
diff --git a/dev-python/flake8/flake8-7.1.1.ebuild b/dev-python/flake8/flake8-7.1.1.ebuild
index e984968fb1cf..3bf457fda05f 100644
--- a/dev-python/flake8/flake8-7.1.1.ebuild
+++ b/dev-python/flake8/flake8-7.1.1.ebuild
@@ -20,7 +20,7 @@ SRC_URI="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-macos"
RDEPEND="
=dev-python/pyflakes-3.2*[${PYTHON_USEDEP}]
diff --git a/dev-python/griffe/Manifest b/dev-python/griffe/Manifest
index 151a5a78399f..4d84786d621a 100644
--- a/dev-python/griffe/Manifest
+++ b/dev-python/griffe/Manifest
@@ -1 +1,2 @@
DIST griffe-1.1.0.gh.tar.gz 379874 BLAKE2B 452d98f1248866ee159229aec84bc99f7f83bc9c22505c809ea0de2b9bf6342ffddae42f694c30a2b696de081a34d886e42270a1c6a68aedc5a9f544112889da SHA512 a443c3094c4044b58537b5fa781610d99e26be195df216b74a097257596f52ecc7021ba5fb504c82f7960154b8d3a00fa05cc63526e538291486e915ef44cc51
+DIST griffe-1.2.0.gh.tar.gz 382642 BLAKE2B a9db18e6cca59d85f8af61cde0fe5bf622d8804a6fa12d4128b4b52dbf8d7478b06aa5b746ce97cd3398550a926029fcc7096e5ae95f918e652a8295d9fb60e7 SHA512 334d4d08dfab5d8b24020e2901ab71a624478d1d84025123e85dc9ea6768bd51681788983c2328e2c9296fe36b9304512657577c7c12b6a6196363eb965b473d
diff --git a/dev-python/griffe/griffe-1.2.0.ebuild b/dev-python/griffe/griffe-1.2.0.ebuild
new file mode 100644
index 000000000000..ef4b909e872e
--- /dev/null
+++ b/dev-python/griffe/griffe-1.2.0.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=pdm-backend
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+inherit distutils-r1
+
+DESCRIPTION="Signature generator for Python programs"
+HOMEPAGE="
+ https://mkdocstrings.github.io/griffe/
+ https://github.com/mkdocstrings/griffe/
+ https://pypi.org/project/griffe/
+"
+# Tests need files absent from the PyPI tarballs
+SRC_URI="
+ https://github.com/mkdocstrings/griffe/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~riscv"
+
+RDEPEND="
+ >=dev-python/colorama-0.4[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ >=dev-python/backports-strenum-1.3[${PYTHON_USEDEP}]
+ ' 3.10)
+"
+BDEPEND="
+ test? (
+ >=dev-python/jsonschema-4.17[${PYTHON_USEDEP}]
+ dev-python/mkdocstrings[${PYTHON_USEDEP}]
+ >=dev-python/pytest-xdist-2.4[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+export PDM_BUILD_SCM_VERSION=${PV}
+
+EPYTEST_DESELECT=(
+ # fragile to installed packages
+ # (failed on PySide2 for me)
+ tests/test_stdlib.py::test_fuzzing_on_stdlib
+)
diff --git a/dev-python/idna/Manifest b/dev-python/idna/Manifest
index ca35c4d0d260..f43706396df4 100644
--- a/dev-python/idna/Manifest
+++ b/dev-python/idna/Manifest
@@ -1 +1,2 @@
DIST idna-3.7.tar.gz 189575 BLAKE2B b604f5e69775b6052e3358a31ea0154832264979a992db51130a0f0e7c5ef9163e97e15956cfd599212ba233c789706a4a2ea8051c3baeda5abc3657bdf40902 SHA512 b50e5ae117b67c7076125d6943e3436200676f85d7dd1b5a5414e217e73904ef077f0b1108d9781ab4afe2a66f7c9e1ce8262ce51edeb2d29e4c504147b6c4cc
+DIST idna-3.8.tar.gz 189467 BLAKE2B e70c754f3a76807d2df9df09b19ec9ea8e98de19f81741dfbb2f828ebd0ac6385e2c0d2fab83206b4c592b40f0b785ed0078eafc0d0339cd9ff53440051c511d SHA512 5ea57a0e21621722375b8b3b90831c1e367f738d7d96d27143990d25ef26d374bcd306956a785ebe6283445642c39b8f655ab4de4b407055e350d11012acdb62
diff --git a/dev-python/idna/idna-3.8.ebuild b/dev-python/idna/idna-3.8.ebuild
new file mode 100644
index 000000000000..dd4a29b5158b
--- /dev/null
+++ b/dev-python/idna/idna-3.8.ebuild
@@ -0,0 +1,22 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# please keep this ebuild at EAPI 8 -- sys-apps/portage dep
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Internationalized Domain Names in Applications (IDNA)"
+HOMEPAGE="
+ https://github.com/kjd/idna/
+ https://pypi.org/project/idna/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+
+distutils_enable_tests unittest
diff --git a/dev-python/jaraco-vcs/jaraco-vcs-2.4.0.ebuild b/dev-python/jaraco-vcs/jaraco-vcs-2.4.0.ebuild
index ff28ef47fa25..c04d5dce2dd5 100644
--- a/dev-python/jaraco-vcs/jaraco-vcs-2.4.0.ebuild
+++ b/dev-python/jaraco-vcs/jaraco-vcs-2.4.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~mips ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
dev-python/jaraco-classes[${PYTHON_USEDEP}]
diff --git a/dev-python/more-itertools/more-itertools-10.4.0.ebuild b/dev-python/more-itertools/more-itertools-10.4.0.ebuild
index 8068c1213f82..499d07adf913 100644
--- a/dev-python/more-itertools/more-itertools-10.4.0.ebuild
+++ b/dev-python/more-itertools/more-itertools-10.4.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
distutils_enable_sphinx docs \
dev-python/sphinx-rtd-theme
diff --git a/dev-python/myst-parser/myst-parser-4.0.0.ebuild b/dev-python/myst-parser/myst-parser-4.0.0.ebuild
index a12bea9a7b4c..e8bcc028b83f 100644
--- a/dev-python/myst-parser/myst-parser-4.0.0.ebuild
+++ b/dev-python/myst-parser/myst-parser-4.0.0.ebuild
@@ -22,7 +22,7 @@ S=${WORKDIR}/${MY_P}
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
>=dev-python/docutils-0.18[${PYTHON_USEDEP}]
diff --git a/dev-python/numpydoc/numpydoc-1.8.0.ebuild b/dev-python/numpydoc/numpydoc-1.8.0.ebuild
index 1346548324a1..20335b7b5674 100644
--- a/dev-python/numpydoc/numpydoc-1.8.0.ebuild
+++ b/dev-python/numpydoc/numpydoc-1.8.0.ebuild
@@ -23,7 +23,7 @@ S=${WORKDIR}/${MY_P}
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-macos"
RDEPEND="
>=dev-python/sphinx-6[${PYTHON_USEDEP}]
diff --git a/dev-python/oslo-utils/oslo-utils-7.3.0.ebuild b/dev-python/oslo-utils/oslo-utils-7.3.0.ebuild
index 7094b6782882..f901af6b32f3 100644
--- a/dev-python/oslo-utils/oslo-utils-7.3.0.ebuild
+++ b/dev-python/oslo-utils/oslo-utils-7.3.0.ebuild
@@ -33,9 +33,11 @@ RDEPEND="
>=dev-python/pyyaml-3.13[${PYTHON_USEDEP}]
dev-python/tzdata[${PYTHON_USEDEP}]
"
+# qemu needed for qemu-img
BDEPEND="
>=dev-python/pbr-2.2.0[${PYTHON_USEDEP}]
test? (
+ app-emulation/qemu
>=dev-python/fixtures-3.0.0[${PYTHON_USEDEP}]
>=dev-python/testscenarios-0.4[${PYTHON_USEDEP}]
>=dev-python/testtools-2.2.0[${PYTHON_USEDEP}]
diff --git a/dev-python/pikepdf/Manifest b/dev-python/pikepdf/Manifest
index f15cccc4185e..848cef598828 100644
--- a/dev-python/pikepdf/Manifest
+++ b/dev-python/pikepdf/Manifest
@@ -6,3 +6,4 @@ DIST pikepdf-9.0.0.tar.gz 2868331 BLAKE2B 6735938fd2c0e8bb6a5fb40896350a2caa2ee2
DIST pikepdf-9.1.0.tar.gz 2869103 BLAKE2B 39750e280caa2393b69a5c3c841afa9cbb0d5701a20ae9ca4e9a57088cae47e2dd33ca8b605b0b096df131b578a4cdc71eb8696d12b2817426b35a8b13668460 SHA512 0fbf1ca151b6a234cd23a5148c9e8e4e033c5da5c935b4786fe6167555da7016c55b124dd2f9e8dc414c9782829f38412227820229a8459cc9dbe03220620fae
DIST pikepdf-9.1.1.tar.gz 2869514 BLAKE2B b196a61d599db1355695d40ac69e09ea7a020cb10c246685792b7f6f7854b5dce63dd2f675a542fa256ac713c7a7ce49ba7ddd248fbe901fe267641df399ca74 SHA512 0b3c2c89d9226212806791e00470c2c64147f0738d26bfe9c5288414cf515760213e3cdc70a62ef3f53a0ee43b7d8e2cc0076f14fe22bdbac2ff50e0a8984164
DIST pikepdf-9.1.2.tar.gz 2869865 BLAKE2B 74b64d628f12a5335a9dfbe2e15fbbd0a39e266100bcc8b33e94c954aab91150f46649b181bf049cd1084a6d2412ea9485cc57d4d6a23a4678a5ea55ebbb7357 SHA512 676d68f05a506b6aa69e1b01d03164de6731d17b48d2cd4b123221ebe27aef04a75d458c897c53d504a0b3aa7d0bc3e78aaf707a3cfdcdf8d31ee5e537188bd3
+DIST pikepdf-9.2.0.tar.gz 2905389 BLAKE2B f38335075db489007eba582d57a72fd5fa268f89105dc528131c14d53547673cbffa96b376ba27e9b04dac3bab6770e80bb0ac865e7549eb1c00e4ea4eb3ba27 SHA512 0e2c5e647ccb24691c11eeb41569a8f7250fb8ca55a5c76aa1ae250c9fc49cd2bfe73db6f599928b14d46a678ef71b6e6f430e134d9891139176b90a2f853e17
diff --git a/dev-python/pikepdf/pikepdf-9.2.0.ebuild b/dev-python/pikepdf/pikepdf-9.2.0.ebuild
new file mode 100644
index 000000000000..3c731f55555c
--- /dev/null
+++ b/dev-python/pikepdf/pikepdf-9.2.0.ebuild
@@ -0,0 +1,74 @@
+# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python library to work with pdf files based on qpdf"
+HOMEPAGE="
+ https://github.com/pikepdf/pikepdf/
+ https://pypi.org/project/pikepdf/
+"
+
+LICENSE="MPL-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian"
+
+# Check QPDF_MIN_VERSION in pyproject.toml on bumps, as well as
+# https://qpdf.readthedocs.io/en/stable/release-notes.html.
+DEPEND="
+ >=app-text/qpdf-11.5.0:0=
+"
+RDEPEND="
+ ${DEPEND}
+ dev-python/deprecated[${PYTHON_USEDEP}]
+ >=dev-python/lxml-4.0[${PYTHON_USEDEP}]
+ dev-python/packaging[${PYTHON_USEDEP}]
+ >=dev-python/pillow-10.0.1[lcms,${PYTHON_USEDEP}]
+"
+BDEPEND="
+ >=dev-python/pybind11-2.12.0[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-scm-7.0.5[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/attrs-20.2.0[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-6.36[${PYTHON_USEDEP}]
+ >=dev-python/numpy-1.21.0[${PYTHON_USEDEP}]
+ >=dev-python/pillow-5.0.0[${PYTHON_USEDEP},jpeg,lcms,tiff]
+ >=dev-python/psutil-5.9[${PYTHON_USEDEP}]
+ >=dev-python/pytest-timeout-2.1.0[${PYTHON_USEDEP}]
+ >=dev-python/python-dateutil-2.8.1[${PYTHON_USEDEP}]
+ !big-endian? (
+ >=dev-python/python-xmp-toolkit-2.0.1[${PYTHON_USEDEP}]
+ )
+ $(python_gen_cond_dep '
+ dev-python/tomli[${PYTHON_USEDEP}]
+ ' 3.10)
+ media-libs/tiff[zlib]
+ )
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ sed -e '/-n auto/d' -i pyproject.toml || die
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # fragile to system load
+ tests/test_image_access.py::test_random_image
+ tests/test_image_access.py::test_image_save_compare
+ tests/test_image_access.py::test_palette_nonrgb
+ )
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest -p timeout
+}
diff --git a/dev-python/pycares/pycares-4.4.0.ebuild b/dev-python/pycares/pycares-4.4.0.ebuild
index 049943087454..f0b146656a3c 100644
--- a/dev-python/pycares/pycares-4.4.0.ebuild
+++ b/dev-python/pycares/pycares-4.4.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="amd64 ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="test"
# Tests fail with network-sandbox, since they try to resolve google.com
PROPERTIES="test_network"
diff --git a/dev-python/pypy3_10/Manifest b/dev-python/pypy3_10/Manifest
index 854cda346ab1..dee49a4201ab 100644
--- a/dev-python/pypy3_10/Manifest
+++ b/dev-python/pypy3_10/Manifest
@@ -1,3 +1,4 @@
DIST pypy3.10-gentoo-patches-7.3.16.tar.xz 4752 BLAKE2B a5cd87f30c0b20bf5d49c3b5c979c12231d6b67750e777d4488093094d5998e6f0d9adba51c04704eb31d621089aeb12ee5a6b0a58dad0ecda0d60d2ecbdab6d SHA512 e2779841a3e56e384134416ce2a10e1e00a11d7c720023506370fb9f54363da6b7300b4019c121aa1874152b62d9679ebcd3dd679fd0dbd2bf524520990b6f38
DIST pypy3.10-gentoo-patches-7.3.16_p1.tar.xz 7696 BLAKE2B d51dd45ec0fd2fd2d8e8f6afb6fdb227268d86ca03885991c085aa3b374bdbe01c909cd9c25981a89955c3fcfaf258f09470b5a5649b9235a74f37dadb9a891e SHA512 b71168518a103cccff4740efb51dfad4eaaf647d81aff727805f5ee9e2fdc6971749b69c17c72e7fd04c97bbf37777180870eb17077fb742f20130b4b00ed712
+DIST pypy3.10-gentoo-patches-7.3.16_p2.tar.xz 10348 BLAKE2B 93b2672e935e4a23e9fff70848f377211b4a0aff55384ffac59ba3b376af9d1ab1d1b3529a5148490dd6e8da55cc038390efa7e4120c60c7ea77d158da88b5bf SHA512 0bff294d8a0ed576204c00ef7befec0c960cef50eaf1130056aaed2a5dac63a8045db977c5fb4ff9c5eb1863e8df2cb9f4d608ab88cd6ffcc8bd4ab13f5d6ab2
DIST pypy3.10-v7.3.16-src.tar.bz2 23358556 BLAKE2B 4eddae47dea1005b9450b9d3d23bd90782dffecdc252eff4fd3195a61e0e7ebbdafaf4c4b5d318c88534f152c1110c3bc4f76f43a7e711a859dd4330841a0e0b SHA512 5b941e3b5c7b0c7a50413e16122bad3e167dcc4ee159ce53e9716e9d5af79d600823f3d7442b7562bb568ff027723e22904fc0840dc06bd26e3da38c93cc5b94
diff --git a/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild b/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild
new file mode 100644
index 000000000000..f4c610dc7626
--- /dev/null
+++ b/dev-python/pypy3_10/pypy3_10-7.3.16_p2.ebuild
@@ -0,0 +1,212 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multiprocessing pax-utils toolchain-funcs
+
+PYPY_PV=${PV%_p*}
+PYVER=3.10
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://www.pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.bz2
+ https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy3 -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))'
+# also check pypy/interpreter/pycode.py -> pypy_incremental_magic
+SLOT="0/pypy310-pp73-384"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="+ensurepip gdbm +jit ncurses sqlite tk"
+# many tests are failing upstream
+# see https://buildbot.pypy.org/summary?branch=py${PYVER}
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?]
+ >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV}
+ )
+ dev-lang/python-exec[python_targets_pypy3(-)]
+ dev-libs/openssl:0=
+ dev-python/gentoo-common
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ mkdir bin || die
+ # switch to the layout expected for cffi module builds
+ mkdir include/pypy${PYVER} || die
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}"/usr/bin/pypy${PYVER}-c-${PYPY_PV} pypy${PYVER}-c || die
+ cp -p "${BROOT}"/usr/include/pypy${PYVER}/${PYPY_PV}/* include/pypy${PYVER}/ || die
+ # (not installed by pypy-exe)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* include/pypy${PYVER}/ || die
+ mv pypy/module/cpyext/parse/*.h include/pypy${PYVER}/ || die
+ pax-mark m pypy${PYVER}-c
+
+ # verify the subslot
+ local soabi=$(
+ ./pypy${PYVER}-c - <<-EOF
+ import importlib.util
+ import sysconfig
+ soabi = sysconfig.get_config_var("SOABI")
+ magic = importlib.util._RAW_MAGIC_NUMBER & 0xffff
+ print(f"{soabi}-{magic}")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ # Add epython.py to the distribution
+ echo 'EPYTHON="pypy3"' > lib-python/3/epython.py || die
+
+ einfo "Generating caches and CFFI modules ..."
+
+ # Generate sysconfig data
+ local host_gnu_type=$(sh pypy/tool/release/config.guess)
+ local overrides=(
+ HOST_GNU_TYPE "${host_gnu_type:-unknown}"
+ INCLUDEPY "${EPREFIX}/usr/include/pypy${PYVER}"
+ LIBDIR "${EPREFIX}/usr/$(get_libdir)"
+ TZPATH "${EPREFIX}/usr/share/zoneinfo"
+ WHEEL_PKG_DIR "${EPREFIX}/usr/lib/python/ensurepip"
+ )
+ ./pypy${PYVER}-c -m sysconfig --generate-posix-vars "${overrides[@]}" || die
+ local outdir
+ outdir=$(<pybuilddir.txt) || die
+ cp "${outdir}"/_sysconfigdata__*.py lib-python/3/ || die
+
+ # Generate Grammar and PatternGrammar pickles.
+ ./pypy${PYVER}-c - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with lib_pypy/pypy_tools/build_cffi_imports.py!
+ # (NB: we build CFFI modules first to avoid error log when importing
+ # build_cffi_imports).
+ cffi_targets=(
+ pypy_util blake2/_blake2 sha3/_sha3 ssl
+ audioop syslog pwdgrp resource lzma posixshmem
+ ctypes_test testmultiphase
+ )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ ../pypy${PYVER}-c "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+ # testcapi does not have a "build" script
+ ../pypy${PYVER}-c -c "import _testcapi" || die
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=a4138e48
+ local local_cksum=$(
+ ../pypy${PYVER}-c - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x).encode()),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find \( -name "*_cffi.c" -o -name '*.o' \) -delete || die
+ find -type d -empty -delete || die
+}
+
+src_install() {
+ einfo "Installing PyPy ..."
+ dodir /usr/bin
+ dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER}
+ insinto /usr/lib/pypy${PYVER}
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ doins -r lib-python/3/. lib_pypy/.
+ insinto /usr/include
+ doins -r include/pypy${PYVER}
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}"/usr/include/pypy${PYVER}/${PYPY_PV}/*; do
+ dosym "${PYPY_PV}/${x##*/}" "/usr/include/pypy${PYVER}/${x##*/}"
+ done
+
+ dodoc README.rst
+
+ local dest=/usr/lib/pypy${PYVER}
+ rm -r "${ED}${dest}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${ED}${dest}"/ensurepip || die
+ fi
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/_gdbm* || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/sqlite3 \
+ "${ED}${dest}"/_sqlite3* \
+ "${ED}${dest}"/test/test_sqlite.py || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/{idlelib,tkinter} \
+ "${ED}${dest}"/_tkinter \
+ "${ED}${dest}"/test/test_{tcl,tk,ttk*}.py || die
+ fi
+ dosym ../python/EXTERNALLY-MANAGED "${dest}/EXTERNALLY-MANAGED"
+
+ local -x PYTHON=${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ # exclude list from CPython Makefile.pre.in
+ "${PYTHON}" -m compileall -j "$(makeopts_jobs)" -o 0 -o 1 -o 2 \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ --hardlink-dupes -q -f -d "${dest}" "${ED}${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+}
diff --git a/dev-python/pypy3_9/Manifest b/dev-python/pypy3_9/Manifest
index 6ede3b808949..007ae09b8f73 100644
--- a/dev-python/pypy3_9/Manifest
+++ b/dev-python/pypy3_9/Manifest
@@ -1,3 +1,4 @@
DIST pypy3.9-gentoo-patches-7.3.16.tar.xz 5764 BLAKE2B 094740bc594bc63648bba997e2a8a8eddd857e6f63594fc3d5f3bca9e74bce101ab56ddf59afd75d62e91c17d89271d7f8b52da6b19adf480dd9fab9f0c6dc2c SHA512 efbe3ac941be19b270336e7b31999114d4334cfd3cc0ab5f2499e41825a51bc7c005e10302114813741772ae0412466c000ab33b64f01d639d5689460f8befcb
DIST pypy3.9-gentoo-patches-7.3.16_p1.tar.xz 8688 BLAKE2B 8ce6eb88aaf4c6bb53046d819e641836441ba6a5d33aeaabc0cb9081f4de4be9a65997bf31ec1f4cf6fc139eb1d2deae9521d4023f0a166b1755096ef3518c7f SHA512 e6e7d3a95a8acd262f9ecd0741a2ed05efca1e4896ca3607dc63c1f74ce8179b64d0a8134dc378009ac47e1d560431ba60e944af631029262ce4300c90f5b1c1
+DIST pypy3.9-gentoo-patches-7.3.16_p2.tar.xz 11304 BLAKE2B 50c7eaf3263a66e1a9dbad9187fc83959a47a846c69ced71530ddcf853b1bc2227defb8324ee849836af701292c7742c68834f77dbe017a6c9d0c3d9e955f5f2 SHA512 cb0f911cdaf0ef1230e8bf08f9beecd64d25a383b6b0fe47217e3c1eeb0c74dc4a3080cdc4ac7fce38457620d575c408151f46258ac377dfcc38ca0fa4e60791
DIST pypy3.9-v7.3.16-src.tar.bz2 23686849 BLAKE2B 736b173d8bd6b19785e64827d289feb39e30e93caaef3071a5185cc5cbaab4aed23b9da89e34a464dad0c0d5142db9dc238a1dd221aea299f95bea2e47299a81 SHA512 bd13cddb0b4cab4e200d2eafd8239c76209a49f8e847193c5ed0fe446ca46271446fc762cafd2aa8f410d022bc65abcd48ba7148502b70b901565e187058310d
diff --git a/dev-python/pypy3_9/pypy3_9-7.3.16_p2.ebuild b/dev-python/pypy3_9/pypy3_9-7.3.16_p2.ebuild
new file mode 100644
index 000000000000..cd6b3d3e3ed8
--- /dev/null
+++ b/dev-python/pypy3_9/pypy3_9-7.3.16_p2.ebuild
@@ -0,0 +1,211 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multiprocessing pax-utils toolchain-funcs
+
+PYPY_PV=${PV%_p*}
+PYVER=3.9
+MY_P="pypy${PYVER}-v${PYPY_PV/_}"
+PATCHSET="pypy${PYVER}-gentoo-patches-${PV/_rc/rc}"
+
+DESCRIPTION="A fast, compliant alternative implementation of the Python (${PYVER}) language"
+HOMEPAGE="
+ https://www.pypy.org/
+ https://github.com/pypy/pypy/
+"
+SRC_URI="
+ https://downloads.python.org/pypy/${MY_P}-src.tar.bz2
+ https://buildbot.pypy.org/pypy/${MY_P}-src.tar.bz2
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+"
+S="${WORKDIR}/${MY_P}-src"
+
+LICENSE="MIT"
+# pypy3 -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))'
+# also check pypy/interpreter/pycode.py -> pypy_incremental_magic
+SLOT="0/pypy39-pp73-336"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="+ensurepip gdbm +jit ncurses sqlite tk"
+# many tests are failing upstream
+# see https://buildbot.pypy.org/summary?branch=py${PYVER}
+RESTRICT="test"
+
+RDEPEND="
+ || (
+ >=dev-python/${PN}-exe-${PYPY_PV}:${PYPY_PV}[bzip2(+),ncurses?]
+ >=dev-python/${PN}-exe-bin-${PYPY_PV}:${PYPY_PV}
+ )
+ dev-lang/python-exec[python_targets_pypy3(-)]
+ dev-libs/openssl:0=
+ dev-python/gentoo-common
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:0= )
+ sqlite? ( dev-db/sqlite:3= )
+ tk? (
+ dev-lang/tk:0=
+ dev-tcltk/tix:0=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+ default
+}
+
+src_configure() {
+ tc-export CC
+}
+
+src_compile() {
+ mkdir bin || die
+ # switch to the layout expected for cffi module builds
+ mkdir include/pypy${PYVER} || die
+ # copy over to make sys.prefix happy
+ cp -p "${BROOT}"/usr/bin/pypy${PYVER}-c-${PYPY_PV} pypy${PYVER}-c || die
+ cp -p "${BROOT}"/usr/include/pypy${PYVER}/${PYPY_PV}/* include/pypy${PYVER}/ || die
+ # (not installed by pypy-exe)
+ rm pypy/module/cpyext/include/_numpypy/numpy/README || die
+ mv pypy/module/cpyext/include/* include/pypy${PYVER}/ || die
+ mv pypy/module/cpyext/parse/*.h include/pypy${PYVER}/ || die
+ pax-mark m pypy${PYVER}-c
+
+ # verify the subslot
+ local soabi=$(
+ ./pypy${PYVER}-c - <<-EOF
+ import importlib.util
+ import sysconfig
+ soabi = sysconfig.get_config_var("SOABI")
+ magic = importlib.util._RAW_MAGIC_NUMBER & 0xffff
+ print(f"{soabi}-{magic}")
+ EOF
+ )
+ [[ ${soabi} == ${SLOT#*/} ]] || die "update subslot to ${soabi}"
+
+ # Add epython.py to the distribution
+ echo 'EPYTHON="pypy3"' > lib-python/3/epython.py || die
+
+ einfo "Generating caches and CFFI modules ..."
+
+ # Generate sysconfig data
+ local host_gnu_type=$(sh pypy/tool/release/config.guess)
+ local overrides=(
+ HOST_GNU_TYPE "${host_gnu_type:-unknown}"
+ INCLUDEPY "${EPREFIX}/usr/include/pypy${PYVER}"
+ LIBDIR "${EPREFIX}/usr/$(get_libdir)"
+ TZPATH "${EPREFIX}/usr/share/zoneinfo"
+ WHEEL_PKG_DIR "${EPREFIX}/usr/lib/python/ensurepip"
+ )
+ ./pypy${PYVER}-c -m sysconfig --generate-posix-vars "${overrides[@]}" || die
+ local outdir
+ outdir=$(<pybuilddir.txt) || die
+ cp "${outdir}"/_sysconfigdata__*.py lib-python/3/ || die
+
+ # Generate Grammar and PatternGrammar pickles.
+ ./pypy${PYVER}-c - <<-EOF || die "Generation of Grammar and PatternGrammar pickles failed"
+ import lib2to3.pygram
+ import lib2to3.patcomp
+ lib2to3.patcomp.PatternCompiler()
+ EOF
+
+ # Generate cffi modules
+ # Please keep in sync with lib_pypy/pypy_tools/build_cffi_imports.py!
+ # (NB: we build CFFI modules first to avoid error log when importing
+ # build_cffi_imports).
+ cffi_targets=(
+ pypy_util blake2/_blake2 sha3/_sha3 ssl
+ audioop syslog pwdgrp resource lzma posixshmem
+ ctypes_test testmultiphase
+ )
+ use gdbm && cffi_targets+=( gdbm )
+ use ncurses && cffi_targets+=( curses )
+ use sqlite && cffi_targets+=( sqlite3 )
+ use tk && cffi_targets+=( tkinter/tklib )
+
+ local t
+ # all modules except tkinter output to .
+ # tkinter outputs to the correct dir ...
+ cd lib_pypy || die
+ for t in "${cffi_targets[@]}"; do
+ # tkinter doesn't work via -m
+ ../pypy${PYVER}-c "_${t}_build.py" || die "Failed to build CFFI bindings for ${t}"
+ done
+ # testcapi does not have a "build" script
+ ../pypy${PYVER}-c -c "import _testcapi" || die
+
+ # Verify that CFFI module list is up-to-date
+ local expected_cksum=a4138e48
+ local local_cksum=$(
+ ../pypy${PYVER}-c - <<-EOF
+ import binascii
+ import json
+ from pypy_tools.build_cffi_imports import cffi_build_scripts as x
+ print("%08x" % (binascii.crc32(json.dumps(x).encode()),))
+ EOF
+ )
+ if [[ ${local_cksum} != ${expected_cksum} ]]; then
+ die "Please verify cffi_targets and update checksum to ${local_cksum}"
+ fi
+
+ # Cleanup temporary objects
+ find \( -name "*_cffi.c" -o -name '*.o' \) -delete || die
+ find -type d -empty -delete || die
+}
+
+src_install() {
+ einfo "Installing PyPy ..."
+ dodir /usr/bin
+ dosym pypy${PYVER}-c-${PYPY_PV} /usr/bin/pypy${PYVER}
+ insinto /usr/lib/pypy${PYVER}
+ # preserve mtimes to avoid obsoleting caches
+ insopts -p
+ doins -r lib-python/3/. lib_pypy/.
+ insinto /usr/include
+ doins -r include/pypy${PYVER}
+
+ # replace copied headers with symlinks
+ for x in "${BROOT}"/usr/include/pypy${PYVER}/${PYPY_PV}/*; do
+ dosym "${PYPY_PV}/${x##*/}" "/usr/include/pypy${PYVER}/${x##*/}"
+ done
+
+ dodoc README.rst
+
+ local dest=/usr/lib/pypy${PYVER}
+ rm -r "${ED}${dest}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${ED}${dest}"/ensurepip || die
+ fi
+ if ! use gdbm; then
+ rm -r "${ED}${dest}"/_gdbm* || die
+ fi
+ if ! use sqlite; then
+ rm -r "${ED}${dest}"/sqlite3 \
+ "${ED}${dest}"/_sqlite3* \
+ "${ED}${dest}"/test/test_sqlite.py || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}${dest}"/{idlelib,tkinter} \
+ "${ED}${dest}"/_tkinter \
+ "${ED}${dest}"/test/test_{tcl,tk,ttk*}.py || die
+ fi
+ dosym ../python/EXTERNALLY-MANAGED "${dest}/EXTERNALLY-MANAGED"
+
+ local -x PYTHON=${ED}/usr/bin/pypy${PYVER}-c-${PYPY_PV}
+ # temporarily copy to build tree to facilitate module builds
+ cp -p "${BROOT}/usr/bin/pypy${PYVER}-c-${PYPY_PV}" "${PYTHON}" || die
+
+ einfo "Byte-compiling Python standard library..."
+ # exclude list from CPython Makefile.pre.in
+ "${PYTHON}" -m compileall -j "$(makeopts_jobs)" -o 0 -o 1 -o 2 \
+ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ --hardlink-dupes -q -f -d "${dest}" "${ED}${dest}" || die
+
+ # remove to avoid collisions
+ rm "${PYTHON}" || die
+}
diff --git a/dev-python/pytest-asyncio/Manifest b/dev-python/pytest-asyncio/Manifest
index 891c8d8cdce1..81dbaa127c28 100644
--- a/dev-python/pytest-asyncio/Manifest
+++ b/dev-python/pytest-asyncio/Manifest
@@ -1,4 +1,2 @@
DIST pytest_asyncio-0.23.8.tar.gz 46920 BLAKE2B 6b7a66e6ef28f2c7a874a115e0346b3803051df5d57e5b8ba35480982231a804adfbe8a4a2c605847730ea940fafe9df2aa94f5081b43aa753b64c3e2ea027a5 SHA512 68f23458c5f22bdb75a6a0a12f185b1f22c5231c0cdcd84806781419f5c866844e851398d771c5932af4a42b5dfdcce6624181f2c0d2f70187bb5feed0ba7c97
DIST pytest_asyncio-0.24.0.tar.gz 49855 BLAKE2B 55813b655252f2c1fbe1658a0a2d739bb03a56794297dde9cf598b8200c0d3aa7437af7a241a821eff47ffe57841142adb93c6434c920cbd1d26b33a8ac8fe96 SHA512 abf2442afb9f5933b223e920c0b107d5781350f2a9c2e58ca141494a4f391acf97f2e377db1fc67b5213031bf371f222dc9c4718ff3c6b5985f5e49913f03cb7
-DIST pytest_asyncio-0.24.0a0.tar.gz 49299 BLAKE2B 2bc9f0a85169db463f344ed1f42dd954599c6e50a3fa3d7bf95bddb3eb162c4ddf454f512d7b1577e0d394174f52dd63664e4eec32a6106a7c2779cf955cb79a SHA512 109ff55bb3f742a246463ed650a6568833e70cd0b4ed30507efb62cf3c9eb5aa9caed960b3b1c9b92c1cb30025436e9e98e33135243a5763b2614632cbae5c8e
-DIST pytest_asyncio-0.24.0a1.tar.gz 49212 BLAKE2B d65eb2587ef865d62a8f3469165da58ca9db0ffe98b4ba02b3be36811f635aeac01457b0931fda4653ec7e8634d3dfe70e7e3b5a40be5ae7018bb8f7317fef95 SHA512 33a84c17a853a5b3c4153a178e70fa04ce3494d6f316f0a141b4d945c5052c6c336f55f7ca691423ce448d1e7535d84bc69d939cfc4544076e704a7e5b4509f7
diff --git a/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha0.ebuild b/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha0.ebuild
deleted file mode 100644
index 4aa04ac64f61..000000000000
--- a/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha0.ebuild
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2019-2024 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="Library for testing asyncio code with pytest"
-HOMEPAGE="
- https://github.com/pytest-dev/pytest-asyncio/
- https://pypi.org/project/pytest-asyncio/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
-
-RDEPEND="
- >=dev-python/pytest-5.4.0[${PYTHON_USEDEP}]
-"
-BDEPEND="
- dev-python/setuptools-scm[${PYTHON_USEDEP}]
- test? (
- >=dev-python/hypothesis-3.64[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-python_test() {
- local EPYTEST_DESELECT=(
- # rely on precise warning counts
- tests/hypothesis/test_base.py::test_can_use_explicit_event_loop_fixture
- tests/modes/test_legacy_mode.py
- tests/modes/test_strict_mode.py::test_strict_mode_ignores_unmarked_fixture
- tests/test_event_loop_fixture_finalizer.py::test_event_loop_fixture_finalizer_raises_warning_when_fixture_leaves_loop_unclosed
- tests/test_event_loop_fixture_finalizer.py::test_event_loop_fixture_finalizer_raises_warning_when_test_leaves_loop_unclosed
- tests/test_pytest_min_version_warning.py
- tests/trio/test_fixtures.py::test_strict_mode_ignores_trio_fixtures
-
- # TODO
- tests/test_is_async_test.py::test_returns_false_for_unmarked_coroutine_item_in_strict_mode
- )
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_asyncio.plugin,_hypothesis_pytestplugin
- epytest
-}
diff --git a/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha1.ebuild b/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha1.ebuild
deleted file mode 100644
index 3b07e4f76077..000000000000
--- a/dev-python/pytest-asyncio/pytest-asyncio-0.24.0_alpha1.ebuild
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2019-2024 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="Library for testing asyncio code with pytest"
-HOMEPAGE="
- https://github.com/pytest-dev/pytest-asyncio/
- https://pypi.org/project/pytest-asyncio/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
-
-RDEPEND="
- >=dev-python/pytest-8.2[${PYTHON_USEDEP}]
-"
-BDEPEND="
- dev-python/setuptools-scm[${PYTHON_USEDEP}]
- test? (
- >=dev-python/hypothesis-3.64[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-python_test() {
- local EPYTEST_DESELECT=(
- # rely on precise warning counts
- tests/hypothesis/test_base.py::test_can_use_explicit_event_loop_fixture
- tests/test_event_loop_fixture_finalizer.py::test_event_loop_fixture_finalizer_raises_warning_when_fixture_leaves_loop_unclosed
- tests/test_event_loop_fixture_finalizer.py::test_event_loop_fixture_finalizer_raises_warning_when_test_leaves_loop_unclosed
- )
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local -x PYTEST_PLUGINS=pytest_asyncio.plugin,_hypothesis_pytestplugin
- epytest
-}
diff --git a/dev-python/pytest-skip-markers/pytest-skip-markers-1.5.2.ebuild b/dev-python/pytest-skip-markers/pytest-skip-markers-1.5.2.ebuild
index f825e6a8b953..29b264ae1f15 100644
--- a/dev-python/pytest-skip-markers/pytest-skip-markers-1.5.2.ebuild
+++ b/dev-python/pytest-skip-markers/pytest-skip-markers-1.5.2.ebuild
@@ -20,7 +20,7 @@ SRC_URI="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~riscv x86"
RDEPEND="
>=dev-python/pytest-7.1.0[${PYTHON_USEDEP}]
diff --git a/dev-python/rapidfuzz/rapidfuzz-3.9.6.ebuild b/dev-python/rapidfuzz/rapidfuzz-3.9.6.ebuild
index 9904a5fa775e..8f99db53b9e8 100644
--- a/dev-python/rapidfuzz/rapidfuzz-3.9.6.ebuild
+++ b/dev-python/rapidfuzz/rapidfuzz-3.9.6.ebuild
@@ -18,7 +18,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha ~amd64 ~arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc x86"
# all these are header-only libraries
DEPEND="
diff --git a/dev-python/sabctools/sabctools-8.2.5.ebuild b/dev-python/sabctools/sabctools-8.2.5.ebuild
index ceda76ecedef..55e78fee678f 100644
--- a/dev-python/sabctools/sabctools-8.2.5.ebuild
+++ b/dev-python/sabctools/sabctools-8.2.5.ebuild
@@ -25,7 +25,7 @@ S="${WORKDIR}/${MY_P}"
LICENSE="LGPL-3"
SLOT="0"
-KEYWORDS="~amd64 ~x86"
+KEYWORDS="amd64 ~x86"
BDEPEND="
test? (
diff --git a/dev-python/setuptools-rust/setuptools-rust-1.10.1.ebuild b/dev-python/setuptools-rust/setuptools-rust-1.10.1.ebuild
index f11bce32971c..8dc8543f3a71 100644
--- a/dev-python/setuptools-rust/setuptools-rust-1.10.1.ebuild
+++ b/dev-python/setuptools-rust/setuptools-rust-1.10.1.ebuild
@@ -116,7 +116,7 @@ SRC_URI="
# crates are used at test time only, update via pycargoebuild -L -i ...
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-python/sphinx-prompt/sphinx-prompt-1.9.0.ebuild b/dev-python/sphinx-prompt/sphinx-prompt-1.9.0.ebuild
index 07723359bcac..a295634885f8 100644
--- a/dev-python/sphinx-prompt/sphinx-prompt-1.9.0.ebuild
+++ b/dev-python/sphinx-prompt/sphinx-prompt-1.9.0.ebuild
@@ -20,7 +20,7 @@ SRC_URI="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
dev-python/sphinx[${PYTHON_USEDEP}]
diff --git a/dev-python/sqlalchemy/Manifest b/dev-python/sqlalchemy/Manifest
index 307ff3edc45b..643cdcb0d482 100644
--- a/dev-python/sqlalchemy/Manifest
+++ b/dev-python/sqlalchemy/Manifest
@@ -1,6 +1,5 @@
DIST SQLAlchemy-1.4.52.tar.gz 8514200 BLAKE2B b41fccb885ce6761e29621a654c97537610a1875d66302ba56fac560f5c85db35b14595efd903aebfd0186ee39b75a8666e1304cdee6a6ec6eb9923bc602b9e5 SHA512 afda6a3503c9d2baba8c1dd9e7216d5ac1561f52f5f11009c41a1a98ac998643c980c60cf8ba4d84c4af8808be26ead9fd2e7a2c8bf15b2fdb521b4e5de7748e
DIST SQLAlchemy-1.4.53.tar.gz 8468030 BLAKE2B fd03cd7a1a8f26b22d33cee038e6e15c59ba24e32a4465e3e3cda74583a333e627b732f5532aaa2c0fc3356a96dab8efbc4f6a51275315f78451d63a4ec20bbf SHA512 2a33b2c0348efbf312994394da3dac0f86be60e9e0929ce96117a02f49d9e06388ec5b016c1bf229f89d5ee561cbdcf8526b9c33428b7041923cd5d73d87a88c
DIST SQLAlchemy-2.0.29.tar.gz 9543967 BLAKE2B 04425618b6e0bcf98a7a32a4a6b1c092120a9f3eb55761879b072ac3a3e08c8f1b97fb4d2df4b35b2fd810e11146f4d83cf67cd8ec23fb4d96c5d6cfff7657af SHA512 d1143c65fb26335d652083b9a90afaecf78ed312cea5c26f989380204e909c341c1bc3bb1e07274353e1c409d21737fad4d7391f186b2d2373814582d3baaf78
-DIST SQLAlchemy-2.0.30.tar.gz 9579500 BLAKE2B 3c1711ee72a355eb5e6a71d6581d951ffe3ddab459ac4bb4c36a8640ed5f6298a80847e9bb66dd700622fa9275bf77c4c18be5e324092a576d1b35983371730a SHA512 b39275a7312609fd0a78ac5bb4fb0f29f2948d7fc81007587c01f38849ff28bff273182a06c8ec830b7e1ba4cd30aea2cd7214bbf971a61125c9b56c6ddbbe52
DIST SQLAlchemy-2.0.31.tar.gz 9524110 BLAKE2B 521137ceaedd91a063bd336001e25a2946a3fefbc61c619b9b18c32f6e4dd2ff541e7cf3f0e0144024c0a6fe2c7aec743d1315b66c7da752d47abd81a6ab8ab4 SHA512 2e5f559ee2d1f28003a7436a6cb1997f22348447765422f4847adb3c5fc20b759d8c5c99ad4dae1c1f7863f3bc72f699e19b48d7797917a9a64ff4050e61d3d1
DIST SQLAlchemy-2.0.32.tar.gz 9546691 BLAKE2B b6b28fa513e9dc6066db210cee8cbc94dd7c5dfd4f391d4a0ac6987241213afa547458b99df6373b2d1771e264fcedd1186fbd5a483382a7d09185f0f2fa9052 SHA512 12ac1804ba2ad9218d5307f4da87bf7c78b75525bd4b32770e77326eff6fc2ea679e595a1d367f8def3ab7e02ca954622ff16490c277ba6b8edca21efda7da62
diff --git a/dev-python/sqlalchemy/sqlalchemy-2.0.30-r1.ebuild b/dev-python/sqlalchemy/sqlalchemy-2.0.30-r1.ebuild
deleted file mode 100644
index 0b6e7a76ac15..000000000000
--- a/dev-python/sqlalchemy/sqlalchemy-2.0.30-r1.ebuild
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-PYTHON_REQ_USE="sqlite?"
-
-inherit distutils-r1 multiprocessing optfeature pypi
-
-MY_PN="SQLAlchemy"
-DESCRIPTION="Python SQL toolkit and Object Relational Mapper"
-HOMEPAGE="
- https://www.sqlalchemy.org/
- https://pypi.org/project/SQLAlchemy/
- https://github.com/sqlalchemy/sqlalchemy/
-"
-SRC_URI="$(pypi_sdist_url --no-normalize "${MY_PN}")"
-S="${WORKDIR}/${MY_PN}-${PV}"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
-IUSE="examples +sqlite test"
-
-RDEPEND="
- >=dev-python/typing-extensions-4.6.0[${PYTHON_USEDEP}]
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- $(python_gen_impl_dep sqlite)
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-src_prepare() {
- local PATCHES=(
- # https://gerrit.sqlalchemy.org/c/sqlalchemy/sqlalchemy/+/5308
- "${FILESDIR}/${P}-py313.patch"
- )
-
- sed -i -e '/greenlet/d' setup.cfg || die
- distutils-r1_src_prepare
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- test/ext/mypy/test_mypy_plugin_py3k.py
- test/typing/test_mypy.py
- # hardcode call counts specific to Python versions
- test/aaa_profiling
- )
- local EPYTEST_DESELECT=(
- # warning tests are unreliable
- test/base/test_warnings.py
- )
- local sqlite_version=$(sqlite3 --version | cut -d' ' -f1)
- case ${EPYTHON} in
- pypy3)
- EPYTEST_DESELECT+=(
- test/ext/test_associationproxy.py::ProxyHybridTest::test_msg_fails_on_cls_access
- test/ext/test_associationproxy.py::DictOfTupleUpdateTest::test_update_multi_elem_varg
- test/ext/test_associationproxy.py::DictOfTupleUpdateTest::test_update_one_elem_varg
- test/engine/test_processors.py::PyDateProcessorTest::test_date_invalid_string
- test/engine/test_processors.py::PyDateProcessorTest::test_datetime_invalid_string
- test/engine/test_processors.py::PyDateProcessorTest::test_time_invalid_string
- "test/dialect/test_sqlite.py::TestTypes_sqlite+pysqlite_${sqlite_version//./_}::test_cant_parse_datetime_message"
- "test/dialect/test_suite.py::ReturningGuardsTest_sqlite+pysqlite_${sqlite_version//./_}"::test_{delete,insert,update}_single
- test/base/test_utils.py::ImmutableDictTest::test_pep584
- )
- ;;
- python3.13)
- EPYTEST_DESELECT+=(
- # deprecated and broken with py3.13
- test/ext/test_serializer.py
- # TODO
- test/orm/test_mapper.py::MapperTest::test_synonym_nonexistent_attr
- )
- ;;
- esac
- if ! has_version "dev-python/greenlet[${PYTHON_USEDEP}]"; then
- EPYTEST_DESELECT+=(
- test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_execution
- test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_run_sync
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[False-True]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[True-True]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[has_terminate-is_asyncio]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[not_has_terminate-is_asyncio]"
- "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True-_exclusions0]"
- "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True]"
- )
- fi
-
- # upstream's test suite is horribly hacky; it relies on disabling
- # the warnings plugin and turning warnings into errors; this also
- # means that any DeprecationWarnings from third-party plugins cause
- # everything to explode
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- epytest -p rerunfailures --reruns=10 --reruns-delay=2 \
- -p xdist -n "$(makeopts_jobs)" --dist=worksteal
-}
-
-python_install_all() {
- if use examples; then
- docompress -x "/usr/share/doc/${PF}/examples"
- dodoc -r examples
- fi
-
- distutils-r1_python_install_all
-}
-
-pkg_postinst() {
- optfeature "asyncio support" dev-python/greenlet
- optfeature "MySQL support" \
- dev-python/mysqlclient \
- dev-python/pymysql
- optfeature "postgresql support" dev-python/psycopg:2
-}
diff --git a/dev-python/sqlalchemy/sqlalchemy-2.0.30.ebuild b/dev-python/sqlalchemy/sqlalchemy-2.0.30.ebuild
deleted file mode 100644
index d6607f73c278..000000000000
--- a/dev-python/sqlalchemy/sqlalchemy-2.0.30.ebuild
+++ /dev/null
@@ -1,111 +0,0 @@
-# Copyright 1999-2024 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_{8,9,10,11,12} pypy3 )
-PYTHON_REQ_USE="sqlite?"
-
-inherit distutils-r1 multiprocessing optfeature pypi
-
-MY_PN="SQLAlchemy"
-DESCRIPTION="Python SQL toolkit and Object Relational Mapper"
-HOMEPAGE="
- https://www.sqlalchemy.org/
- https://pypi.org/project/SQLAlchemy/
- https://github.com/sqlalchemy/sqlalchemy/
-"
-SRC_URI="$(pypi_sdist_url --no-normalize "${MY_PN}")"
-S="${WORKDIR}/${MY_PN}-${PV}"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
-IUSE="examples +sqlite test"
-
-RDEPEND="
- >=dev-python/typing-extensions-4.6.0[${PYTHON_USEDEP}]
-"
-BDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- test? (
- $(python_gen_impl_dep sqlite)
- dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
- dev-python/pytest-xdist[${PYTHON_USEDEP}]
- )
-"
-
-distutils_enable_tests pytest
-
-src_prepare() {
- sed -i -e '/greenlet/d' setup.cfg || die
- distutils-r1_src_prepare
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- test/ext/mypy/test_mypy_plugin_py3k.py
- test/typing/test_mypy.py
- # hardcode call counts specific to Python versions
- test/aaa_profiling
- )
- local EPYTEST_DESELECT=(
- # warning tests are unreliable
- test/base/test_warnings.py
- )
- local sqlite_version=$(sqlite3 --version | cut -d' ' -f1)
- case ${EPYTHON} in
- pypy3)
- EPYTEST_DESELECT+=(
- test/ext/test_associationproxy.py::ProxyHybridTest::test_msg_fails_on_cls_access
- test/ext/test_associationproxy.py::DictOfTupleUpdateTest::test_update_multi_elem_varg
- test/ext/test_associationproxy.py::DictOfTupleUpdateTest::test_update_one_elem_varg
- test/engine/test_processors.py::PyDateProcessorTest::test_date_invalid_string
- test/engine/test_processors.py::PyDateProcessorTest::test_datetime_invalid_string
- test/engine/test_processors.py::PyDateProcessorTest::test_time_invalid_string
- "test/dialect/test_sqlite.py::TestTypes_sqlite+pysqlite_${sqlite_version//./_}::test_cant_parse_datetime_message"
- "test/dialect/test_suite.py::ReturningGuardsTest_sqlite+pysqlite_${sqlite_version//./_}"::test_{delete,insert,update}_single
- test/base/test_utils.py::ImmutableDictTest::test_pep584
- )
- ;;
- esac
- if ! has_version "dev-python/greenlet[${PYTHON_USEDEP}]"; then
- EPYTEST_DESELECT+=(
- test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_execution
- test/ext/asyncio/test_engine_py3k.py::TextSyncDBAPI::test_sync_driver_run_sync
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[False-True]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[True-True]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[has_terminate-is_asyncio]"
- "test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[not_has_terminate-is_asyncio]"
- "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True-_exclusions0]"
- "test/engine/test_pool.py::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True]"
- )
- fi
-
- # upstream's test suite is horribly hacky; it relies on disabling
- # the warnings plugin and turning warnings into errors; this also
- # means that any DeprecationWarnings from third-party plugins cause
- # everything to explode
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- epytest -p rerunfailures --reruns=10 --reruns-delay=2 \
- -p xdist -n "$(makeopts_jobs)" --dist=worksteal
-}
-
-python_install_all() {
- if use examples; then
- docompress -x "/usr/share/doc/${PF}/examples"
- dodoc -r examples
- fi
-
- distutils-r1_python_install_all
-}
-
-pkg_postinst() {
- optfeature "asyncio support" dev-python/greenlet
- optfeature "MySQL support" \
- dev-python/mysqlclient \
- dev-python/pymysql
- optfeature "postgresql support" dev-python/psycopg:2
-}
diff --git a/dev-python/time-machine/time-machine-2.15.0.ebuild b/dev-python/time-machine/time-machine-2.15.0.ebuild
index 60433b312a53..7af5220012f1 100644
--- a/dev-python/time-machine/time-machine-2.15.0.ebuild
+++ b/dev-python/time-machine/time-machine-2.15.0.ebuild
@@ -21,7 +21,7 @@ SRC_URI="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
RDEPEND="
dev-python/python-dateutil[${PYTHON_USEDEP}]
diff --git a/dev-python/tox/tox-4.17.1.ebuild b/dev-python/tox/tox-4.17.1.ebuild
index c4c03e498202..0f77ce68acde 100644
--- a/dev-python/tox/tox-4.17.1.ebuild
+++ b/dev-python/tox/tox-4.17.1.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
dev-python/cachetools[${PYTHON_USEDEP}]
diff --git a/dev-python/trio/trio-0.26.2.ebuild b/dev-python/trio/trio-0.26.2.ebuild
index 552d9a0e3267..4d32e7eb0505 100644
--- a/dev-python/trio/trio-0.26.2.ebuild
+++ b/dev-python/trio/trio-0.26.2.ebuild
@@ -20,7 +20,7 @@ SRC_URI="
LICENSE="|| ( Apache-2.0 MIT )"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
RDEPEND="
>=dev-python/attrs-23.2.0[${PYTHON_USEDEP}]
diff --git a/dev-python/uv/Manifest b/dev-python/uv/Manifest
index ab402c3fbfdc..9f86fc05390c 100644
--- a/dev-python/uv/Manifest
+++ b/dev-python/uv/Manifest
@@ -1,4 +1,5 @@
DIST pubgrub-2fac39371a47e7cb821e510aaa4de25405413d29.gh.tar.gz 86987 BLAKE2B cbb08901aca46816279ca748a2d96e841b7a570cd674e4d96ef907a968050f5919a2d41fef240bb715050cf8df7dd6755e3d7f74fc79085bfc1ac2daf0665b09 SHA512 eda3539933dab8961120f1989365f8d5b5900aac5dc22606169e3f5d726bea54d3e8179377884d581941baf6bc57c2d41590477d9d3051923504d3b67824a17f
+DIST pubgrub-388685a8711092971930986644cfed152d1a1f6c.gh.tar.gz 87945 BLAKE2B 7c10db2eff97656a379e8beff9f77bf09b4ab2fdd0d5c171e36babc6f3bff08d05774c55a51a23d79144c4110a942764cefa8a1baf7c36174809d2e648f2d12d SHA512 15539076de8fe9a459f70efcf07ccb7f61ced2be9832c4eb7123e7baa2bb85f3263fd4cb5d8b277c28a70ba316d5128d74d59d6f1de96b6e55ef04321a42c4dc
DIST pubgrub-3f0ba760951ab0deeac874b98bb18fc90103fcf7.gh.tar.gz 87050 BLAKE2B d76bc40a71ead4c535eff493901247f2ee2f0a213d12db17bf96c89008be482829ff9b0d47196bb04ffc8c20842f15a2c7a4aa663d4c3f6c3eb82461250853ce SHA512 cd55d4512590eb86628d933598bd3f276a09018dce8dd720496f4314872afe1ad8d0b79d16f1b358e4a77a8613c1d06c742117d3a2a9c39e4f34d0ccd86eb536
DIST pubgrub-aaef464c1b0d8eea4ff9ffaee4f3458c236d10da.gh.tar.gz 87820 BLAKE2B a73f6a3b14fcfccd61ba753e16dfdd38c2424e9608b4e177440b50461b5a2886da7982a73abdc3c8b76ad6c796f96906d2db131425aac5c036ff63d0ccb2b644 SHA512 feec9955227f75e7a914af9b0197b2aae13e5d2e4bba9df1328ba7fe6e0edb9b508ffdbe9f6c7ff8e88d3c7a355964c10186776f4c4ec436689cebbcd92e8f07
DIST reqwest-middleware-21ceec9a5fd2e8d6f71c3ea2999078fecbd13cbe.gh.tar.gz 39176 BLAKE2B 00b2d0f51e4bbe29649fea50a8cc41c7b4d534f87440dd0bf487e8f7104077ad2cde824673b6624ff71924512b8a6b33ed4ac548f64bfbf78a5e0fb1366a446f SHA512 29f80816d054838af330a0ccfb8509ab22469aaecdb369d4a63c03eb3ed2aea3cc113458dd29c649e5bf7c33dbf5ef8b1e5d5a89e1cca72f9eab212f000c594f
@@ -13,3 +14,5 @@ DIST uv-0.2.36.gh.tar.gz 2301352 BLAKE2B 93476b89a0896efa87ebf9f49e6c225750ec9cc
DIST uv-0.3.1-crates.tar.xz 50235904 BLAKE2B 9deb7ee2d99786dbec4b91c020bab2d32fdb696c39ea35b42e8c2380d563c756e1a7044372b1e9cc82d82e18b8c3bebd19cb7c71bccb6bd3f01ae294f2c1878d SHA512 438e1d7cc94bd1214f6fe77852a9d4ec6a1a69561cc16c175ba22f9d1840021d41c8735079f522c29beaf17ac883ecbd9805d4f15e0845483bfede634e40413b
DIST uv-0.3.1.gh.tar.gz 2400493 BLAKE2B e094acd1753e66beee369f6931b520a53515364774a1affb45c57f9eaeeb19cfc5fce8f40725173dd0d43fe664cfd55b904eb6de585c809aaab5ae6c54db7901 SHA512 145b3926e7fb0e4d14eecf6140e16a59afaf4a34a3881d8798bf87144849bd5b47b5100ed479eaf8c0e4675d1cbfb6bee509f20d1e24d25605f4dd4b2be8b24d
DIST uv-0.3.2.gh.tar.gz 2414989 BLAKE2B 0d1de7aa6a97e58abef1edf8becb1527e0fb2381fc335a61b2205ab5de5f5a5df8817679d73d6603f065df4a8942080bbb2fc1d9344e8429d118006463efe672 SHA512 2737d6b10d26a075e9a2365782ff07aea3cfbfc01420ba5b9edec5499bb39881eae78e56b01f71d84013c1f358fe5a91d175dfc70d5273ccdae5ca98bb45abb3
+DIST uv-0.3.3-crates.tar.xz 50333232 BLAKE2B 01e0bf8a8fe6f73aea3e77580bfae1d632ce02aa547a9b8db0f9c08bd244e579f360712b2971450eb63ec6687cae0fb7d1fd29304fd30f3b30f78f1dc0e08bbd SHA512 08f35fc25060b61cd1a33a3e4c8631de25614b883922e39eef0ef2782b15b25ef9679f6f5fbc4f765205a52279f2f124de77d418a476fe91b8f376841e0c1a96
+DIST uv-0.3.3.gh.tar.gz 2452105 BLAKE2B c4d1b0c1a4ef0439ec8d0187b2e77d44c020cd1284729c50c99b8e345b8338e6e551a286165674240d2d4b562476504425f0726b746b9821ba2683f9176f131d SHA512 cf79574a0ec3468daca7a7a6af39e5eb38f646837043bf783f69c60edc9af16fc90b65ef97dfe65b7ca4381d13caacf222a6a38d2c8f7ede90679fff8be9a009
diff --git a/dev-python/uv/uv-0.3.3.ebuild b/dev-python/uv/uv-0.3.3.ebuild
new file mode 100644
index 000000000000..9cf8642b0cf6
--- /dev/null
+++ b/dev-python/uv/uv-0.3.3.ebuild
@@ -0,0 +1,112 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+"
+
+declare -A GIT_CRATES=(
+ [async_zip]='https://github.com/charliermarsh/rs-async-zip;011b24604fa7bc223daaad7712c0694bac8f0a87;rs-async-zip-%commit%'
+ [pubgrub]='https://github.com/astral-sh/pubgrub;388685a8711092971930986644cfed152d1a1f6c;pubgrub-%commit%'
+ [reqwest-middleware]='https://github.com/astral-sh/reqwest-middleware;5e3eaf254b5bd481c75d2710eed055f95b756913;reqwest-middleware-%commit%/reqwest-middleware'
+ [reqwest-retry]='https://github.com/astral-sh/reqwest-middleware;5e3eaf254b5bd481c75d2710eed055f95b756913;reqwest-middleware-%commit%/reqwest-retry'
+)
+
+inherit cargo check-reqs
+
+CRATE_PV=0.3.3
+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://dev.gentoo.org/~mgorny/dist/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 ISC MIT
+ MPL-2.0 Unicode-DFS-2016
+"
+# ring crate
+LICENSE+=" openssl"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+IUSE="test"
+RESTRICT="test"
+PROPERTIES="test_network"
+
+BDEPEND="
+ >=virtual/rust-1.80
+ test? (
+ dev-lang/python:3.8
+ dev-lang/python:3.9
+ dev-lang/python:3.10
+ dev-lang/python:3.11
+ dev-lang/python:3.12
+ )
+"
+
+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
+}
+
+src_prepare() {
+ default
+
+ # remove patch.* that breaks GIT_CRATES
+ local reqmw=${GIT_CRATES[reqwest-middleware]}
+ reqmw=${reqmw#*;}
+ reqmw=${reqmw%;*}
+ sed -i -e "/^\[patch/,\$s@^\(reqwest-middleware = \).*@\1 { path = \"${WORKDIR}/reqwest-middleware-${reqmw}/reqwest-middleware\" }@" Cargo.toml || die
+
+ # https://github.com/vorot93/tokio-tar/pull/23
+ # (fortunately uv already depends on portable-atomic, so we don't
+ # have to fight Cargo.lock)
+ cd "${ECARGO_VENDOR}/tokio-tar-0.3.1" || die
+ eapply "${FILESDIR}/tokio-tar-0.3.1-ppc.patch"
+}
+
+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
+
+ cd crates/uv || die
+ cargo_src_test --no-fail-fast
+}
+
+src_install() {
+ cd crates/uv || die
+ cargo_src_install
+}
diff --git a/dev-python/uvicorn/uvicorn-0.30.5.ebuild b/dev-python/uvicorn/uvicorn-0.30.5.ebuild
index 171f3a489763..31afe1b8844a 100644
--- a/dev-python/uvicorn/uvicorn-0.30.5.ebuild
+++ b/dev-python/uvicorn/uvicorn-0.30.5.ebuild
@@ -22,7 +22,7 @@ SRC_URI="
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
IUSE="test-rust"
RDEPEND="
diff --git a/dev-python/yattag/yattag-1.16.0.ebuild b/dev-python/yattag/yattag-1.16.0.ebuild
index 63cc8edf0679..efa88e01867c 100644
--- a/dev-python/yattag/yattag-1.16.0.ebuild
+++ b/dev-python/yattag/yattag-1.16.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="LGPL-2.1+"
SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+KEYWORDS="amd64 ~arm64 ~riscv ~x86"
distutils_enable_tests unittest