summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-10-07 07:05:06 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-10-07 07:05:06 +0000
commitcaa89eacab99586878d969b5f30bd4afd8e0b3f3 (patch)
tree1671aff167447c1ed923f0059363e3746bbee2b8 /dev-python
parent9d8f7d0265a06ecdb9079d124b3cf9ffc5451f42 (diff)
downloadbaldeagleos-repo-caa89eacab99586878d969b5f30bd4afd8e0b3f3.tar.gz
baldeagleos-repo-caa89eacab99586878d969b5f30bd4afd8e0b3f3.tar.xz
baldeagleos-repo-caa89eacab99586878d969b5f30bd4afd8e0b3f3.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/aiohttp/Manifest4
-rw-r--r--dev-python/aiohttp/aiohttp-3.11.18.ebuild147
-rw-r--r--dev-python/aiohttp/aiohttp-3.12.13.ebuild158
-rw-r--r--dev-python/aiohttp/aiohttp-3.13.0.ebuild (renamed from dev-python/aiohttp/aiohttp-3.12.14.ebuild)17
-rw-r--r--dev-python/aiohttp/files/aiohttp-3.11.17-unbundle-llhttp.patch31
-rw-r--r--dev-python/ansible-compat/Manifest2
-rw-r--r--dev-python/ansible-compat/ansible-compat-25.8.2.ebuild (renamed from dev-python/ansible-compat/ansible-compat-25.8.0.ebuild)11
-rw-r--r--dev-python/attrs/Manifest1
-rw-r--r--dev-python/attrs/attrs-25.4.0.ebuild53
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.40.46.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.40.46.ebuild67
-rw-r--r--dev-python/frozenlist/Manifest1
-rw-r--r--dev-python/frozenlist/frozenlist-1.8.0.ebuild53
-rw-r--r--dev-python/langdetect/Manifest2
-rw-r--r--dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch13
-rw-r--r--dev-python/langdetect/langdetect-1.0.9.ebuild6
-rw-r--r--dev-python/langdetect/metadata.xml10
-rw-r--r--dev-python/multidict/Manifest3
-rw-r--r--dev-python/multidict/multidict-6.5.1.ebuild65
-rw-r--r--dev-python/multidict/multidict-6.7.0.ebuild (renamed from dev-python/multidict/multidict-6.6.3.ebuild)2
-rw-r--r--dev-python/narwhals/Manifest4
-rw-r--r--dev-python/narwhals/narwhals-2.7.0.ebuild (renamed from dev-python/narwhals/narwhals-2.5.0.ebuild)0
-rw-r--r--dev-python/pymongo/files/pymongo-4.15.2-backports.patch212
-rw-r--r--dev-python/pymongo/pymongo-4.15.2-r1.ebuild207
-rw-r--r--dev-python/pyzotero/Manifest2
-rw-r--r--dev-python/pyzotero/pyzotero-1.6.17.ebuild49
-rw-r--r--dev-python/sphinx-autoapi/Manifest1
-rw-r--r--dev-python/sphinx-autoapi/sphinx-autoapi-3.6.1.ebuild57
-rw-r--r--dev-python/webtest/Manifest1
-rw-r--r--dev-python/webtest/webtest-3.0.7.ebuild46
-rw-r--r--dev-python/xarray/Manifest3
-rw-r--r--dev-python/xarray/xarray-2025.10.0.ebuild (renamed from dev-python/xarray/xarray-2025.9.0.ebuild)2
-rw-r--r--dev-python/xarray/xarray-2025.7.0.ebuild121
-rw-r--r--dev-python/yarl/Manifest1
-rw-r--r--dev-python/yarl/yarl-1.22.0.ebuild63
37 files changed, 917 insertions, 553 deletions
diff --git a/dev-python/aiohttp/Manifest b/dev-python/aiohttp/Manifest
index d5e008364f17..d0b06a07cc40 100644
--- a/dev-python/aiohttp/Manifest
+++ b/dev-python/aiohttp/Manifest
@@ -1,4 +1,2 @@
-DIST aiohttp-3.11.18.tar.gz 7678653 BLAKE2B 5886778fd0456ef40f1da5abd3d6a3864db03fad01d53755bb34afd77152da338480ba534c5dc1574bd5aa178943ec52814f1ceff736d668868803b19f6c102f SHA512 9b25ad5f9800cd84014c55f6a4f7ac217a788a43e301a83c18667b6f294388adf53c81360fd3219007b10b42ce165331dad1907582dc9d3081fd8585b5bcd042
-DIST aiohttp-3.12.13.tar.gz 7819160 BLAKE2B 32584507d6d48a80c8034b0095af1fbbb74f75066e517205c05b7561bf5d7087e89031405dcba5a84c2d686310c44005ede7a67b421153b9d235c0e37c2cf6d9 SHA512 e384a7581a7e0944a7283adcf70b84c3a4f6a04ddf5fafbff74d1919bd46a3fddfd7fd830189278d7d17717ca65695cf0aa26ebbf38d08e850453887a5b7f487
-DIST aiohttp-3.12.14.tar.gz 7822921 BLAKE2B 2cbba98737ee1a00083e5a7f4ae2fbfc22bee07634a85c9b7de9bea09d3478be78b0460a9a40d6fe7b9a88a7a5d3ba7a2e446963affb50dca58c6030aa42d6ef SHA512 7031ecc166b10663c56f1ece854d272bf9b26160aef026f13a7ef820a3cbf34ed6d1301a08b440308df5bda08f83f1cba504eacf1a85c7cf2721df1b4facc75a
DIST aiohttp-3.12.15.tar.gz 7823716 BLAKE2B b7e69e24d961cf1897f650987e0214b083ab5557f4fb3b7046ebf3b348138e603bd3dea1fc4c3250b8fef1d966a77665d24af64a600d09b1410b16c467144731 SHA512 055176006825f86dc2b5f31355a4da60e288c844770ac8c6312d00b308f6eba02bc31fee5b0c30f552c0aabf597c8dfa54f485d87b65169f1eb637ea29470d56
+DIST aiohttp-3.13.0.tar.gz 7832348 BLAKE2B 14f482a2f72197ebfc4b841b45d73833c0037443706b12fb7b945a0a54a54964019964d500013a1abfe74fbd49f439d936a2628c33401fddce48642f4ee8602f SHA512 9ed39fa35250e40efaee3ce9be0f3cd9a0fd6b4c5ec2a3c67c173e23153307fc958570d8530ea3919a5db3cd452102d0c81bb3fb127d51b224658e1264a5b73c
diff --git a/dev-python/aiohttp/aiohttp-3.11.18.ebuild b/dev-python/aiohttp/aiohttp-3.11.18.ebuild
deleted file mode 100644
index 2427dd010609..000000000000
--- a/dev-python/aiohttp/aiohttp-3.11.18.ebuild
+++ /dev/null
@@ -1,147 +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=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} 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="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
-IUSE="+native-extensions test-rust"
-
-DEPEND="
- native-extensions? (
- $(python_gen_cond_dep '
- net-libs/llhttp:=
- ' 'python3*')
- )
-"
-RDEPEND="
- ${DEPEND}
- >=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/propcache-0.2.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.17.0[${PYTHON_USEDEP}]
- $(python_gen_cond_dep '
- <dev-python/async-timeout-6[${PYTHON_USEDEP}]
- >=dev-python/async-timeout-4.0[${PYTHON_USEDEP}]
- ' 3.10)
-"
-BDEPEND="
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- native-extensions? (
- 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=(
- "${FILESDIR}/${PN}-3.11.17-unbundle-llhttp.patch"
- )
-
- distutils-r1_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 '/pytest_cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
- # remove vendored llhttp
- rm -r vendor || die
-}
-
-python_configure() {
- # check for .install-cython, so that we do this only once
- if [[ ! -f .install-cython && ${EPYTHON} != pypy3 ]] &&
- use native-extensions
- then
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
- fi
-}
-
-python_compile() {
- # implicitly disabled for pypy3
- if ! use native-extensions; then
- local -x AIOHTTP_NO_EXTENSIONS=1
- fi
-
- distutils-r1_python_compile
-}
-
-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
- # benchmarks
- tests/test_benchmarks_client.py
- tests/test_benchmarks_client_request.py
- tests/test_benchmarks_client_ws.py
- tests/test_benchmarks_cookiejar.py
- tests/test_benchmarks_http_websocket.py
- tests/test_benchmarks_http_writer.py
- tests/test_benchmarks_web_fileresponse.py
- tests/test_benchmarks_web_middleware.py
- tests/test_benchmarks_web_response.py
- tests/test_benchmarks_web_urldispatcher.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
- )
-
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch
- if [[ ${EPYTHON} == pypy3* ]] || ! use native-extensions; then
- local -x AIOHTTP_NO_EXTENSIONS=1
- fi
-
- 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.12.13.ebuild b/dev-python/aiohttp/aiohttp-3.12.13.ebuild
deleted file mode 100644
index 70c7eb52f079..000000000000
--- a/dev-python/aiohttp/aiohttp-3.12.13.ebuild
+++ /dev/null
@@ -1,158 +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=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} 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="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
-IUSE="+native-extensions test-rust"
-
-DEPEND="
- native-extensions? (
- $(python_gen_cond_dep '
- net-libs/llhttp:=
- ' 'python3*')
- )
-"
-RDEPEND="
- ${DEPEND}
- >=dev-python/aiodns-3.3.0[${PYTHON_USEDEP}]
- >=dev-python/aiohappyeyeballs-2.5.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/propcache-0.2.0[${PYTHON_USEDEP}]
- >=dev-python/yarl-1.17.0[${PYTHON_USEDEP}]
-"
-BDEPEND="
- >=dev-python/multidict-4.5.0[${PYTHON_USEDEP}]
- native-extensions? (
- >=dev-python/cython-3.1.1[${PYTHON_USEDEP}]
- dev-python/pkgconfig[${PYTHON_USEDEP}]
- )
- test? (
- dev-python/blockbuster[${PYTHON_USEDEP}]
- dev-python/freezegun[${PYTHON_USEDEP}]
- dev-python/isal[${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*')
- dev-python/zlib-ng[${PYTHON_USEDEP}]
- www-servers/gunicorn[${PYTHON_USEDEP}]
- test-rust? (
- dev-python/trustme[${PYTHON_USEDEP}]
- )
- )
-"
-
-DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_prepare() {
- distutils-r1_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 '/pytest_cov/d' -e '/xfail_strict/d' setup.cfg || die
- sed -i -e 's:-Werror::' Makefile || die
- # remove vendored llhttp
- rm -r vendor || die
-}
-
-python_configure() {
- # check for .install-cython, so that we do this only once
- if [[ ! -f .install-cython && ${EPYTHON} != pypy3 ]] &&
- use native-extensions
- then
- # force rehashing first
- emake requirements/.hash/cython.txt.hash
- > .update-pip || die
- > .install-cython || die
- emake cythonize
- fi
-}
-
-python_compile() {
- local -x AIOHTTP_USE_SYSTEM_DEPS=1
- # implicitly disabled for pypy3
- if [[ ${EPYTHON} == pypy3* ]] || ! use native-extensions; then
- local -x AIOHTTP_NO_EXTENSIONS=1
- fi
-
- distutils-r1_python_compile
-}
-
-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
- # benchmarks
- tests/test_benchmarks_client.py
- tests/test_benchmarks_client_request.py
- tests/test_benchmarks_client_ws.py
- tests/test_benchmarks_cookiejar.py
- tests/test_benchmarks_http_websocket.py
- tests/test_benchmarks_http_writer.py
- tests/test_benchmarks_web_fileresponse.py
- tests/test_benchmarks_web_middleware.py
- tests/test_benchmarks_web_response.py
- tests/test_benchmarks_web_urldispatcher.py
- )
-
- local EPYTEST_DESELECT=(
- # Internet
- tests/test_client_session.py::test_client_session_timeout_zero
- tests/test_connector.py::test_tcp_connector_ssl_shutdown_timeout_nonzero_passed
- tests/test_connector.py::test_tcp_connector_ssl_shutdown_timeout_passed_to_create_connection
- tests/test_connector.py::test_tcp_connector_ssl_shutdown_timeout_zero_not_passed
- # broken by irrelevant deprecation warnings
- tests/test_circular_imports.py::test_no_warnings
- )
-
- case ${EPYTHON} in
- python3.14)
- EPYTEST_DESELECT+=(
- # TODO
- tests/test_cookiejar.py::test_pickle_format
- # different exception message
- tests/test_client_functional.py::test_aiohttp_request_coroutine
- )
- ;;
- esac
-
- # upstream unconditionally blocks building C extensions
- # on PyPy3 but the test suite needs an explicit switch
- if [[ ${EPYTHON} == pypy3* ]] || ! use native-extensions; then
- local -x AIOHTTP_NO_EXTENSIONS=1
- fi
-
- 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.12.14.ebuild b/dev-python/aiohttp/aiohttp-3.13.0.ebuild
index 871e87dad8cc..18dbde76410c 100644
--- a/dev-python/aiohttp/aiohttp-3.12.14.ebuild
+++ b/dev-python/aiohttp/aiohttp-3.13.0.ebuild
@@ -17,7 +17,7 @@ HOMEPAGE="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="+native-extensions test-rust"
DEPEND="
@@ -50,14 +50,14 @@ BDEPEND="
dev-python/blockbuster[${PYTHON_USEDEP}]
dev-python/freezegun[${PYTHON_USEDEP}]
dev-python/isal[${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*')
dev-python/zlib-ng[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/zstandard[${PYTHON_USEDEP}]
+ ' 3.11 3.12)
www-servers/gunicorn[${PYTHON_USEDEP}]
test-rust? (
dev-python/trustme[${PYTHON_USEDEP}]
@@ -67,6 +67,10 @@ BDEPEND="
DOCS=( CHANGES.rst CONTRIBUTORS.txt README.rst )
+EPYTEST_PLUGIN_LOAD_VIA_ENV=1
+EPYTEST_PLUGINS=( pytest-{mock,xdist} )
+EPYTEST_RERUNS=5
+: ${EPYTEST_TIMEOUT:=180}
EPYTEST_XDIST=1
distutils_enable_tests pytest
@@ -151,9 +155,6 @@ python_test() {
local -x AIOHTTP_NO_EXTENSIONS=1
fi
- 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
+ epytest -m "not internal and not dev_mode"
}
diff --git a/dev-python/aiohttp/files/aiohttp-3.11.17-unbundle-llhttp.patch b/dev-python/aiohttp/files/aiohttp-3.11.17-unbundle-llhttp.patch
deleted file mode 100644
index 500377eb46e6..000000000000
--- a/dev-python/aiohttp/files/aiohttp-3.11.17-unbundle-llhttp.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff --git a/aiohttp/_cparser.pxd b/aiohttp/_cparser.pxd
-index c2cd5a92f..1b3be6d4e 100644
---- a/aiohttp/_cparser.pxd
-+++ b/aiohttp/_cparser.pxd
-@@ -1,7 +1,7 @@
- from libc.stdint cimport int32_t, uint8_t, uint16_t, uint64_t
-
-
--cdef extern from "../vendor/llhttp/build/llhttp.h":
-+cdef extern from "llhttp.h":
-
- struct llhttp__internal_s:
- int32_t _index
-diff --git a/setup.py b/setup.py
-index c9a2c5c85..fe1a8101f 100644
---- a/setup.py
-+++ b/setup.py
-@@ -33,12 +33,9 @@ extensions = [
- [
- "aiohttp/_http_parser.c",
- "aiohttp/_find_header.c",
-- "vendor/llhttp/build/c/llhttp.c",
-- "vendor/llhttp/src/native/api.c",
-- "vendor/llhttp/src/native/http.c",
- ],
- define_macros=[("LLHTTP_STRICT_MODE", 0)],
-- include_dirs=["vendor/llhttp/build"],
-+ libraries=["llhttp"],
- ),
- Extension("aiohttp._http_writer", ["aiohttp/_http_writer.c"]),
- Extension("aiohttp._websocket.reader_c", ["aiohttp/_websocket/reader_c.c"]),
diff --git a/dev-python/ansible-compat/Manifest b/dev-python/ansible-compat/Manifest
index 00677444ecd8..709e95c82c5a 100644
--- a/dev-python/ansible-compat/Manifest
+++ b/dev-python/ansible-compat/Manifest
@@ -1,3 +1,3 @@
DIST ansible_compat-25.6.0.tar.gz 88447 BLAKE2B 6431b22bc50d09f865d39046df55fd2a3fe03576cb640f0febc8f108b0ff7b190ef3014904e56f8cd50f37fd6db61da4cd71ab8d52619f8f4c42bac6344b95ed SHA512 3f60f0f6035c17eafa976d77cf811553ce018c3857ded05921a7f3378856cc1e8e5945a57080755cfa86deac52de67bd085834b334d597afc257b78c249f4ad8
-DIST ansible_compat-25.8.0.tar.gz 89228 BLAKE2B 752ecdbd3974f8317e5621a936883654f99a0e030d954f978a9b98ce7259f97575c18e4e65d376ad8b4f4430c5a721bf12d03bd95216849d04e8cbf56b8ca4e7 SHA512 ab36870d57f50d57bb8c4026fd3629907447f1afd4bd044fe7f1efac0bbeda6c07bc678d0ac55dd44cd6cf23fe4b174d3e5f8400463c3e9d1a643b59f841b1e7
DIST ansible_compat-25.8.1.tar.gz 90142 BLAKE2B 39c98e2e4f7fe9da00543b1ba2fce24e303c25aa269c1a4f86ed96a7e29ebb9f31fa40516fba78017e940ddcea5f6fba95bf0b4eccebc77fd0c13d282bf6df97 SHA512 b0bc8ef6f614e7c41becba6090ebd4a5c09bb9ac957a56652eb59d18eb2d03398e149af21071883a7b236e0ee724b354322a043f8d45c23b4db6d1864f871130
+DIST ansible_compat-25.8.2.tar.gz 190581 BLAKE2B a20ebf6b595a8933d02b88c1f9f8efae8e7ffac3378bed3c50fd8fbf74a73663c5406fde7f05f0a923ba7ce75d920f3bf58e347cb7650cec77cb974ed805e45c SHA512 78beb54d3ad65e02e7009834b5690b118c6743274fa5fd31941e63a7f99d3b7ac2fcbce0fa80d45212a6bcf4365628e731cb139a6af14360c0552e9a759d6336
diff --git a/dev-python/ansible-compat/ansible-compat-25.8.0.ebuild b/dev-python/ansible-compat/ansible-compat-25.8.2.ebuild
index fbc9b34c1183..19799b9793b1 100644
--- a/dev-python/ansible-compat/ansible-compat-25.8.0.ebuild
+++ b/dev-python/ansible-compat/ansible-compat-25.8.2.ebuild
@@ -21,8 +21,8 @@ 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-25.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.2[${PYTHON_USEDEP}]
>=dev-python/subprocess-tee-0.4.1[${PYTHON_USEDEP}]
"
BDEPEND="
@@ -32,6 +32,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/attrs/Manifest b/dev-python/attrs/Manifest
index a4795b6a5ff7..db05b715fc3f 100644
--- a/dev-python/attrs/Manifest
+++ b/dev-python/attrs/Manifest
@@ -1 +1,2 @@
DIST attrs-25.3.0.tar.gz 812032 BLAKE2B a4417e2ccc14a61f1f23cf40bd75c665a081130482484752af46d94d40a6e06679f7adf7d2e8c9b27c8d7ae4bbc1cc835ba0f533d37caa2d7b333ca2158e3d89 SHA512 acf34c38865157c49ba4070b35a162f0eb976ded0a8b8f74afe4c7e7238b8418af6108954cfc92c9721a090505e73ae193225a73a02352ab3bba0d9ace189059
+DIST attrs-25.4.0.tar.gz 934251 BLAKE2B 5d3a4ef1c5821ac8998a401239d73ea8e6fa2508b779c2772eca9240375835193b0ed62c40d0502f5f31c6582fc9b4a62d5505236d6ae5c878695bfecd336ba4 SHA512 945ea1766adf7e8c8cc8b8f8c63c3dca652553522cede6a09d479f9919a41d43539819da2fe6fdc0e0b42822e353c7cb04b79fb9cecfd54bde5e301574a82341
diff --git a/dev-python/attrs/attrs-25.4.0.ebuild b/dev-python/attrs/attrs-25.4.0.ebuild
new file mode 100644
index 000000000000..9ddbf9101609
--- /dev/null
+++ b/dev-python/attrs/attrs-25.4.0.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=hatchling
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Attributes without boilerplate"
+HOMEPAGE="
+ https://github.com/python-attrs/attrs/
+ https://attrs.readthedocs.io/
+ https://pypi.org/project/attrs/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+
+BDEPEND="
+ >=dev-python/hatchling-1.26.0[${PYTHON_USEDEP}]
+ >=dev-python/hatch-fancy-pypi-readme-23.2.0[${PYTHON_USEDEP}]
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ $(python_gen_impl_dep sqlite)
+ $(python_gen_cond_dep '
+ dev-python/cloudpickle[${PYTHON_USEDEP}]
+ ' python3_{11..14})
+ $(python_gen_cond_dep '
+ dev-python/zope-interface[${PYTHON_USEDEP}]
+ ' python3_{11..14} pypy3_11)
+ )
+"
+
+EPYTEST_PLUGINS=( hypothesis )
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=()
+
+ case ${EPYTHON} in
+ pypy3*)
+ EPYTEST_DESELECT+=(
+ # https://github.com/python-attrs/attrs/issues/1418
+ tests/test_make.py::TestClassBuilder::test_handles_missing_meta_on_class
+ )
+ ;;
+ esac
+
+ epytest
+}
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index 7a41dec94e1e..61b0e7ed2048 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -5,3 +5,4 @@ DIST boto3-1.40.30.gh.tar.gz 997925 BLAKE2B 4467751d6248dd25b046c23680d966d3222d
DIST boto3-1.40.35.gh.tar.gz 1001174 BLAKE2B afef89c4d20770e9d7a8fbff39c2783f25331dc89ec9a025b40afd93a5e5175d1dc041ff3f6e866cc122bb81348c455e1740e6d793ed0ac8c5bc885f1eeb6085 SHA512 fdc723da40b22d6d46cf8c39e5ffbf80918d1398bd8e639bebbcfa4c5bda0b405fa2ada4ea22aa207fa0bf41bfe2242469e870c9f61f20a40a2e90630acce7b2
DIST boto3-1.40.40.gh.tar.gz 1003705 BLAKE2B b7a555bb3ce92d01a14f3bc43a689452ed7f1cdef7e8f165ed4ee9b5625ab8c064c4ba541c67f301d938d6a3886301f1c563c0f77a72bae19c88ff60f35fdcfa SHA512 47172d50ce7203abb5e85e7e66da93e388a6f28a244fe0e654f619dee5388961d080ff04ff7126c09bc52af7c3f03cd4c334fc757bc63fbfb2572cab668b7b26
DIST boto3-1.40.45.gh.tar.gz 1007074 BLAKE2B b6b36715046fc1468ad02770b31c88276d342546f4482c75d41686d4754c4b5a4231d027356bac122be08067943ad7df02bbea6fa2086a79306125ef41fc27b9 SHA512 4533e413d4771b5770f77df9c6574dca3d85bafbc1d65918b90c294fdd32ff3e6ab6e5e5f95c2ae0fb9db062eda411d2fd7fab7c7b873e87e2074ca34a13cce1
+DIST boto3-1.40.46.gh.tar.gz 1007701 BLAKE2B e3d79e6e3cdcb45a022d847617a77191ba1384839458c114679c77580fed8db954bc0b087a4073647b8adef9845b33360a47a8865ec83fc22e72a195d8463121 SHA512 cd47dcf610fa5b0c7b0341231093c899efc63addc4517f2ea1da43ce5e37e7d3c8ff99103816c8d119a5f2fbc0cfaa0913eebd66aaa6d65129b3ed3b56fab5a7
diff --git a/dev-python/boto3/boto3-1.40.46.ebuild b/dev-python/boto3/boto3-1.40.46.ebuild
new file mode 100644
index 000000000000..90fb2a42e6e5
--- /dev/null
+++ b/dev-python/boto3/boto3-1.40.46.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_{11..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.14.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 c87534ef73e3..0b788911769f 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -5,3 +5,4 @@ DIST botocore-1.40.30.gh.tar.gz 15142090 BLAKE2B 9293ad264156c749fbbc4b1a0a59c7a
DIST botocore-1.40.35.gh.tar.gz 15147385 BLAKE2B 061a5f62573851c50c4dedbc0ea4868c73f64127219818c88976785dbbd425062b776846fce0c72ee5fca92f179ef13df14697ae387cb4741f549d1b0e3df4e6 SHA512 b85dd96dd123f155054e85da3c5fa86ca0f76019df5c9883b64143f8c7be58275063c757143fe243642ea1309f6d7fe0f900dca46c1498a4d3b2752686b95b86
DIST botocore-1.40.40.gh.tar.gz 15161555 BLAKE2B 099fc06007aedcb65b73de369b00d799ce7166f7ba4838a75abb2158f13dceade699b47eb5bff3cde48b7e5316eb12c2ba08ab22cf642bbaf26907454fe1e393 SHA512 4625752f7d2593a12451d257002dabc8ec3aa84267a1466a8e5e767878aae0bf875ae82d899fffc6b740ac957cd08fbd1baafdb4b82c2ebbaaf6f5d14db5eba6
DIST botocore-1.40.45.gh.tar.gz 15197014 BLAKE2B 6b44913005d75f22b0ff993b1fea47a417832d17988cc2d39325f1aa3151690bd4f3248f4ab4a338edea23833ff731bc56808d8e4c2a99cb08e280f27fc301f1 SHA512 0d6746d501c774139be0bd669df118eea875b886de972a71bdbd64085db68697edba57fc1eecebac2e91f772b96ceea8636ef04af3dbeaa0d4d163a6d61156c8
+DIST botocore-1.40.46.gh.tar.gz 15205441 BLAKE2B c6d5a7d5061445ff811e7c45159fda357cda05f21e578d91e1489da53c79be78bbf1e1f6ad531dcb46d96e19292cea379e4b28706a4f5bcc210e3c700f86993e SHA512 b035af8a1738974e2b21c5af3440d318a1081b3e226b7a485779c8fba6729e5868c6edf9608787bbb78dcb149fcf3adcacdcd286624d13511d91679c5b4c71c4
diff --git a/dev-python/botocore/botocore-1.40.46.ebuild b/dev-python/botocore/botocore-1.40.46.ebuild
new file mode 100644
index 000000000000..a931fcaefec4
--- /dev/null
+++ b/dev-python/botocore/botocore-1.40.46.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_{11..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/frozenlist/Manifest b/dev-python/frozenlist/Manifest
index 106c2ed96585..8989ceb73b16 100644
--- a/dev-python/frozenlist/Manifest
+++ b/dev-python/frozenlist/Manifest
@@ -1 +1,2 @@
DIST frozenlist-1.7.0.gh.tar.gz 51128 BLAKE2B 8ce7444524bcc1d3bc0c4288a21a06830fb461dbb2c6226995dddca5574f90a88aac03bf21caa0401ffacf5d069096c2f7430325c74ae26105d03c6ff7348c06 SHA512 007118195032ebeeba172d2113b8e0af330d6a1ed67ad3ab4313c01b4948a3d5890e526fb3258e930e3ea8a221f239fd061abe3eead0c6b6196a95e78fb29422
+DIST frozenlist-1.8.0.gh.tar.gz 51937 BLAKE2B e7f3948385cea658ec0fd3a348092aa17b74f01c0ab3bb712a90353032ae011636fa5089da57495640f8b9ab8668f49b227576aba973e6521d7224bcf9914825 SHA512 dc1ae0bdec79a02de81adfbf280c26126dc5c8cdae22eb80b28d1ca65445f945cd71ce9bfdbf03d5aef8f36af13862c57ce5d1f159d0177889f403b871744118
diff --git a/dev-python/frozenlist/frozenlist-1.8.0.ebuild b/dev-python/frozenlist/frozenlist-1.8.0.ebuild
new file mode 100644
index 000000000000..dde059b85886
--- /dev/null
+++ b/dev-python/frozenlist/frozenlist-1.8.0.ebuild
@@ -0,0 +1,53 @@
+# Copyright 2021-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="A list-like structure which implements collections.abc.MutableSequence"
+HOMEPAGE="
+ https://pypi.org/project/frozenlist/
+ https://github.com/aio-libs/frozenlist/
+"
+SRC_URI="
+ https://github.com/aio-libs/frozenlist/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="+native-extensions"
+
+BDEPEND="
+ dev-python/expandvars[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ native-extensions? (
+ $(python_gen_cond_dep '
+ dev-python/cython[${PYTHON_USEDEP}]
+ ' 'python*')
+ )
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+python_compile() {
+ # pypy is not using the C extension
+ if ! use native-extensions || [[ ${EPYTHON} != python* ]]; then
+ local -x FROZENLIST_NO_EXTENSIONS=1
+ fi
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ rm -rf frozenlist || die
+ epytest -o addopts=
+}
diff --git a/dev-python/langdetect/Manifest b/dev-python/langdetect/Manifest
index d12ab8aeaca8..a11d7c268c91 100644
--- a/dev-python/langdetect/Manifest
+++ b/dev-python/langdetect/Manifest
@@ -1,3 +1 @@
DIST langdetect-1.0.9.tar.gz 981474 BLAKE2B ea8a9c3f16a2987c080742473bff4f2c1503f53fb3c2b40b0b1d6212bb6133ea22dce7864ffcfb8968c3a46b157d45cb3e2cf6f84bdbed0266cc716a853b032c SHA512 7558d674c47b080c79e43a00a25d2c7f77188cf60bea2cecb3bebb803d75e1aa42b43c74bd26ea1b541f4cb927421908882cbec01a91f0913984217e71ccc8db
-EBUILD langdetect-1.0.9.ebuild 494 BLAKE2B 9cd8a2a93a8d45bf51fe2324402b175d641762ea591fcb99459427f977a95eccffa6ca4777ca4df39814eea6eac62711567faa654456d32f79023a4685804504 SHA512 d973b85ba1a44389a4275f02a779a93a005f7c2e096467b94b072862e4984d5b42cf33f9821ac68aa5b85b12c98983a90b96049989d8c84497969174b6bb838e
-MISC metadata.xml 457 BLAKE2B 630128a3e982b6d60cc7b9f74c79fcb5ee47a71a02c73a50af9da8cedb6fad8e20a7f74b881e5b25c6483b92c9edbd56552cd38b2d9cbfa8b3eb4530facea969 SHA512 674f4f5cd809c6c77bc14e0f5687fa972bef14bdfa0b3343c5d66b7163eef1906eb87d060c8288732f825de71dce291ad0b841a5f2f0dd230f957b5687e45d45
diff --git a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch b/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
new file mode 100644
index 000000000000..637368d2f237
--- /dev/null
+++ b/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
@@ -0,0 +1,13 @@
+Fix "Package 'langdetect.profiles' is absent from the `packages` configuration."
+
+--- a/setup.py
++++ b/setup.py
+@@ -18,7 +18,7 @@ setup(
+ author_email='michal.danilak@gmail.com',
+ url='https://github.com/Mimino666/langdetect',
+ keywords='language detection library',
+- packages=['langdetect', 'langdetect.utils', 'langdetect.tests'],
++ packages=['langdetect', 'langdetect.utils', 'langdetect.tests', 'langdetect.profiles'],
+ include_package_data=True,
+ install_requires=['six'],
+ license='MIT',
diff --git a/dev-python/langdetect/langdetect-1.0.9.ebuild b/dev-python/langdetect/langdetect-1.0.9.ebuild
index 56733bbffc48..98b2b0bf8d0b 100644
--- a/dev-python/langdetect/langdetect-1.0.9.ebuild
+++ b/dev-python/langdetect/langdetect-1.0.9.ebuild
@@ -1,9 +1,9 @@
-# Copyright 2022 Gentoo Authors
+# Copyright 2022-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_COMPAT=( python3_{11..14} )
DISTUTILS_USE_PEP517=setuptools
inherit distutils-r1 pypi
@@ -19,4 +19,6 @@ KEYWORDS="~amd64"
RDEPEND="dev-python/six[${PYTHON_USEDEP}]"
+PATCHES=( "${FILESDIR}/${P}-explicit-config.patch" )
+
distutils_enable_tests unittest
diff --git a/dev-python/langdetect/metadata.xml b/dev-python/langdetect/metadata.xml
index 020e07f2a3dd..c0f74ac187e2 100644
--- a/dev-python/langdetect/metadata.xml
+++ b/dev-python/langdetect/metadata.xml
@@ -2,11 +2,9 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
- <email>marcin.deranek@slonko.net</email>
- <name>Marcin Deranek</name>
+ <email>pastalian46@gmail.com</email>
+ <name>Takuya Wakazono</name>
</maintainer>
- <upstream>
- <bugs-to>https://github.com/Mimino666/langdetect/issues</bugs-to>
- </upstream>
- <origin>slonko-overlay</origin>
+
+ <origin>gentoo-guru-overlay</origin>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/multidict/Manifest b/dev-python/multidict/Manifest
index 4772d1a4bd5e..60eaca79ba96 100644
--- a/dev-python/multidict/Manifest
+++ b/dev-python/multidict/Manifest
@@ -1,3 +1,2 @@
-DIST multidict-6.5.1.gh.tar.gz 116424 BLAKE2B 4c438450a49e7f5a8b5ac49ff124e018aa7e62642ff39ec8b92f6c24e776f9c6ffbaa3d3e8ecafaeff96c8164291d52539a94eb6e286642c4332d3636f691a06 SHA512 7fa411d12b492a2f567c0228e5822200e711a9e1c221595f2a6d40ffaa2c870dfeb9d12f421495e66c2c95673efd7c3275cef9810b1404e7e6afccaac1b6c182
-DIST multidict-6.6.3.gh.tar.gz 119092 BLAKE2B f2fbe0c25d527a2841b27b08eb48bb713fbdf4723a0aaba3928abfa0385f3912314f71a2e297212ee0e9bcbe31e64e4477188fd2870a3e3f9f241329fc0a73cb SHA512 ebb517d3f660bb99e19b9ccb7bd5f73579b0cc7ff71ecb4c0a8163bc11c47f564bbf73c47f7b89708631245d7b697944a760952f3ce87125d02b36cac03d4ceb
DIST multidict-6.6.4.gh.tar.gz 119837 BLAKE2B e60c6195f1bab3916179abe5b509255ac7743d24554a0ea12be9a37f6dbceacdc8e839c2204b3f8499d442a1e54c02de0f36848c67a3fd1b2f996b632ddde483 SHA512 02a6dc8c1dac331251a5a0a04f2c00dab60a524bd4ee1a8923b3747f1dd3d75639952e32b49a2a46f94aa1ff95220503b22cb24c9252a5458d2c7346bd02faac
+DIST multidict-6.7.0.gh.tar.gz 119807 BLAKE2B 53d642e7ad4471979ecb1aa60574935aa50d8032126f4956d6c4b27a9076290f7b8254609c758b1124d70ed32249cc463bcf55380f7421f5d640fdcbca4d6122 SHA512 6268acb9fc6efa1dc0adcaae06e61c5d6b9342fd654efc142116eee3acbd4d337e1c721cfeaa0a653241f0c2d9839cc8e55aa7531776c062c7c0c0c785db6be9
diff --git a/dev-python/multidict/multidict-6.5.1.ebuild b/dev-python/multidict/multidict-6.5.1.ebuild
deleted file mode 100644
index 6b1a876d9f26..000000000000
--- a/dev-python/multidict/multidict-6.5.1.ebuild
+++ /dev/null
@@ -1,65 +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=setuptools
-PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
-
-inherit distutils-r1
-
-DESCRIPTION="multidict implementation"
-HOMEPAGE="
- https://github.com/aio-libs/multidict/
- https://pypi.org/project/multidict/
-"
-SRC_URI="
- https://github.com/aio-libs/${PN}/archive/v${PV}.tar.gz
- -> ${P}.gh.tar.gz
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos"
-IUSE="+native-extensions"
-
-BDEPEND="
- test? (
- dev-python/objgraph[${PYTHON_USEDEP}]
- )
-"
-
-EPYTEST_PLUGINS=()
-distutils_enable_tests pytest
-
-python_prepare_all() {
- # don't enable coverage or other pytest settings
- sed -i -e '/cov/d' pytest.ini || die
- # don't force -O3
- sed -i -e 's:"-O3"::' setup.py || die
- distutils-r1_python_prepare_all
-}
-
-python_compile() {
- if ! use native-extensions || [[ ${EPYTHON} == pypy3* ]]; then
- local -x MULTIDICT_NO_EXTENSIONS=1
- fi
-
- distutils-r1_python_compile
-}
-
-python_test() {
- local EPYTEST_IGNORE=(
- tests/test_multidict_benchmarks.py
- tests/test_views_benchmarks.py
- )
-
- rm -rf multidict || die
-
- local cext=--c-extensions
- if ! use native-extensions || [[ ${EPYTHON} == pypy3* ]]; then
- cext=--no-c-extensions
- fi
- epytest "${cext}"
-}
diff --git a/dev-python/multidict/multidict-6.6.3.ebuild b/dev-python/multidict/multidict-6.7.0.ebuild
index b3d2223726a8..d4a2875f519f 100644
--- a/dev-python/multidict/multidict-6.6.3.ebuild
+++ b/dev-python/multidict/multidict-6.7.0.ebuild
@@ -21,7 +21,7 @@ SRC_URI="
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
IUSE="+native-extensions"
BDEPEND="
diff --git a/dev-python/narwhals/Manifest b/dev-python/narwhals/Manifest
index f8e53eb1e3be..83a773912bf4 100644
--- a/dev-python/narwhals/Manifest
+++ b/dev-python/narwhals/Manifest
@@ -1,4 +1,4 @@
-DIST narwhals-2.5.0.tar.gz 558573 BLAKE2B f09121d35150efdeb328685ac09569c852357c79d1ffd85931a4922090bc84de8ec6c7401d69d1444c84e823e2e65d79f4c3f3f5f8cab147e4e0bb081c446d02 SHA512 b33f22c05935b12aad87809cea8aeafd8f17873725b1a0665a9845f71ab4caf5caa22c6f5612b7a334eebf37efab3f971c6599bd7d93a41c21c4c0f8303447fa
-DIST narwhals-2.5.0.tar.gz.provenance 9939 BLAKE2B 3f7b0e304584d3cc18f500f9310e97af5609c598f5e4e74b01d50138b42898983611c89644682f2453eb27830893e98b02406e0a1d93086a5be6f0fc55b0b95a SHA512 f3367e78f6c0897543d208b56a886280d217fc7beff6b647892b970aa38436cb9cd70ebd899a39729040f1fa193d21c7bce36701ce078556f5d7e7381660c5b4
DIST narwhals-2.6.0.tar.gz 561649 BLAKE2B a687857f573ec262fc4ac872d728318bd232f01026c865703cdf18363023fbd3cf6feeb5964a24563d7ccbd82dc065590b4779204da5fff61e6448f784103852 SHA512 cf41582635376891f70a409e0505cee7575cb74e7df61f2e5f21a691e23f20b27091e7191bc0d88116d72363020d53d5a01bdbacfed9ed1c4c8acf1444a917b7
DIST narwhals-2.6.0.tar.gz.provenance 9653 BLAKE2B 53edab41fedc85c2f7f10f61d50fe3a391e621c5d743217fe9aded918ad8dbe03921be314807de6d9cd1d01c07402be77361d6ad271757582bef73223c64288d SHA512 5ee4999f2e00fb95510cf25a566c0306220d2a4f74eac1f0751d6e5ccc9c64ecec327562412ae977e7704462cfdcc74594cd2e40e531c356727df918bdc53b1c
+DIST narwhals-2.7.0.tar.gz 569315 BLAKE2B d46de1c1fedd58872adb7104e325b78479837d6bd2eaeef0f290f926b6d78493135267bab3b4a6d698f561fdefb918709f5fe60475bbd126025eaf516c4fe3ba SHA512 fc4334f2dd99b459b3a27698acf514d9c5ac21c753ba4099b371db6a24aff4538f3bc9f67537bc60368f6543c3169947dc120206b04bdd60996cf25bfe2c158a
+DIST narwhals-2.7.0.tar.gz.provenance 9790 BLAKE2B a1a2bf3aaed9864611e9f6bd648df67a6478c5846fb38b1ae30fcd3914305a9f3de7fdc765c821353c99f888e6f7f2504818f4b9d887554406d7757028a9403a SHA512 415b7ce737fb197ccff6340ce42c8d7a0b1005af6817267af46b68e3e517b01602a756f7800f1d48d73e462aa565480245432c3d961e18bc1eb7b9dda37da42b
diff --git a/dev-python/narwhals/narwhals-2.5.0.ebuild b/dev-python/narwhals/narwhals-2.7.0.ebuild
index f92dfab8ea90..f92dfab8ea90 100644
--- a/dev-python/narwhals/narwhals-2.5.0.ebuild
+++ b/dev-python/narwhals/narwhals-2.7.0.ebuild
diff --git a/dev-python/pymongo/files/pymongo-4.15.2-backports.patch b/dev-python/pymongo/files/pymongo-4.15.2-backports.patch
new file mode 100644
index 000000000000..0bc1a4c49256
--- /dev/null
+++ b/dev-python/pymongo/files/pymongo-4.15.2-backports.patch
@@ -0,0 +1,212 @@
+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.2-r1.ebuild b/dev-python/pymongo/pymongo-4.15.2-r1.ebuild
new file mode 100644
index 000000000000..d90e53704c01
--- /dev/null
+++ b/dev-python/pymongo/pymongo-4.15.2-r1.ebuild
@@ -0,0 +1,207 @@
+# 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_{9,10,11,12,13} pypy3 )
+
+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/pyzotero/Manifest b/dev-python/pyzotero/Manifest
index f8146062ff56..cc79ff224cc8 100644
--- a/dev-python/pyzotero/Manifest
+++ b/dev-python/pyzotero/Manifest
@@ -1,2 +1,4 @@
DIST pyzotero-1.6.16.tar.gz 526904 BLAKE2B f5b385e3d22ec4a2bf9e35ea9578c60f2947fbff6edfe489e1ebbfbabf9f63d2088725be092e71a2eb4aa7c473e6008092121cf276182cb3cf7b043b6963eaed SHA512 e3ee2556f0411ad0c4f49f21630ba539cbe10fbb9deb849789a15c93a43327d5743312be8e71396e9354ee07a3edf64086680d566f45b9100a5f914effc4e5e3
DIST pyzotero-1.6.16.tar.gz.provenance 9231 BLAKE2B 7e877621d092b4b8e07a5a9eac4c9d5143d0172eeb199fba11e3f34e92f145c01ea2a66ac2e2190b231004337b51ec25d0be9f685f98615db111a1a5edd60bf5 SHA512 debdfadded065a7abdac9ff43d0417d03518f876355515881dcbd1b7901c6b68240695d408c20a9b3b8f105f800a1a2066e83192b1b91ef081fc91b1121a84da
+DIST pyzotero-1.6.17.tar.gz 527253 BLAKE2B 502c6e9a850b026bdb965b19e788068652242b476a8952d8922272dd7104a232f8f52f97d3e2b480cfc58a2c1bb9fb77e2913474c6faf16e295fa6cf99be6959 SHA512 c972b69e3e30f4e21eed6c5d4f0697ba913dc5543480264441250572a3ea9295a79c4b565555861bd6aa2fcf324a1bb24ca9849ec0f0f5edb7b6d2a82c701c4e
+DIST pyzotero-1.6.17.tar.gz.provenance 9407 BLAKE2B 903dad16065eed019964b12e5220e1bd0ef9a0b1d00c4b2fb665ce47927d3b009ad71dcc8b9a374344a11d8e7e152277be44dd392d6a188eb8d3cda0b0606859 SHA512 4ee4325326dc69a8365d153fd377f7bbf75d849794dfddd43a30ee7c2bcaf68b0c0139d91ea2a2de4b7c847f4effe9230c83fab477badc03f26a1efcb9bb94f2
diff --git a/dev-python/pyzotero/pyzotero-1.6.17.ebuild b/dev-python/pyzotero/pyzotero-1.6.17.ebuild
new file mode 100644
index 000000000000..820dc35c88c9
--- /dev/null
+++ b/dev-python/pyzotero/pyzotero-1.6.17.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=uv-build
+PYPI_VERIFY_REPO=https://github.com/urschrei/pyzotero
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A Python client for the Zotero API"
+HOMEPAGE="
+ https://github.com/urschrei/pyzotero/
+ https://pypi.org/project/pyzotero/
+"
+
+LICENSE="BlueOak-1.0.0"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ app-text/zotero-bin
+ <dev-python/bibtexparser-2[${PYTHON_USEDEP}]
+ >=dev-python/bibtexparser-1.4.3[${PYTHON_USEDEP}]
+ >=dev-python/feedparser-6.0.12[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.28.1[${PYTHON_USEDEP}]
+ >=dev-python/whenever-0.8.8[${PYTHON_USEDEP}]
+"
+
+BDEPEND="
+ >=dev-python/trove-classifiers-2024.7.2[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/httpretty-1.1.4[${PYTHON_USEDEP}]
+ dev-python/ipython[${PYTHON_USEDEP}]
+ >=dev-python/pytz-2025.2[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ >=dev-python/tzdata-2025.2[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_sphinx doc \
+ dev-python/sphinx-rtd-theme
+EPYTEST_PLUGINS=( pytest-asyncio )
+distutils_enable_tests pytest
+
+python_test() {
+ epytest -o addopts=
+}
diff --git a/dev-python/sphinx-autoapi/Manifest b/dev-python/sphinx-autoapi/Manifest
index 5a87b6bcab44..7dfbd85a51f2 100644
--- a/dev-python/sphinx-autoapi/Manifest
+++ b/dev-python/sphinx-autoapi/Manifest
@@ -1 +1,2 @@
DIST sphinx-autoapi-3.6.0.gh.tar.gz 73411 BLAKE2B 0fbe15c138d72a32d224248d94652763d8303ff014dbf2d35d878232e021ebcd9a7b72a792dc4d81aea182ea9cc812290f70954242bffa989d08e1427bb3c94b SHA512 9b671e3ca66ae40e95ce6df89952e9c1f2bf644087d9deaeb0e305de217fc8154445ff947ad9806949603f0956d95ae6d97c711fea52dcd44aa8f828b74f6c3d
+DIST sphinx-autoapi-3.6.1.gh.tar.gz 74022 BLAKE2B 8e0ff4ce50454d49db409edcf842fff24bd1362cc048cf28a26fc4bbe128cbd0f0ba372ffb647db66d8b5d980c26db7b7192f05778014b7ec8ab2be7e2c33779 SHA512 42866432a55f5582eb7d2a1ea87ff7a5a34168cc3d0930d6f4c9d5f8c13f45db3ab8ff1290f12cc902906147c591bc7313448bbe39d10347a5381612b74729d9
diff --git a/dev-python/sphinx-autoapi/sphinx-autoapi-3.6.1.ebuild b/dev-python/sphinx-autoapi/sphinx-autoapi-3.6.1.ebuild
new file mode 100644
index 000000000000..34474b10e9e5
--- /dev/null
+++ b/dev-python/sphinx-autoapi/sphinx-autoapi-3.6.1.ebuild
@@ -0,0 +1,57 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit distutils-r1
+
+DESCRIPTION="A new approach to API documentation in Sphinx"
+HOMEPAGE="
+ https://sphinx-autoapi.readthedocs.io/
+ https://github.com/readthedocs/sphinx-autoapi/
+ https://pypi.org/project/sphinx-autoapi/
+"
+# sdist is missing docs, as of 2.1.0
+SRC_URI="
+ https://github.com/readthedocs/sphinx-autoapi/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+
+RDEPEND="
+ >=dev-python/astroid-3.0.0[${PYTHON_USEDEP}]
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ >=dev-python/sphinx-7.4.0[${PYTHON_USEDEP}]
+"
+
+BDEPEND+="
+ test? (
+ dev-python/beautifulsoup4[${PYTHON_USEDEP}]
+ )
+"
+
+DOCS=( README.rst CHANGELOG.rst )
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Internet
+ tests/python/test_pyintegration.py::TestPEP695::test_integration
+ tests/python/test_pyintegration.py::TestPipeUnionModule::test_integration
+ "tests/test_integration.py::TestExtensionErrors::test_extension_setup_errors[dotnetexample"
+)
+
+src_prepare() {
+ distutils-r1_src_prepare
+
+ # remove conflicting pins
+ sed -i -e 's:~=:>=:' pyproject.toml || die
+}
diff --git a/dev-python/webtest/Manifest b/dev-python/webtest/Manifest
index 6e822e3d7977..3a3c2f25a615 100644
--- a/dev-python/webtest/Manifest
+++ b/dev-python/webtest/Manifest
@@ -1 +1,2 @@
DIST webtest-3.0.6.tar.gz 80151 BLAKE2B fde505862a0c7a87923fd7ed70748c045076c9fe70323099ef975153eeba5996cf84534e7acca7a97ad3c1a1a258351e02dd850be1826032da0edd7b0c27c31f SHA512 02341bac9e65bf736954ecaf34245afdae05a45e2e17d36ba5ba8be732e35938aab8a0f7ef58e260bc5f2d3667c87666b985e39de4006ed7cb4be2237c0441d9
+DIST webtest-3.0.7.tar.gz 80260 BLAKE2B b004cdc05d5f19516d4051fd6246e839635c3e980aae075bb4b491f993d9e9c81b78d4fb1e113ff4a3e17739ed56a121981e2081b5300424ae234aeefb81d38b SHA512 fe9d897964179f7921831da50dd7812785190228bbf0dfe1219169163da760b67365e7334c271f07b8a7a3792dce6c320aa8342cf48727b4c49401e6ad05212a
diff --git a/dev-python/webtest/webtest-3.0.7.ebuild b/dev-python/webtest/webtest-3.0.7.ebuild
new file mode 100644
index 000000000000..81bbaae2fd2f
--- /dev/null
+++ b/dev-python/webtest/webtest-3.0.7.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYPI_PN="WebTest"
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Helper to test WSGI applications"
+HOMEPAGE="
+ https://docs.pylonsproject.org/projects/webtest/en/latest/
+ https://github.com/Pylons/webtest/
+ https://pypi.org/project/WebTest/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos"
+
+RDEPEND="
+ dev-python/paste[${PYTHON_USEDEP}]
+ dev-python/pastedeploy[${PYTHON_USEDEP}]
+ >=dev-python/webob-1.2[${PYTHON_USEDEP}]
+ >=dev-python/waitress-3.0.2[${PYTHON_USEDEP}]
+ dev-python/beautifulsoup4[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/pyquery[${PYTHON_USEDEP}]
+ dev-python/wsgiproxy2[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/legacy-cgi[${PYTHON_USEDEP}]
+ ' 3.{13..14})
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/webtest-2.0.33-no-pylons-theme.patch"
+)
+
+distutils_enable_sphinx docs
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
diff --git a/dev-python/xarray/Manifest b/dev-python/xarray/Manifest
index 1a0a4deaf859..5b9f5c6151af 100644
--- a/dev-python/xarray/Manifest
+++ b/dev-python/xarray/Manifest
@@ -1,6 +1,5 @@
+DIST xarray-2025.10.0.tar.gz 3058084 BLAKE2B 72df811cb7d7b0af3e6a718564e1061e45d116f108c8d3e431ec91fa0f514451588bd060c9243e773e6f4863294a388c0d48e1322f91a04144bccd40d8f1cc02 SHA512 03f1d3e6c124d85e84ba72ce941381c40dd39aab5ad413f129a6fb52bd0241b3d4a2105a72c5a5463945619b2d751658692e0ff38da20cc9df362eb480d7f9d2
DIST xarray-2025.6.1.tar.gz 3003185 BLAKE2B a75f68947922e922dad94dc6ab5454d9d2b2ec993e5fd06d760b2e3685b3feda2a88fb879e7ebb353b35dea5540fa8899eb8cba33ab0e5f9b59cb3fd885de1af SHA512 4fc7980f843f86c8e83015fbf9ea2c8440b046faaa1589a605cf1e2f64f9380e28e157c8afda5c0058b3fe8cfe01122ba8582f5d61b9f0eabdf7107ce6d81c0c
-DIST xarray-2025.7.0.tar.gz 3005754 BLAKE2B 5e1cf6f1a845a9d38fee6f639016c79b14c10922fa96d241cea0a0a35d2c784ce98cfeb70ea49e03de0fd82d966e9656482caa380b48dbace7cf26b31a34b2fb SHA512 3cfe560c261cdd6a6c64cf100951e92cf63fff835dfa82ee7d1c7578ff808706905fbc2a1ae65a0db1c5abead203be43aff4771420f6851bfc357bacca4ffc95
DIST xarray-2025.7.1.tar.gz 3013717 BLAKE2B 37abbeec6736745a9a0cc098bfdb36b76c5b07a1f762a3207e7a69bda1670ad464c328daabcb5845f65dcb0b9901f045c633fb12fed4524bcc7dacfcc259e65b SHA512 446e50cfa16a3ba54124dc9417203ea96f6232e05515de38dc191b06ee417e165fd2faefaf4718eddb9620d32675abc6c2125ac7555759eb003263a70662cb7e
DIST xarray-2025.8.0.tar.gz 3034425 BLAKE2B 089eecd4b8928bcc4cae2aa590a06f4d8b45b2886f1cb7f26114f97ea55914fecf83e58eec637c83123e1d81ff2bfb92f1d4ac18161b39495beb4975af71f255 SHA512 2ace4ae6736a5cde298f7d0da6b704326fa5b28d758744e0db022cc3e9ea6514ac447c5d7762fc273bc192ad7b31517edc0cda7a16302c3e9a63d5c952b1bcd2
-DIST xarray-2025.9.0.tar.gz 3040318 BLAKE2B dd4482cb5263339360ae4bfc6046dfb7fe32748927af0a913cabd77699f74fff3f6ad4405a496e6fb98a78c752af5ffc89c69a734e2870458ece3d67c77c8fab SHA512 0cc572de58c59badb383d20292cf092500192e1723c12423f7d4c87e110feb08156cff71c136e45dd35eb70941a55e44a88774b698d09ecd083a882a207317e1
DIST xarray-2025.9.1.tar.gz 3057322 BLAKE2B a62f1d69735f0d7776000862a4245ead49df1aa200f05fb6be5f1aec05acf43da0e5bf7c7c99a081cc0b0b22bea030b084a24853ff8bc87a0ff520bbe6dffe7f SHA512 dd720d19a766be6ffe46c6386037ff914e983168bcda8c7d50647039cae618f8e7bf3a89bf9b486ced6457789e07f48e346134c6b08aadbe5f44df6dbde59df6
diff --git a/dev-python/xarray/xarray-2025.9.0.ebuild b/dev-python/xarray/xarray-2025.10.0.ebuild
index 0dc4a4299df0..15976e697523 100644
--- a/dev-python/xarray/xarray-2025.9.0.ebuild
+++ b/dev-python/xarray/xarray-2025.10.0.ebuild
@@ -63,6 +63,8 @@ python_test() {
'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_zstd]'
# requires h5netcdf package
xarray/tests/test_backends_datatree.py::TestNetCDF4DatatreeIO::test_open_datatree_specific_group
+ # NotImplementedError, seriously?
+ xarray/tests/test_backends.py::TestGenericNetCDF4InMemory::test_roundtrip_group_via_memoryview
)
if ! has_version ">=dev-python/scipy-1.4[${PYTHON_USEDEP}]" ; then
diff --git a/dev-python/xarray/xarray-2025.7.0.ebuild b/dev-python/xarray/xarray-2025.7.0.ebuild
deleted file mode 100644
index 1e98d86dfb2d..000000000000
--- a/dev-python/xarray/xarray-2025.7.0.ebuild
+++ /dev/null
@@ -1,121 +0,0 @@
-# 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_{9,10,11,12,13} )
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="N-D labeled arrays and datasets in Python"
-HOMEPAGE="
- https://xarray.pydata.org/
- https://github.com/pydata/xarray/
- https://pypi.org/project/xarray/
-"
-
-LICENSE="Apache-2.0"
-SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
-IUSE="big-endian"
-
-RDEPEND="
- >=dev-python/numpy-1.26[${PYTHON_USEDEP}]
- >=dev-python/pandas-2.2[${PYTHON_USEDEP}]
- >=dev-python/packaging-24.1[${PYTHON_USEDEP}]
-"
-# note: most of the test dependencies are optional
-BDEPEND="
- dev-python/setuptools-scm[${PYTHON_USEDEP}]
- test? (
- dev-python/bottleneck[${PYTHON_USEDEP}]
- dev-python/cftime[${PYTHON_USEDEP}]
- dev-python/hypothesis[${PYTHON_USEDEP}]
- dev-python/matplotlib[${PYTHON_USEDEP}]
- !riscv? ( !x86? (
- >=dev-python/netcdf4-1.6.0[bzip2,szip,${PYTHON_USEDEP}]
- ) )
- dev-python/toolz[${PYTHON_USEDEP}]
- !hppa? ( >=dev-python/scipy-1.13[${PYTHON_USEDEP}] )
- )
-"
-
-EPYTEST_PLUGINS=()
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-python_test() {
- local EPYTEST_DESELECT=(
- # TODO: these fail with filter errors even if netcdf4 is built
- # with blosc/zstd support
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[zstd]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_lz]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_lz4]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_lz4hc]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_zlib]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_compression_encoding[blosc_zstd]'
- )
-
- if ! has_version ">=dev-python/scipy-1.4[${PYTHON_USEDEP}]" ; then
- EPYTEST_DESELECT+=(
- 'xarray/tests/test_missing.py::test_interpolate_na_2d[coords1]'
- )
-
- if ! has_version "dev-python/scipy[${PYTHON_USEDEP}]" ; then
- EPYTEST_DESELECT+=(
- xarray/tests/test_calendar_ops.py::test_interp_calendar
- )
- fi
- fi
-
- if use big-endian ; then
- EPYTEST_DESELECT+=(
- # Appears to be a numpy issue in display? See bug #916460.
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1677-09-21T00:12:43.145224193-ns-int64-20-True]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1970-09-21T00:12:44.145224808-ns-float64-1e+30-True]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1677-09-21T00:12:43.145225216-ns-float64--9.223372036854776e+18-True]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1677-09-21T00:12:43.145224193-ns-int64-None-False]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1677-09-21T00:12:43.145225-us-int64-None-False]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1970-01-01T00:00:01.000001-us-int64-None-False]'
- 'xarray/tests/test_coding_times.py::test_roundtrip_datetime64_nanosecond_precision[1677-09-21T00:21:52.901038080-ns-float32-20.0-True]'
- )
- fi
-
- if [[ ${ABI} != *64* ]]; then
- EPYTEST_DESELECT+=(
- # these tests hardcode object sizes for 64-bit arches
- # https://github.com/pydata/xarray/issues/9127
- xarray/tests/test_dataarray.py::TestDataArray::test_repr_multiindex
- xarray/tests/test_dataarray.py::TestDataArray::test_repr_multiindex_long
- xarray/tests/test_dataset.py::TestDataset::test_repr
- xarray/tests/test_dataset.py::TestDataset::test_repr_multiindex
- xarray/tests/test_datatree.py::TestRepr::test_doc_example
- xarray/tests/test_datatree.py::TestRepr::test_repr_truncates_nodes
- xarray/tests/test_formatting.py::test_array_repr_dtypes_unix
-
- # converting timestamps into ns, causing an overflow
- xarray/tests/test_cftimeindex.py::test_asi8
- xarray/tests/test_coding_times.py::test_decode_cf_time_bounds
- xarray/tests/test_coding_times.py::test_use_cftime_false_standard_calendar_in_range
- xarray/tests/test_coding_times.py::test_decode_cf_datetime_non_standard_units
- )
- fi
-
- case ${ARCH} in
- arm64)
- EPYTEST_DESELECT+=(
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_roundtrip_mask_and_scale[dtype0-create_unsigned_false_masked_scaled_data-create_encoded_unsigned_false_masked_scaled_data]'
- 'xarray/tests/test_backends.py::TestNetCDF4Data::test_roundtrip_mask_and_scale[dtype1-create_unsigned_false_masked_scaled_data-create_encoded_unsigned_false_masked_scaled_data]'
- )
- ;;
- esac
-
- if ! has_version "dev-python/seaborn[${PYTHON_USEDEP}]"; then
- EPYTEST_DESELECT+=(
- xarray/tests/test_plot.py::TestContour::test_colors
- )
- fi
-
- epytest -o addopts=
-}
diff --git a/dev-python/yarl/Manifest b/dev-python/yarl/Manifest
index 3527492da14b..143dc9bad2d2 100644
--- a/dev-python/yarl/Manifest
+++ b/dev-python/yarl/Manifest
@@ -1,2 +1,3 @@
DIST yarl-1.20.1.tar.gz 186428 BLAKE2B 904bc2fba743d7cc0f313166477ff93288816853d7831ed25b3589749878b78c5c10ccb0bb8d11cbad66cea8c5c8eab4fa32ff0542351cf1351a7de5c235ebd6 SHA512 2e7d2c69ddf07f04468b40dc929f5c54bcc3026386fa5fe98bc7f8b8f8aafee05d1df00a42377767e8a9e839f76b8cf569b8e373b3e94af6a954e68a4031fcc1
DIST yarl-1.21.0.tar.gz 187069 BLAKE2B cab583d33154cacb73bc0297a0a53e220dbde17f9d4812b8a6a4b1e69d8589c102710a2f6694f802b6ee944fc21a69a941bb8ce333a9c5bafecda9d11c4c4050 SHA512 e37316deae6e503b7cdb8b01c767d725776cedbb189735575d18376480a6de875307b436fcbe2dba46095b4ca340c57e51d6247b452c00a9f9dd54477b70d483
+DIST yarl-1.22.0.tar.gz 187169 BLAKE2B ea3eecf2e2cf25f25c9aab1608facd2c4a3553418170e66ede5e2730eedd628a019250394e16a2aed57b9bfd4f43981f7be709d5aff44f5394f244c3ac6b31ce SHA512 232b698ee4c62b62db51e5ea7db3974b80f70fc7e006700f4ab348d1ac666172a64106f18f9d213a5f6ee88b189359701f51c26795693fc183f992e65f1ec4c9
diff --git a/dev-python/yarl/yarl-1.22.0.ebuild b/dev-python/yarl/yarl-1.22.0.ebuild
new file mode 100644
index 000000000000..9776d49e5af3
--- /dev/null
+++ b/dev-python/yarl/yarl-1.22.0.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Yet another URL library"
+HOMEPAGE="
+ https://github.com/aio-libs/yarl/
+ https://pypi.org/project/yarl/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="+native-extensions"
+
+RDEPEND="
+ >=dev-python/idna-2.0[${PYTHON_USEDEP}]
+ >=dev-python/multidict-4.0[${PYTHON_USEDEP}]
+ >=dev-python/propcache-0.2.1[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ native-extensions? (
+ dev-python/cython[${PYTHON_USEDEP}]
+ )
+ dev-python/expandvars[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=( hypothesis )
+distutils_enable_tests pytest
+
+python_compile() {
+ local -x YARL_NO_EXTENSIONS=0
+ if ! use native-extensions || [[ ${EPYTHON} != python* ]]; then
+ YARL_NO_EXTENSIONS=1
+ fi
+ distutils-r1_python_compile
+}
+
+python_test() {
+ local EPYTEST_IGNORE=(
+ # benchmarks
+ tests/test_quoting_benchmarks.py
+ tests/test_url_benchmarks.py
+ )
+
+ local opts=()
+ # note different boolean logic than for backend (sigh)
+ local -x YARL_NO_EXTENSIONS=
+ if ! use native-extensions || [[ ${EPYTHON} != python* ]]; then
+ YARL_NO_EXTENSIONS=1
+ fi
+
+ rm -rf yarl || die
+ epytest -o addopts= "${opts[@]}"
+}