summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-04-17 19:47:59 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-04-17 19:47:59 +0000
commitec644255f79107f962c01c2f13d351c6a7a0b146 (patch)
treecb41e7c494854eabb60e7437c11b3a8ceb3aa83e /dev-python
parent4cf2d660778c5ab561405ad76ec790eeca9fa2c4 (diff)
downloadbaldeagleos-repo-ec644255f79107f962c01c2f13d351c6a7a0b146.tar.gz
baldeagleos-repo-ec644255f79107f962c01c2f13d351c6a7a0b146.tar.xz
baldeagleos-repo-ec644255f79107f962c01c2f13d351c6a7a0b146.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/aiohttp/Manifest1
-rw-r--r--dev-python/aiohttp/aiohttp-3.9.5.ebuild111
-rw-r--r--dev-python/django-otp/Manifest1
-rw-r--r--dev-python/django-otp/django-otp-1.5.0.ebuild46
-rw-r--r--dev-python/guiqwt/guiqwt-4.4.5-r1.ebuild6
-rw-r--r--dev-python/guiqwt/guiqwt-4.4.5.ebuild24
-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.ebuild4
-rw-r--r--dev-python/langdetect/metadata.xml10
-rw-r--r--dev-python/meson-python/Manifest1
-rw-r--r--dev-python/meson-python/files/meson-python-0.16.0-pyproject-metadata-0.8.patch68
-rw-r--r--dev-python/meson-python/meson-python-0.16.0.ebuild53
-rw-r--r--dev-python/openstacksdk/Manifest1
-rw-r--r--dev-python/openstacksdk/openstacksdk-3.1.0.ebuild91
-rw-r--r--dev-python/peewee/Manifest1
-rw-r--r--dev-python/peewee/peewee-3.17.2.ebuild72
-rw-r--r--dev-python/pyproject-metadata/Manifest1
-rw-r--r--dev-python/pyproject-metadata/pyproject-metadata-0.8.0_rc2.ebuild32
-rw-r--r--dev-python/pywlroots/Manifest1
-rw-r--r--dev-python/pywlroots/pywlroots-0.16.7.ebuild55
-rw-r--r--dev-python/regex/Manifest1
-rw-r--r--dev-python/regex/regex-2024.4.16.ebuild37
-rw-r--r--dev-python/shapely/Manifest1
-rw-r--r--dev-python/shapely/shapely-2.0.4.ebuild50
-rw-r--r--dev-python/sqlalchemy/Manifest2
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-1.4.51.ebuild107
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-1.4.52.ebuild2
-rw-r--r--dev-python/sqlalchemy/sqlalchemy-2.0.28.ebuild111
-rw-r--r--dev-python/statsmodels/Manifest1
-rw-r--r--dev-python/statsmodels/statsmodels-0.14.2.ebuild86
-rw-r--r--dev-python/urllib3/Manifest2
-rw-r--r--dev-python/urllib3/files/urllib3-2.2.0-pytest-8.patch112
-rw-r--r--dev-python/urllib3/files/urllib3-2.2.0-revert.patch42
-rw-r--r--dev-python/urllib3/urllib3-2.0.7.ebuild87
-rw-r--r--dev-python/urllib3/urllib3-2.2.0-r1.ebuild99
-rw-r--r--dev-python/urllib3/urllib3-2.2.1.ebuild2
-rw-r--r--dev-python/yfinance/Manifest2
-rw-r--r--dev-python/yfinance/yfinance-0.2.38.ebuild (renamed from dev-python/yfinance/yfinance-0.2.36.ebuild)0
-rw-r--r--dev-python/zenlib/Manifest1
-rw-r--r--dev-python/zenlib/zenlib-1.7.4.ebuild16
41 files changed, 745 insertions, 610 deletions
diff --git a/dev-python/aiohttp/Manifest b/dev-python/aiohttp/Manifest
index 792e71ab48ef..2921e94e6163 100644
--- a/dev-python/aiohttp/Manifest
+++ b/dev-python/aiohttp/Manifest
@@ -1,2 +1,3 @@
DIST aiohttp-3.9.3.tar.gz 7499669 BLAKE2B 0712df73af60cc9cbf12f0a4e063b6aa6da1b19b0668effe16672a4b7ca3f24cc831218ec8d4672cd86acd4335a75e16f94133dbb1bf783baf8ed96e471f3eec SHA512 6236f27b6def0c3bba1b5fc59f4af74f8076aa369cf5c1b9bd9ff9dee1c71ee49387ded812875da9450130e92d2091fd01f0608b25b03ff37e99162b89120fd7
DIST aiohttp-3.9.4.tar.gz 7500720 BLAKE2B 1f41e481590425c16ef9e797ecc78e08d00fda65b40c38e34226ada969f3114cae3f6953980d23b0e96e284f6e49fd0a84aa93c6b7a666d60690e9a9fd9c41b2 SHA512 e26e7148602d72c77fe46e0596614b448f38a9014834a72c4131d8b315dbbd401ce4e1a403ef35ea7a9ba7fafaddc42031d38b93b45464accdedf26ba99fc960
+DIST aiohttp-3.9.5.tar.gz 7504841 BLAKE2B f051ee88d45952219f72d542f1c6d0cc33c699c6c5fb5dbe3bc054ee4d0e03121b219c8c8524fd1236a8b878329b0997b8afe07d6c66074102d4a2052a8738ff SHA512 da11468a2f131275593395b052700a99cf79055a32d48327dca0f58547ad30add8cd0a375dbd831e2f06fe7a739183251e4ad69c16f3d141799bbed45a8a5dc4
diff --git a/dev-python/aiohttp/aiohttp-3.9.5.ebuild b/dev-python/aiohttp/aiohttp-3.9.5.ebuild
new file mode 100644
index 000000000000..c3e85c9398e9
--- /dev/null
+++ b/dev-python/aiohttp/aiohttp-3.9.5.ebuild
@@ -0,0 +1,111 @@
+# 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="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="test-rust"
+
+RDEPEND="
+ >=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-forked[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${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
+ # TODO
+ tests/test_client_session.py::test_request_tracing_url_params
+ )
+
+ 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,pytest_forked
+ rm -rf aiohttp || die
+ epytest --forked -m "not internal and not dev_mode"
+}
diff --git a/dev-python/django-otp/Manifest b/dev-python/django-otp/Manifest
index 302ad5a338bf..4dbbb8db1ab7 100644
--- a/dev-python/django-otp/Manifest
+++ b/dev-python/django-otp/Manifest
@@ -1,3 +1,4 @@
DIST django_otp-1.3.0.tar.gz 69013 BLAKE2B 4b6143bb8863e6c151df954a3c4ac4ecca770b1f396dd291e8634e8ad5e0755514111dac02307120e74abacf04bc681503a973bba067817c80bcffc8c462c592 SHA512 ef63c5db096ce7d1b10d6b2a99ab6db46b779d4221f509452921fcbf338decbd5c799aec7476587a03b34288ef3f5ff1964dee72105b65f04a22cbd53d445fa4
DIST django_otp-1.4.0.tar.gz 71690 BLAKE2B 61144122ab6dec438dcc3136e8856b4d66c598e811f1fdd21e5ba77a907ae5bda88fd543a1c87a165d9ba30ce2bcd7415b04d598719ecb46f2f3ddc15a342aa0 SHA512 df4a11d3cb6a55e2506815b81c7e8cc3e9c272afd8d1d9ba94fd1336467b177ea3eb1e89129c3c727d7ce74ce159e5d153a22e0be2d3d638c8357653b22dba56
DIST django_otp-1.4.1.tar.gz 71847 BLAKE2B 49764cd1957ab2a6644780c1c6a0947b20bb4a0c1ca286907122a8b47f937aca8d1d2e480f7a309b546ac503cb0c3b1ea3e03532e7d6c38fe8db1606406eda71 SHA512 bb041a6ecd93dbad4f83d6593dfbc2f4768e1a3e68df332a61ed9ce483a8ec7090179a6865b128d02a2fc5ba2b42cd63dc16595a7b98e2728733fc274d506b1a
+DIST django_otp-1.5.0.tar.gz 72265 BLAKE2B e2a687a287b5e7b4f5c9370b280bd60b5e9cd62ff6fea4187988acc703ce5cc61f4ee094026c07391343983d87d9c0cb1ff4fa51d10a3e7a4d8da4da182fcb4b SHA512 0169804992b155dfa88fbc0d695091f3f03225f28a104c595e7790f174ff3f4943280b7a3dbb3d4c263cc1bad0ea0370e4749d8d0b1df1e3675881365fc15dfe
diff --git a/dev-python/django-otp/django-otp-1.5.0.ebuild b/dev-python/django-otp/django-otp-1.5.0.ebuild
new file mode 100644
index 000000000000..10a9804b2740
--- /dev/null
+++ b/dev-python/django-otp/django-otp-1.5.0.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Django framework adding two-factor authentication using one-time passwords"
+HOMEPAGE="
+ https://github.com/django-otp/django-otp/
+ https://pypi.org/project/django-otp/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/django-3.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ $(python_gen_impl_dep sqlite)
+ dev-python/freezegun[${PYTHON_USEDEP}]
+ || (
+ dev-python/qrcode[${PYTHON_USEDEP}]
+ dev-python/segno[${PYTHON_USEDEP}]
+ )
+ $(python_gen_cond_dep '
+ dev-python/tomli[${PYTHON_USEDEP}]
+ ' 3.10)
+ ${RDEPEND}
+ )
+"
+
+python_test() {
+ local -x PYTHONPATH=test:${PYTHONPATH}
+ local -x DJANGO_SETTINGS_MODULE=test_project.settings
+ "${EPYTHON}" -m django test -v 2 django_otp ||
+ die "Tests fail with ${EPYTHON}"
+}
diff --git a/dev-python/guiqwt/guiqwt-4.4.5-r1.ebuild b/dev-python/guiqwt/guiqwt-4.4.5-r1.ebuild
index ee202729f5fa..7d0a9cd0fed7 100644
--- a/dev-python/guiqwt/guiqwt-4.4.5-r1.ebuild
+++ b/dev-python/guiqwt/guiqwt-4.4.5-r1.ebuild
@@ -3,6 +3,7 @@
EAPI=8
+DISTUTILS_EXT=1
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{8,9,10,11,12} )
@@ -14,7 +15,8 @@ SRC_URI="https://github.com/PlotPyStack/guiqwt/archive/refs/tags/v${PV}.tar.gz -
LICENSE="MIT"
SLOT="0"
-RETRICT="test"
+KEYWORDS="~amd64 ~x86"
+RESTRICT="test"
RDEPEND="
dev-python/cython[${PYTHON_USEDEP}]
@@ -25,5 +27,3 @@ RDEPEND="
dev-python/QtPy[${PYTHON_USEDEP}]
dev-python/scipy[${PYTHON_USEDEP}]
"
-
-KEYWORDS="~amd64 ~x86"
diff --git a/dev-python/guiqwt/guiqwt-4.4.5.ebuild b/dev-python/guiqwt/guiqwt-4.4.5.ebuild
deleted file mode 100644
index 32699ffd5172..000000000000
--- a/dev-python/guiqwt/guiqwt-4.4.5.ebuild
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 1999-2019 Gentoo Foundation
-# 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="Efficient 2D plotting Python library based on PythonQwt "
-HOMEPAGE="https://pypi.python.org/pypi/guiqwt"
-SRC_URI="https://github.com/PlotPyStack/guiqwt/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz"
-LICENSE="MIT"
-
-SLOT="0"
-RETRICT="test"
-
-RDEPEND="
- dev-python/cython[${PYTHON_USEDEP}]
- dev-python/guidata[${PYTHON_USEDEP}]
-"
-
-KEYWORDS="~amd64 ~x86"
diff --git a/dev-python/langdetect/Manifest b/dev-python/langdetect/Manifest
index a11d7c268c91..e9da2ac43cac 100644
--- a/dev-python/langdetect/Manifest
+++ b/dev-python/langdetect/Manifest
@@ -1 +1,3 @@
DIST langdetect-1.0.9.tar.gz 981474 BLAKE2B ea8a9c3f16a2987c080742473bff4f2c1503f53fb3c2b40b0b1d6212bb6133ea22dce7864ffcfb8968c3a46b157d45cb3e2cf6f84bdbed0266cc716a853b032c SHA512 7558d674c47b080c79e43a00a25d2c7f77188cf60bea2cecb3bebb803d75e1aa42b43c74bd26ea1b541f4cb927421908882cbec01a91f0913984217e71ccc8db
+EBUILD langdetect-1.0.9.ebuild 493 BLAKE2B 0df8bce19bc80f79f8e76bcef5a4c2caf333365fe0cb9a3c076b7858bceded5a3e58921474f866a2709dd657b7ed330c1ec4a7f9d7bab0fcf1bc92d77cabc32d SHA512 ea2a1adcb133ac5fc951ba1aa90ef1ce3dfcc424e59727591763d4875aa044a74188be2d15fd89c6b2e83ed6ea04ec3d9851ed584ae79d2c2c127bde7d994b48
+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
deleted file mode 100644
index 637368d2f237..000000000000
--- a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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 630fe63c6f53..c09b7356f549 100644
--- a/dev-python/langdetect/langdetect-1.0.9.ebuild
+++ b/dev-python/langdetect/langdetect-1.0.9.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 Gentoo Authors
+# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -19,6 +19,4 @@ 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 736a1167c898..020e07f2a3dd 100644
--- a/dev-python/langdetect/metadata.xml
+++ b/dev-python/langdetect/metadata.xml
@@ -1,6 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
-
- <origin>gentoo-guru-overlay</origin>
+ <maintainer type="person">
+ <email>marcin.deranek@slonko.net</email>
+ <name>Marcin Deranek</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/Mimino666/langdetect/issues</bugs-to>
+ </upstream>
+ <origin>slonko-overlay</origin>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/meson-python/Manifest b/dev-python/meson-python/Manifest
index 375d728e0b2c..bdef3c3bfc09 100644
--- a/dev-python/meson-python/Manifest
+++ b/dev-python/meson-python/Manifest
@@ -1 +1,2 @@
DIST meson-python-0.15.0.gh.tar.gz 73063 BLAKE2B 280c01b08fb8264d268797d199b59f7d02cac88e49333de4a38f9e22a1e724586b7ffcddc4e9a411c0d660560892134cb742136334aad8caacd9db37580fce8f SHA512 f1fce89bb0a3d279b9900c4ecec78e5f24da92d72f64ebf6c27648b4201a75a65204c3fac08aaa3e8d70dbeef245c3235e39994c7c0b9cba27c0df528211c7f7
+DIST meson-python-0.16.0.gh.tar.gz 74975 BLAKE2B af74d62a4567bc0a7524e815f1bb4ef3ae7290ccea38c00c3b0013f5e7777d6a41c1631b0c1d83fdd930836599752e3bba3c381c137d275103409a986df4e040 SHA512 99ea4304f15e2e13adf031e7c8cacbbc48c0c80f42a81f9d84242b6279ac9c1a13e3f162be5f472a1e498dc7cf3cba6799bf765b3fd441ac10cd87dc0db38678
diff --git a/dev-python/meson-python/files/meson-python-0.16.0-pyproject-metadata-0.8.patch b/dev-python/meson-python/files/meson-python-0.16.0-pyproject-metadata-0.8.patch
new file mode 100644
index 000000000000..834aed4d2fb4
--- /dev/null
+++ b/dev-python/meson-python/files/meson-python-0.16.0-pyproject-metadata-0.8.patch
@@ -0,0 +1,68 @@
+From ba14bfdffceb571a5e8c1406c76b7b77634bcb7f Mon Sep 17 00:00:00 2001
+From: Daniele Nicolodi <daniele@grinta.net>
+Date: Mon, 15 Apr 2024 22:34:36 +0200
+Subject: [PATCH 2/2] TST: Adapt to changes in pyproject-metadata 0.8.0
+
+---
+ tests/test_metadata.py | 8 +++++++-
+ tests/test_sdist.py | 9 +++++++--
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/tests/test_metadata.py b/tests/test_metadata.py
+index 0c278da6..088e82f7 100644
+--- a/tests/test_metadata.py
++++ b/tests/test_metadata.py
+@@ -3,6 +3,7 @@
+ # SPDX-License-Identifier: MIT
+
+ import pathlib
++import re
+
+ import packaging.version
+ import pyproject_metadata
+@@ -48,5 +49,10 @@ def test_missing_version(package_missing_version):
+ pyproject = {'project': {
+ 'name': 'missing-version',
+ }}
+- with pytest.raises(pyproject_metadata.ConfigurationError, match='Required "project.version" field is missing'):
++ match = '|'.join((
++ re.escape('Required "project.version" field is missing'),
++ # pyproject-metatadata 0.8.0 and later
++ re.escape('Field "project.version" missing and "version" not specified in "project.dynamic"'),
++ ))
++ with pytest.raises(pyproject_metadata.ConfigurationError, match=match):
+ Metadata.from_pyproject(pyproject, pathlib.Path())
+diff --git a/tests/test_sdist.py b/tests/test_sdist.py
+index 6e337617..fb698b53 100644
+--- a/tests/test_sdist.py
++++ b/tests/test_sdist.py
+@@ -3,6 +3,7 @@
+ # SPDX-License-Identifier: MIT
+
+ import os
++import re
+ import stat
+ import sys
+ import tarfile
+@@ -30,7 +31,7 @@ def test_pep621(sdist_full_metadata):
+ with tarfile.open(sdist_full_metadata, 'r:gz') as sdist:
+ sdist_pkg_info = sdist.extractfile('full_metadata-1.2.3/PKG-INFO').read().decode()
+
+- assert sdist_pkg_info == textwrap.dedent('''\
++ metadata = re.escape(textwrap.dedent('''\
+ Metadata-Version: 2.1
+ Name: full-metadata
+ Version: 1.2.3
+@@ -65,7 +66,11 @@ def test_pep621(sdist_full_metadata):
+ # full-metadata
+
+ An example package with all of the PEP 621 metadata!
+- ''')
++ '''))
++
++ # pyproject-metadata 0.8.0 and later uses a comma to separate keywords
++ expr = metadata.replace(r'Keywords:\ full\ metadata', r'Keywords:\ full[ ,]metadata')
++ assert re.fullmatch(expr, sdist_pkg_info)
+
+
+ def test_dynamic_version(sdist_dynamic_version):
diff --git a/dev-python/meson-python/meson-python-0.16.0.ebuild b/dev-python/meson-python/meson-python-0.16.0.ebuild
new file mode 100644
index 000000000000..5328c43b5d1b
--- /dev/null
+++ b/dev-python/meson-python/meson-python-0.16.0.ebuild
@@ -0,0 +1,53 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="Meson PEP 517 Python build backend"
+HOMEPAGE="
+ https://pypi.org/project/meson-python/
+ https://github.com/mesonbuild/meson-python/
+"
+SRC_URI="
+ https://github.com/mesonbuild/meson-python/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+RDEPEND="
+ >=dev-python/pyproject-metadata-0.7.1[${PYTHON_USEDEP}]
+ >=dev-build/meson-0.63.0[${PYTHON_USEDEP}]
+ !kernel_Darwin? ( dev-util/patchelf )
+ $(python_gen_cond_dep '
+ >=dev-python/tomli-1.0.0[${PYTHON_USEDEP}]
+ ' 3.10)
+"
+BDEPEND="
+ >=dev-python/cython-0.29.34[${PYTHON_USEDEP}]
+ test? (
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-vcs/git
+ )
+"
+
+distutils_enable_tests pytest
+
+PATCHES=(
+ # https://github.com/mesonbuild/meson-python/pull/612
+ "${FILESDIR}/${P}-pyproject-metadata-0.8.patch"
+)
+
+python_test() {
+ unset NINJA
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest -p pytest_mock
+}
diff --git a/dev-python/openstacksdk/Manifest b/dev-python/openstacksdk/Manifest
index 34608131fcad..63347f14ceb9 100644
--- a/dev-python/openstacksdk/Manifest
+++ b/dev-python/openstacksdk/Manifest
@@ -1 +1,2 @@
DIST openstacksdk-3.0.0.tar.gz 1214285 BLAKE2B f28526732c624ed1417196ea15caecce434a6ec22f716349a3c2df7359fc478302723b4be24db10d502fa153ab7e7ec7d67238efecb98736927cfec4760c9f97 SHA512 33cc81b05a682503add54094da2cd96552c492181c6ea66fe85c5c6f04a98cb2ebaf1234defad95c14861e5dfff11bfa35a4084c4135241c10d719cd61ecb9c9
+DIST openstacksdk-3.1.0.tar.gz 1215965 BLAKE2B 6bf5c3f85dcc2a027af10b675f7a3c7f7cf82bccc20558c0e094def02ff07fca4952ed71240bdf29600c3ef077575c49dce0dccb1683539bef756897813f4d1a SHA512 97ef0610115e1f1534900a6003d699028c6b331af0ef95fadb27babf0bf1467a304a3cc935f07270bf597053e2536e74de79333f67d116cf0b18583a3c8db878
diff --git a/dev-python/openstacksdk/openstacksdk-3.1.0.ebuild b/dev-python/openstacksdk/openstacksdk-3.1.0.ebuild
new file mode 100644
index 000000000000..7b29b390d71d
--- /dev/null
+++ b/dev-python/openstacksdk/openstacksdk-3.1.0.ebuild
@@ -0,0 +1,91 @@
+# 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 pypi
+
+DESCRIPTION="A collection of libraries for building applications to work with OpenStack"
+HOMEPAGE="
+ https://opendev.org/openstack/openstacksdk/
+ https://github.com/openstack/openstacksdk/
+ https://pypi.org/project/openstacksdk/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
+
+RDEPEND="
+ >=dev-python/cryptography-2.7[${PYTHON_USEDEP}]
+ >=dev-python/decorator-4.4.1[${PYTHON_USEDEP}]
+ >=dev-python/dogpile-cache-0.6.5[${PYTHON_USEDEP}]
+ >=dev-python/iso8601-0.1.11[${PYTHON_USEDEP}]
+ >=dev-python/jmespath-0.9.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonpatch-1.21[${PYTHON_USEDEP}]
+ >=dev-python/keystoneauth1-3.18.0[${PYTHON_USEDEP}]
+ >=dev-python/netifaces-0.10.4[${PYTHON_USEDEP}]
+ >=dev-python/os-service-types-1.7.0[${PYTHON_USEDEP}]
+ >=dev-python/pbr-2.2.0[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-3[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-3.13[${PYTHON_USEDEP}]
+ >=dev-python/requestsexceptions-1.2.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ >=dev-python/pbr-2.2.0[${PYTHON_USEDEP}]
+ test? (
+ >=dev-python/ddt-1.0.1[${PYTHON_USEDEP}]
+ >=dev-python/fixtures-3.0.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.2.0[${PYTHON_USEDEP}]
+ >=dev-python/oslo-config-6.1.0[${PYTHON_USEDEP}]
+ >=dev-python/oslotest-3.2.0[${PYTHON_USEDEP}]
+ >=dev-python/prometheus-client-0.4.2[${PYTHON_USEDEP}]
+ >=dev-python/requests-mock-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/statsd-3.3.0[${PYTHON_USEDEP}]
+ >=dev-python/testscenarios-0.4[${PYTHON_USEDEP}]
+ >=dev-python/testtools-2.2.0[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests unittest
+
+src_prepare() {
+ # Internet?
+ sed -e 's:test_create_dynamic_large_object:_&:' \
+ -i openstack/tests/unit/cloud/test_object.py || die
+
+ # TODO
+ sed -e 's:test_generate_form:_&:' \
+ -e 's:test_create_static_large_object:_&:' \
+ -e 's:test_object_segment_retries:_&:' \
+ -e 's:test_object_segment_retry_failure:_&:' \
+ -e 's:test_slo_manifest_retry:_&:' \
+ -i openstack/tests/unit/cloud/test_object.py || die
+ sed -e 's:test_servers:_&:' \
+ -i openstack/tests/unit/test_stats.py || die
+
+ # unhappy about paths due to test runner
+ sed -e 's:test_method_not_supported:_&:' \
+ -i openstack/tests/unit/test_exceptions.py || die
+ sed -e 's:test_repr:_&:' \
+ -i openstack/tests/unit/test_resource.py || die
+
+ # requires hacking
+ rm openstack/tests/unit/test_hacking.py || die
+
+ # fragile warning-based tests
+ sed -e 's:test_unsupported_version_override:_&:' \
+ -i openstack/tests/unit/test_missing_version.py || die
+ sed -e 's:test_create_unknown_proxy:_&:' \
+ -i openstack/tests/unit/test_connection.py || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ # functional tests require cloud instance access
+ eunittest -b openstack/tests/unit
+}
diff --git a/dev-python/peewee/Manifest b/dev-python/peewee/Manifest
index 9162b9425403..107741c26da1 100644
--- a/dev-python/peewee/Manifest
+++ b/dev-python/peewee/Manifest
@@ -1 +1,2 @@
DIST peewee-3.17.1.gh.tar.gz 918980 BLAKE2B 192bdb4c8ba40c0d65f8182c4d87b6917d7758a8017977144b3455a0abdc96e6dfc2299cb9dfb967092c2619666816886b2f1fc163ee1e0607fb6ddfb6f2ae75 SHA512 7b3515949f862c96c9509edf2b1e7c8fc4947f3371421c5df8ca066f8456000471b0c2af8b906c9d826ea3bdc187b4e8676299b328160bda91ffd7f5a1b95435
+DIST peewee-3.17.2.gh.tar.gz 926852 BLAKE2B e40b049858f693d558e15c63d5bd4d7ad7978769d620f5e744df73d412f6d210c4f3bfa3c99cda9484730a3818e9ac0332131ecdc37224fdeb0ebb22100bfd21 SHA512 eaf495523170400e97416a4c3c6632f722648224f45aeba4ecc486e502324c4947fc0422acb0ba2bc8941c58b2ea920c5f48778e9d9af77aaf795035785dea01
diff --git a/dev-python/peewee/peewee-3.17.2.ebuild b/dev-python/peewee/peewee-3.17.2.ebuild
new file mode 100644
index 000000000000..e1bea70555cd
--- /dev/null
+++ b/dev-python/peewee/peewee-3.17.2.ebuild
@@ -0,0 +1,72 @@
+# 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} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1
+
+DESCRIPTION="Small Python ORM"
+HOMEPAGE="
+ https://github.com/coleifer/peewee/
+ https://pypi.org/project/peewee/
+"
+SRC_URI="
+ https://github.com/coleifer/peewee/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="examples +native-extensions test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ native-extensions? ( dev-db/sqlite:3= )
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ dev-python/cython[${PYTHON_USEDEP}]
+ test? (
+ dev-db/postgresql
+ dev-python/psycopg:0[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_sphinx docs \
+ dev-python/sphinx-rtd-theme
+
+src_compile() {
+ if ! use native-extensions; then
+ local -x NO_SQLITE=1
+ fi
+
+ distutils-r1_src_compile
+}
+
+src_test() {
+ initdb -D "${T}"/pgsql || die
+ pg_ctl -w -D "${T}"/pgsql start -o "-h '' -k '${T}'" || die
+ createdb -h "${T}" peewee_test || die
+
+ local -x PEEWEE_PSQL_HOST="${T}"
+ distutils-r1_src_test
+
+ pg_ctl -w -D "${T}"/pgsql stop || die
+}
+
+python_test() {
+ "${EPYTHON}" runtests.py -v 2 || die "tests failed under ${EPYTHON}"
+}
+
+python_install_all() {
+ use examples && DOCS=( examples/ )
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/pyproject-metadata/Manifest b/dev-python/pyproject-metadata/Manifest
index 15eebe5b4dc9..e25aa03172a9 100644
--- a/dev-python/pyproject-metadata/Manifest
+++ b/dev-python/pyproject-metadata/Manifest
@@ -1,2 +1,3 @@
DIST pyproject-metadata-0.7.1.gh.tar.gz 14138 BLAKE2B 901e0b0b07d035ee220cfdba840a2b05ec1b1dfa3184ab614621c462b049bdbe484aa2d9abc42a54964c163d360028a00ff1db2c502504d11fb6d2837bd60552 SHA512 a4cb97b6646b765016f047f8d3da388ab758dbf8acf5a8ee6ccb017c764a90c069e04effbef21f878be7f4b01a5090f24252372300ce7e3a0410a6eea5d98b66
DIST pyproject_metadata-0.8.0rc1.tar.gz 14781 BLAKE2B 38489f2b927ac3e65221be56b76dc8742c366776e26edddb29b7dd3e916d6ff342a6e48ac32a1718aecd81b1661cde8dac2c3f474d0de7780b77808c4927ef23 SHA512 d7280eb3537a6a497f09b75edd1c1fe2be8f1d8e0f7289c880e6b73020e73f1b7a8999e9787d88373dbe553d3b5fca054f06a1fac3651c25100bf83b367ec390
+DIST pyproject_metadata-0.8.0rc2.tar.gz 14865 BLAKE2B cba92b62020ac139f71cb5cec60f50153ce10ff4d3c3d1609a41881dc26036c2b0df51bbd77ed732e820ef42ea03d1a9f0d3d8f299b06cdbdf13ebfbc935eb0f SHA512 7c11f089e6061d7f75dde27ba04695d363f1ed2063e8b11ac508c3b587e76a5b4c50aa4ebbfdf9ab524b75986edb1562ed27526c352eba54c5981e70c165fa0d
diff --git a/dev-python/pyproject-metadata/pyproject-metadata-0.8.0_rc2.ebuild b/dev-python/pyproject-metadata/pyproject-metadata-0.8.0_rc2.ebuild
new file mode 100644
index 000000000000..9a56920ce2c2
--- /dev/null
+++ b/dev-python/pyproject-metadata/pyproject-metadata-0.8.0_rc2.ebuild
@@ -0,0 +1,32 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="PEP 621 metadata parsing"
+HOMEPAGE="
+ https://github.com/pypa/pyproject-metadata/
+ https://pypi.org/project/pyproject-metadata/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+RDEPEND="
+ >=dev-python/packaging-19[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ $(python_gen_cond_dep '
+ >=dev-python/tomli-1.0.0[${PYTHON_USEDEP}]
+ ' 3.10)
+ )
+"
+
+distutils_enable_tests pytest
diff --git a/dev-python/pywlroots/Manifest b/dev-python/pywlroots/Manifest
index d7589afe73e1..419d901880f2 100644
--- a/dev-python/pywlroots/Manifest
+++ b/dev-python/pywlroots/Manifest
@@ -1,2 +1,3 @@
DIST pywlroots-0.15.24.gh.tar.gz 85570 BLAKE2B 0c7ba0be6159152488785298028bb1feec20e2380357060a850dab417b3fb1fccb4a9e6cc6564d2b7f124bf4fc454789549267e9036b0b4559e5fcd4c6f06196 SHA512 b29b76cf18a65b2ef19d15ecf018a9ba44119d60ee61435967d17f06d5f7544d2117f2e9a81574734c71591a237b00c8584a5cc6d6adb928f39f11170f21ee94
DIST pywlroots-0.16.6.tar.gz 91625 BLAKE2B d8784add8266958745fb9d9ca25d47b3bd52957cef22a70b30b051aa53996a8b870d436a44c75f8a16fd7346b7ff2c00a70eb86b376294f3928ecd8807b6646e SHA512 31588ebccbd269e45374cd42067738c23bd76ea8a0304d17aff9da33c7686a5fb9c83a676575f0ad034afd2827cb8bea7eb9334e96badcc83ffede56fbf75a1b
+DIST pywlroots-0.16.7.tar.gz 98542 BLAKE2B bcc20d31e4423c6f486f6bcbfecb1db1995cc3d58e98205f63468b4b93b3f386f67ff22e8a99cd419b7b31f7c0287a61f8c4e1fed6e7af525244e94895ba55d6 SHA512 05e75f70ca6e9fcf7cfd18fb55411fbf3ef9d0b95d11afdab0ad95f2016623ac4e097b600e3d7a6f880be0edc6a1ccfaa48364ec02bd3c46c44f7c0de3fe96ac
diff --git a/dev-python/pywlroots/pywlroots-0.16.7.ebuild b/dev-python/pywlroots/pywlroots-0.16.7.ebuild
new file mode 100644
index 000000000000..54220afaeb6c
--- /dev/null
+++ b/dev-python/pywlroots/pywlroots-0.16.7.ebuild
@@ -0,0 +1,55 @@
+# 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} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python binding to the wlroots library using cffi"
+HOMEPAGE="
+ https://github.com/flacjacket/pywlroots/
+ https://pypi.org/project/pywlroots/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="X"
+
+# See README for wlroots dep
+DEPEND="
+ dev-python/cffi:=[${PYTHON_USEDEP}]
+ >=dev-python/pywayland-0.4.14[${PYTHON_USEDEP}]
+ >=dev-python/xkbcommon-0.2[${PYTHON_USEDEP}]
+ =gui-libs/wlroots-$(ver_cut 1-2)*:=[X?]
+"
+RDEPEND="
+ ${DEPEND}
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ local PATCHES=(
+ "${FILESDIR}"/${PN}-0.15.24-no-import-version-check.patch
+ )
+
+ # override automagic detection and caching that's completely broken
+ # by design; https://github.com/flacjacket/pywlroots/issues/132
+ cat > wlroots/_build.py <<-EOF || die
+ has_xwayland = $(usex X True False)
+ EOF
+ sed -e "s:return.*has_xwayland$:return $(usex X True False):" \
+ -i wlroots/ffi_build.py || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ rm -rf wlroots || die
+ epytest
+}
diff --git a/dev-python/regex/Manifest b/dev-python/regex/Manifest
index 903e954d2d78..e9f2167eb3fd 100644
--- a/dev-python/regex/Manifest
+++ b/dev-python/regex/Manifest
@@ -1 +1,2 @@
DIST regex-2023.12.25.tar.gz 394706 BLAKE2B 742abe3a3515b527465d81df8fd9404aaa6aa1545e3e6a8c4a87d72d41138caf7f63bceae8bf06b3576656a6b5577bfec51629a60fe837ad2f3a4cd60a08ac06 SHA512 ecc5916633e2acb8d8a0c5ccfdc1c612f673546c42271d5627aa92a163fa6c8fd5a30ed734a02c23fa64807aaf2f883fa51175b7f482888631f699e77d1c0e15
+DIST regex-2024.4.16.tar.gz 394724 BLAKE2B 75df2f861116ebf37845abdb0883774ac53d7d61e4cdf18128c74b4c1d5a55b86bfd447616cdb8fc14239c0a5aeaa2c7e59cb0b2b365b57185d785a3728e6dce SHA512 15da80751f1a4b000e4ea59887963aec939fc6431a672391a7f882e05ff15934b89e191d19fd388b9dd6032d2ea44f8511c0ce238e5f1d8db102a89d1866f456
diff --git a/dev-python/regex/regex-2024.4.16.ebuild b/dev-python/regex/regex-2024.4.16.ebuild
new file mode 100644
index 000000000000..39e9de8e2592
--- /dev/null
+++ b/dev-python/regex/regex-2024.4.16.ebuild
@@ -0,0 +1,37 @@
+# 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
+# pypy isn't supported upstream because of its UTF8 representation for strings
+# See https://github.com/mrabarnett/mrab-regex/issues/521#issuecomment-1936260187.
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Alternative regular expression module to replace re"
+HOMEPAGE="
+ https://github.com/mrabarnett/mrab-regex/
+ https://pypi.org/project/regex/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+IUSE="doc"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2021.4.4-pypy3-fix-test_empty_array.patch"
+ "${FILESDIR}/${PN}-2021.4.4-pypy3-fix-test_issue_18468.patch"
+)
+
+distutils_enable_tests unittest
+
+python_install_all() {
+ use doc && local HTML_DOCS=( docs/Features.html )
+ local DOCS=( README.rst docs/*.rst )
+
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/shapely/Manifest b/dev-python/shapely/Manifest
index c58278929be0..0934e8098cb6 100644
--- a/dev-python/shapely/Manifest
+++ b/dev-python/shapely/Manifest
@@ -1 +1,2 @@
DIST shapely-2.0.3.gh.tar.gz 330889 BLAKE2B 32b56fb6517ee1831f2a93a54b2844e71fb860b3d0de992c9c16ab3e028ade8f6a0ecb5a5c7c8104637111486cec24ecbeb6fe0cf1a1f5282f8bc0b2c73a112a SHA512 862c9af9a40ddc759094375689327298979cb19cde6e4fbd0edc7e6bd0ed5296960628a4be7030bedfecaa8d3dd77bc1e1bac137d698530fea055ddc914e2ab8
+DIST shapely-2.0.4.gh.tar.gz 331588 BLAKE2B 4b7f8afa8e4358ed473c6172c340520a4cdf7ab76752c12a96070e88834c0b44fa87b0815fecbe337f012ca1d15bc3f38cb59ef23cf589d4e3e8f2ecbafb5660 SHA512 497bb6d1b3fbfc5758c167e984bb57f52746dae47d7d365e6f13e3879beced8194aea9119c287c8eadf2f74e038e2dbb07e906177f521fab195edcb4b7a9bdbb
diff --git a/dev-python/shapely/shapely-2.0.4.ebuild b/dev-python/shapely/shapely-2.0.4.ebuild
new file mode 100644
index 000000000000..80acbe3d4ef0
--- /dev/null
+++ b/dev-python/shapely/shapely-2.0.4.ebuild
@@ -0,0 +1,50 @@
+# 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} )
+
+inherit distutils-r1
+
+MY_P=${P/_p/.post}
+DESCRIPTION="Geometric objects, predicates, and operations"
+HOMEPAGE="
+ https://pypi.org/project/shapely/
+ https://github.com/shapely/shapely/
+"
+SRC_URI="
+ https://github.com/shapely/shapely/archive/${PV/_p/.post}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+DEPEND="
+ >=sci-libs/geos-3.9
+"
+RDEPEND="
+ ${DEPEND}
+ dev-python/numpy[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${DEPEND}
+ >=dev-python/cython-0.29.32[${PYTHON_USEDEP}]
+ dev-python/packaging[${PYTHON_USEDEP}]
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.0.2-c99.patch
+)
+
+distutils_enable_tests pytest
+
+python_test() {
+ rm -rf shapely || die
+ epytest --pyargs shapely
+}
diff --git a/dev-python/sqlalchemy/Manifest b/dev-python/sqlalchemy/Manifest
index d14837c4673c..74ea861af240 100644
--- a/dev-python/sqlalchemy/Manifest
+++ b/dev-python/sqlalchemy/Manifest
@@ -1,5 +1,3 @@
-DIST SQLAlchemy-1.4.51.tar.gz 8521574 BLAKE2B 216550225c11d5367e5a50ec321a09078b4677973cf33eee1874beb9f855cfeb629a6df4d05e8ecc5b22052628de5cae2e468d18d50502a4560bd4ca7d85ab7d SHA512 be27a41f442428cdb5cc6a20af2de9424384457475d16a7d7167b718256e208766e2ba8d53bef2b314aafe87b3d9b0c5f9af6e4c03f53fb194671cfaca6e50b5
DIST SQLAlchemy-1.4.52.tar.gz 8514200 BLAKE2B b41fccb885ce6761e29621a654c97537610a1875d66302ba56fac560f5c85db35b14595efd903aebfd0186ee39b75a8666e1304cdee6a6ec6eb9923bc602b9e5 SHA512 afda6a3503c9d2baba8c1dd9e7216d5ac1561f52f5f11009c41a1a98ac998643c980c60cf8ba4d84c4af8808be26ead9fd2e7a2c8bf15b2fdb521b4e5de7748e
DIST SQLAlchemy-2.0.27.tar.gz 9527460 BLAKE2B 06c3649c00fad1a82305502fce00938b85098a6e283eccc5992bc6b1df564a2947557db6bbd3633f96096fabca1fcf8fb1edee125b86be3a31508d6878fcc3be SHA512 78f0aeda4352e05282b86bdcaaf369804e4294e10f944a15cacd518b3741cf6359880d7400ec689e234ad6f8227d32822aa9073ed33f40825c3542102ebcada5
-DIST SQLAlchemy-2.0.28.tar.gz 9531010 BLAKE2B bd989adcdfe9640d001a97f48d782628ae307fd24d74ad227cf8e767bf0cfcb71b95f8a3506768146477b09f5196323e435092899d4ecc139a422849fc787a52 SHA512 83745aaf2d0b469dbbb28960eef4a1e23fb8fe8a2f4b8cb055cc06c5bd4ccb2f365a2b55c7ca76be2d809d4127e16ace06f4e50f59f63d946e3225375499f4f0
DIST SQLAlchemy-2.0.29.tar.gz 9543967 BLAKE2B 04425618b6e0bcf98a7a32a4a6b1c092120a9f3eb55761879b072ac3a3e08c8f1b97fb4d2df4b35b2fd810e11146f4d83cf67cd8ec23fb4d96c5d6cfff7657af SHA512 d1143c65fb26335d652083b9a90afaecf78ed312cea5c26f989380204e909c341c1bc3bb1e07274353e1c409d21737fad4d7391f186b2d2373814582d3baaf78
diff --git a/dev-python/sqlalchemy/sqlalchemy-1.4.51.ebuild b/dev-python/sqlalchemy/sqlalchemy-1.4.51.ebuild
deleted file mode 100644
index 4d289c7f7264..000000000000
--- a/dev-python/sqlalchemy/sqlalchemy-1.4.51.ebuild
+++ /dev/null
@@ -1,107 +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 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"
-
-BDEPEND="
- test? (
- $(python_gen_impl_dep sqlite)
- )
-"
-
-distutils_enable_tests pytest
-
-EPYTEST_IGNORE=(
- # hardcode call counts specific to Python versions
- test/aaa_profiling
-)
-
-src_prepare() {
- sed -i -e '/greenlet/d' setup.cfg || die
- distutils-r1_src_prepare
-}
-
-python_test() {
- local EPYTEST_DESELECT=(
- # warning tests are unreliable
- test/base/test_warnings.py
-
- # TODO
- 'test/orm/test_cache_key.py::EmbeddedSubqTest::test_cache_key_gen[memory-_exclusions1]'
-
- # deprecations
- test/engine/test_parseconnect.py::TestRegNewDBAPI::test_wrapper_hooks
- test/engine/test_parseconnect.py::URLTest::test_component_set
- test/engine/test_parseconnect.py::URLTest::test_password_custom_obj
- test/engine/test_parseconnect.py::URLTest::test_update_query_dict
- test/engine/test_parseconnect.py::URLTest::test_update_query_string
- )
- local sqlite_version=$(sqlite3 --version | cut -d' ' -f1)
- [[ ${EPYTHON} == pypy3 ]] && EPYTEST_DESELECT+=(
- test/ext/test_associationproxy.py::ProxyHybridTest::test_msg_fails_on_cls_access
- # https://github.com/sqlalchemy/sqlalchemy/issues/8762
- test/orm/test_query.py::YieldTest_sqlite+pysqlite_${sqlite_version//./_}::test_yield_per_close_on_interrupted_iteration_legacy
- )
- 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::QueuePoolTest::test_userspace_disconnectionerror_weakref_finalizer[True-_exclusions0]"
- )
- 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
- local -x PYTEST_PLUGINS=
- # upstream automagically depends on xdist when it is importable
- # note that we can't use xdist because it causes nodes to randomly
- # crash on init
- if has_version "dev-python/pytest-xdist[${PYTHON_USEDEP}]"; then
- PYTEST_PLUGINS+=xdist.plugin
- fi
- epytest
-}
-
-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-1.4.52.ebuild b/dev-python/sqlalchemy/sqlalchemy-1.4.52.ebuild
index 76afbd0fdcb6..4d289c7f7264 100644
--- a/dev-python/sqlalchemy/sqlalchemy-1.4.52.ebuild
+++ b/dev-python/sqlalchemy/sqlalchemy-1.4.52.ebuild
@@ -22,7 +22,7 @@ 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"
+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"
BDEPEND="
diff --git a/dev-python/sqlalchemy/sqlalchemy-2.0.28.ebuild b/dev-python/sqlalchemy/sqlalchemy-2.0.28.ebuild
deleted file mode 100644
index d6607f73c278..000000000000
--- a/dev-python/sqlalchemy/sqlalchemy-2.0.28.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/statsmodels/Manifest b/dev-python/statsmodels/Manifest
index cabad4cc1cc4..cd4c982a0c50 100644
--- a/dev-python/statsmodels/Manifest
+++ b/dev-python/statsmodels/Manifest
@@ -1 +1,2 @@
DIST statsmodels-0.14.1.tar.gz 20309647 BLAKE2B ef9b70671b78eb45b48997c5a8ea35828b7722b31a6c77d55b81f4aad6ddb3608305a3319a0d284797654ef2bbd5f25416459450a6b26be56b9e3e3137fccac8 SHA512 e382ca807205e2aeff76dd22b42e7824914472588ea040d90835fd46e0c993e155828c58e81f53f9539ad9bdf195bbbd1a49a45658187498d60287374112fd68
+DIST statsmodels-0.14.2.tar.gz 20352531 BLAKE2B 65053842ab979b6c2541baddc09f9ade4f55ca988451218b2e4fd2caf7af0e7891eaccf317e9715f35c3d002f8976ea637712173d58db1b5b7822658bdfc79dd SHA512 0a38482bccac61081ff0c8de3b9fcf81689ec15437c53d79a8949df058e0ac8a4e93136a50a37a06577108dc29f1a51e0d00e041ee7e8f9dff93b6e8cf1f0f16
diff --git a/dev-python/statsmodels/statsmodels-0.14.2.ebuild b/dev-python/statsmodels/statsmodels-0.14.2.ebuild
new file mode 100644
index 000000000000..8a4042e05bca
--- /dev/null
+++ b/dev-python/statsmodels/statsmodels-0.14.2.ebuild
@@ -0,0 +1,86 @@
+# 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} )
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="Statistical computations and models for use with SciPy"
+HOMEPAGE="
+ https://www.statsmodels.org/stable/index.html
+ https://github.com/statsmodels/statsmodels/
+ https://pypi.org/project/statsmodels/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~loong ~riscv ~s390 ~amd64-linux"
+IUSE="examples"
+
+DEPEND="
+ >=dev-python/numpy-1.22.3[${PYTHON_USEDEP}]
+ >=dev-python/scipy-1.8[${PYTHON_USEDEP}]
+"
+RDEPEND="
+ ${DEPEND}
+ >=dev-python/packaging-21.3[${PYTHON_USEDEP}]
+ >=dev-python/pandas-1.4[${PYTHON_USEDEP}]
+ >=dev-python/patsy-0.5.6[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${DEPEND}
+ >=dev-python/cython-3.0.10[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-scm-8[${PYTHON_USEDEP}]
+"
+
+distutils_enable_sphinx docs \
+ 'dev-python/ipykernel' \
+ 'dev-python/jupyter-client' \
+ 'dev-python/matplotlib' \
+ 'dev-python/nbconvert' \
+ 'dev-python/numpydoc'
+
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ export VARTEXFONTS="${T}"/fonts
+ export MPLCONFIGDIR="${T}"
+ printf -- 'backend : Agg\n' > "${MPLCONFIGDIR}"/matplotlibrc || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ local -x MKL_NUM_THREADS=1
+ local -x OMP_NUM_THREADS=1
+ local EPYTEST_DESELECT=(
+ # note that test path should be without "statsmodels/" prefix
+ imputation/tests/test_mice.py::TestMICE::test_combine
+ stats/tests/test_mediation.py::test_mixedlm
+ "stats/tests/test_corrpsd.py::test_corrpsd_threshold[0]"
+
+ # new warning from pandas
+ tsa/base/tests/test_tsa_indexes.py::test_instantiation_valid
+ )
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+
+ cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
+ epytest statsmodels
+}
+
+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 "Plotting functionality" "dev-python/matplotlib"
+}
diff --git a/dev-python/urllib3/Manifest b/dev-python/urllib3/Manifest
index a78b43d34152..9c5d5de51cb8 100644
--- a/dev-python/urllib3/Manifest
+++ b/dev-python/urllib3/Manifest
@@ -1,6 +1,4 @@
DIST hypercorn-d1719f8c1570cbd8e6a3719ffdb14a4d72880abb.gh.tar.gz 156216 BLAKE2B fcb5f49653401e6e4079e1c770d3cd407602d4d6764437b735bd4ec04191dec59cdc930822fa2aff726ee25cddd0f71fd457dedf31026bff1da121d93af8b768 SHA512 62d6787d88a2e716f0ac04fc49f6cdc586e473a660ee754ff66961922ae78bcc75d1f78b091e78557dd60f006e8e480114738c7b4ff71beac804e4fc9603240b
DIST urllib3-1.26.18.tar.gz 305687 BLAKE2B f2f673761a8d80eee715a8726ba36ab6b09800fd4a4f03f27438553c36072e2abb5ff26cff71dcf30fd114f4d28c4ad9907533965b83c8a0581d3d4661904b70 SHA512 c89e93a032bf6b11375c06ef7c5abc1868f93e7655cfdca09e9bd939ad415d206ea159fe151ecd2e5f725e0e18a831c7a5382ad01dbc32264154fc8af7aec156
-DIST urllib3-2.0.7.tar.gz 282546 BLAKE2B d4fbb9e1d0b6d1f3c3d71efc3fc479c7b1c49f87ca849c387701fb0c8b4124082de6d83d958c8b2afc225a84b80e7665df857e7b0918ba50e4ad1431f8facc4d SHA512 ca21dd330cfc7f53e6f00a92be1df1d24acbe61b6ca31c52a272dccd6f50d1bb797eece9132860adc84c21a9bebc3030a12816081451fcb8384c11a6cd2d1e8b
DIST urllib3-2.1.0.tar.gz 263900 BLAKE2B 9e0438a11b7178c5004c1253179bb6bfcb1fa8711db47084377bb14c5834f7b88b04a5560b99bf6fff5f1f4622d4b1998d19dd517ab6b7453fd53c832ee7fefa SHA512 33d6eafd9b6ecd97ee2dca8a4f1612a6fcc584961bcfd3a0a188f557a73f4c1576f98dc525c3b2feecb2d676f4bf4364aafeef093d6686e4b3ef2043726561a8
-DIST urllib3-2.2.0.tar.gz 287152 BLAKE2B 126949265c6558e8743f8e2e05e80fd211845c67436db096796f453ed248d348dcc73d3822c77bb94b55b711eb4b10899b60808be1f4981159f772a2066d5e39 SHA512 8fa2735ff623ec549802290a2317d3d24cdd18e43b8b0702dcee03ecba31428bd0dd12e5b8e129135a3f254bcf5bcd6a8b608c3a43192b50e3a815c73906f6cd
DIST urllib3-2.2.1.tar.gz 291020 BLAKE2B 4bd6e26e1adfba99856db082d0bd3ea136a2367fa53c2d0c7990f6325e8145b2d080a8d59705c43acd97b26be65a309f83d1906d85bd72bfb479b7404972b042 SHA512 dfadba099db678ee1567ee95aa11a72fcea0a76df094d04dd4bd7ed5df4ea2fda6917cc122a1e2bfa4f5303916f93a7e1c881fbbf3cbb9415a25bd7eca1b14b3
diff --git a/dev-python/urllib3/files/urllib3-2.2.0-pytest-8.patch b/dev-python/urllib3/files/urllib3-2.2.0-pytest-8.patch
deleted file mode 100644
index 9baa3379a7c9..000000000000
--- a/dev-python/urllib3/files/urllib3-2.2.0-pytest-8.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From aa8d3dd2535cc125e123e5c2bca38738d6864b2a Mon Sep 17 00:00:00 2001
-From: Ruben Laguna <ruben.laguna@gmail.com>
-Date: Mon, 5 Feb 2024 15:29:35 +0100
-Subject: [PATCH] Fix ssl_version tests for upcoming migration to pytest 8
-
----
- dev-requirements.txt | 2 +-
- test/contrib/test_pyopenssl.py | 1 -
- test/with_dummyserver/test_https.py | 35 ++++++++++++++++++++---------
- 3 files changed, 26 insertions(+), 12 deletions(-)
-
-diff --git a/test/contrib/test_pyopenssl.py b/test/contrib/test_pyopenssl.py
-index b4799ce802..eaca77ba6f 100644
---- a/test/contrib/test_pyopenssl.py
-+++ b/test/contrib/test_pyopenssl.py
-@@ -38,7 +38,6 @@ def teardown_module() -> None:
- from ..test_ssl import TestSSL # noqa: E402, F401
- from ..test_util import TestUtilSSL # noqa: E402, F401
- from ..with_dummyserver.test_https import ( # noqa: E402, F401
-- TestHTTPS,
- TestHTTPS_IPV4SAN,
- TestHTTPS_IPV6SAN,
- TestHTTPS_TLSv1,
-diff --git a/test/with_dummyserver/test_https.py b/test/with_dummyserver/test_https.py
-index aa22f11879..b8353d758b 100644
---- a/test/with_dummyserver/test_https.py
-+++ b/test/with_dummyserver/test_https.py
-@@ -65,7 +65,7 @@
- CLIENT_CERT = CLIENT_INTERMEDIATE_PEM
-
-
--class TestHTTPS(HTTPSHypercornDummyServerTestCase):
-+class BaseTestHTTPS(HTTPSHypercornDummyServerTestCase):
- tls_protocol_name: str | None = None
-
- def tls_protocol_not_default(self) -> bool:
-@@ -83,11 +83,17 @@ def tls_version(self) -> ssl.TLSVersion:
- def ssl_version(self) -> int:
- if self.tls_protocol_name is None:
- return pytest.skip("Skipping base test class")
-- attribute = f"PROTOCOL_{self.tls_protocol_name.replace('.', '_')}"
-- ssl_version = getattr(ssl, attribute, None)
-- if ssl_version is None:
-- return pytest.skip(f"ssl.{attribute} isn't available")
-- return ssl_version # type: ignore[no-any-return]
-+
-+ if self.tls_protocol_name == "TLSv1.3" and ssl.HAS_TLSv1_3:
-+ return ssl.PROTOCOL_TLS_CLIENT
-+ if self.tls_protocol_name == "TLSv1.2" and ssl.HAS_TLSv1_2:
-+ return ssl.PROTOCOL_TLSv1_2
-+ if self.tls_protocol_name == "TLSv1.1" and ssl.HAS_TLSv1_1:
-+ return ssl.PROTOCOL_TLSv1_1
-+ if self.tls_protocol_name == "TLSv1" and ssl.HAS_TLSv1:
-+ return ssl.PROTOCOL_TLSv1
-+ else:
-+ return pytest.skip(f"{self.tls_protocol_name} isn't available")
-
- @classmethod
- def setup_class(cls) -> None:
-@@ -797,6 +803,10 @@ def test_tls_protocol_name_of_socket(self) -> None:
- def test_ssl_version_is_deprecated(self) -> None:
- if self.tls_protocol_name is None:
- pytest.skip("Skipping base test class")
-+ if self.ssl_version() == ssl.PROTOCOL_TLS_CLIENT:
-+ pytest.skip(
-+ "Skipping because ssl_version=ssl.PROTOCOL_TLS_CLIENT is not deprecated"
-+ )
-
- with HTTPSConnectionPool(
- self.host, self.port, ca_certs=DEFAULT_CA, ssl_version=self.ssl_version()
-@@ -964,6 +974,11 @@ def test_default_ssl_context_ssl_min_max_versions(self) -> None:
- assert ctx.maximum_version == expected_maximum_version
-
- def test_ssl_context_ssl_version_uses_ssl_min_max_versions(self) -> None:
-+ if self.ssl_version() == ssl.PROTOCOL_TLS_CLIENT:
-+ pytest.skip(
-+ "Skipping because ssl_version=ssl.PROTOCOL_TLS_CLIENT is not deprecated"
-+ )
-+
- with pytest.warns(
- DeprecationWarning,
- match=r"'ssl_version' option is deprecated and will be removed in "
-@@ -977,25 +992,25 @@ def test_ssl_context_ssl_version_uses_ssl_min_max_versions(self) -> None:
-
-
- @pytest.mark.usefixtures("requires_tlsv1")
--class TestHTTPS_TLSv1(TestHTTPS):
-+class TestHTTPS_TLSv1(BaseTestHTTPS):
- tls_protocol_name = "TLSv1"
- certs = TLSv1_CERTS
-
-
- @pytest.mark.usefixtures("requires_tlsv1_1")
--class TestHTTPS_TLSv1_1(TestHTTPS):
-+class TestHTTPS_TLSv1_1(BaseTestHTTPS):
- tls_protocol_name = "TLSv1.1"
- certs = TLSv1_1_CERTS
-
-
- @pytest.mark.usefixtures("requires_tlsv1_2")
--class TestHTTPS_TLSv1_2(TestHTTPS):
-+class TestHTTPS_TLSv1_2(BaseTestHTTPS):
- tls_protocol_name = "TLSv1.2"
- certs = TLSv1_2_CERTS
-
-
- @pytest.mark.usefixtures("requires_tlsv1_3")
--class TestHTTPS_TLSv1_3(TestHTTPS):
-+class TestHTTPS_TLSv1_3(BaseTestHTTPS):
- tls_protocol_name = "TLSv1.3"
- certs = TLSv1_3_CERTS
-
diff --git a/dev-python/urllib3/files/urllib3-2.2.0-revert.patch b/dev-python/urllib3/files/urllib3-2.2.0-revert.patch
deleted file mode 100644
index 14175ecec58b..000000000000
--- a/dev-python/urllib3/files/urllib3-2.2.0-revert.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 49b2ddaf07ec9ef65ef12d0218117f20e739ee6e Mon Sep 17 00:00:00 2001
-From: Quentin Pradet <quentin.pradet@gmail.com>
-Date: Fri, 16 Feb 2024 11:35:30 +0400
-Subject: [PATCH] Stop casting request headers to HTTPHeaderDict (#3344)
-
-While this was done to fix a mypy error, we did not notice the
-consequences:
-
- * This breaks boto3 that subclasses HTTPConnection because
- HTTPHeaderDict does not support bytes values yet.
- * When proxying, headers are still a dictionary by default.
-
-We can decide to reintroduce a forced conversion to HTTPHeaderDict in
-urllib3 3.0 if the above issues are fixed.
----
- changelog/3343.bugfix.rst | 1 +
- src/urllib3/connectionpool.py | 4 ++--
- 2 files changed, 3 insertions(+), 2 deletions(-)
- create mode 100644 changelog/3343.bugfix.rst
-
-diff --git a/changelog/3343.bugfix.rst b/changelog/3343.bugfix.rst
-new file mode 100644
-index 0000000000..4f2df9e7a4
---- /dev/null
-+++ b/changelog/3343.bugfix.rst
-@@ -0,0 +1 @@
-+Fixed ``HTTPConnectionPool.urlopen`` to stop automatically casting non-proxy headers to ``HTTPHeaderDict``. This change was premature as it did not apply to proxy headers and ``HTTPHeaderDict`` does not handle byte header values correctly yet.
-diff --git a/src/urllib3/connectionpool.py b/src/urllib3/connectionpool.py
-index 1036f0d718..bd58ff14dd 100644
---- a/src/urllib3/connectionpool.py
-+++ b/src/urllib3/connectionpool.py
-@@ -751,8 +751,8 @@ def urlopen( # type: ignore[override]
- # have to copy the headers dict so we can safely change it without those
- # changes being reflected in anyone else's copy.
- if not http_tunnel_required:
-- headers = HTTPHeaderDict(headers)
-- headers.update(self.proxy_headers)
-+ headers = headers.copy() # type: ignore[attr-defined]
-+ headers.update(self.proxy_headers) # type: ignore[union-attr]
-
- # Must keep the exception bound to a separate variable or else Python 3
- # complains about UnboundLocalError.
diff --git a/dev-python/urllib3/urllib3-2.0.7.ebuild b/dev-python/urllib3/urllib3-2.0.7.ebuild
deleted file mode 100644
index bb15040953b9..000000000000
--- a/dev-python/urllib3/urllib3-2.0.7.ebuild
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 1999-2023 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=hatchling
-PYTHON_TESTED=( python3_{8,9,10,11,12} pypy3 )
-PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
-PYTHON_REQ_USE="ssl(+)"
-
-inherit distutils-r1 multiprocessing pypi
-
-DESCRIPTION="HTTP library with thread-safe connection pooling, file post, and more"
-HOMEPAGE="
- https://github.com/urllib3/urllib3/
- https://pypi.org/project/urllib3/
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
-IUSE="brotli test zstd"
-RESTRICT="!test? ( test )"
-
-# [secure] extra is deprecated and slated for removal, we don't need it:
-# https://github.com/urllib3/urllib3/issues/2680
-RDEPEND="
- >=dev-python/PySocks-1.5.8[${PYTHON_USEDEP}]
- <dev-python/PySocks-2.0[${PYTHON_USEDEP}]
- brotli? ( >=dev-python/brotlicffi-0.8.0[${PYTHON_USEDEP}] )
- zstd? ( >=dev-python/zstandard-0.18.0[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- test? (
- $(python_gen_cond_dep "
- ${RDEPEND}
- dev-python/brotlicffi[\${PYTHON_USEDEP}]
- dev-python/freezegun[\${PYTHON_USEDEP}]
- dev-python/pytest[\${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[\${PYTHON_USEDEP}]
- dev-python/pytest-xdist[\${PYTHON_USEDEP}]
- >=dev-python/tornado-4.2.1[\${PYTHON_USEDEP}]
- >=dev-python/trustme-0.5.3[\${PYTHON_USEDEP}]
- >=dev-python/zstandard-0.18.0[\${PYTHON_USEDEP}]
- " "${PYTHON_TESTED[@]}")
- )
-"
-
-src_prepare() {
- # upstream considers 0.5 s to be "long" for a timeout
- # we get tons of test failures on *fast* systems because of that
- sed -i -e '/LONG_TIMEOUT/s:0.5:5:' test/__init__.py || die
- distutils-r1_src_prepare
-}
-
-python_test() {
- local -x CI=1
- if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
- einfo "Skipping tests on ${EPYTHON}"
- return
- fi
-
- local EPYTEST_DESELECT=(
- # take forever
- test/contrib/test_pyopenssl.py::TestSocketSSL::test_requesting_large_resources_via_ssl
- test/with_dummyserver/test_socketlevel.py::TestSSL::test_requesting_large_resources_via_ssl
- # stupid test, next bump please verify if they fixed it
- test/test_poolmanager.py::TestPoolManager::test_deprecated_no_scheme
- # fails with newer secure SSL configuration, which removes TLS 1.1
- test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1::test_verify_none_and_good_fingerprint
- test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_1::test_verify_none_and_good_fingerprint
- test/with_dummyserver/test_https.py::TestHTTPS_TLSv1::test_verify_none_and_good_fingerprint
- test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_1::test_verify_none_and_good_fingerprint
- # TODO: timeouts
- test/contrib/test_pyopenssl.py::TestSocketClosing::test_timeout_errors_cause_retries
- test/with_dummyserver/test_socketlevel.py::TestSocketClosing::test_timeout_errors_cause_retries
- # warnings, sigh
- test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_request_chunked_is_deprecated
- )
-
- # plugins make tests slower, and more fragile
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- # some tests are very fragile to timing
- epytest -p rerunfailures --reruns=10 --reruns-delay=2 \
- -p xdist -n "$(makeopts_jobs)" --dist=worksteal
-}
diff --git a/dev-python/urllib3/urllib3-2.2.0-r1.ebuild b/dev-python/urllib3/urllib3-2.2.0-r1.ebuild
deleted file mode 100644
index 35b1a6099418..000000000000
--- a/dev-python/urllib3/urllib3-2.2.0-r1.ebuild
+++ /dev/null
@@ -1,99 +0,0 @@
-# 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=hatchling
-PYTHON_TESTED=( python3_{8,9,10,11,12} pypy3 )
-PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
-PYTHON_REQ_USE="ssl(+)"
-
-inherit distutils-r1 pypi
-
-# The package has a test dependency on their own hypercorn fork.
-HYPERCORN_COMMIT=d1719f8c1570cbd8e6a3719ffdb14a4d72880abb
-DESCRIPTION="HTTP library with thread-safe connection pooling, file post, and more"
-HOMEPAGE="
- https://github.com/urllib3/urllib3/
- https://pypi.org/project/urllib3/
-"
-SRC_URI+="
- test? (
- https://github.com/urllib3/hypercorn/archive/${HYPERCORN_COMMIT}.tar.gz
- -> hypercorn-${HYPERCORN_COMMIT}.gh.tar.gz
- )
-"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~riscv"
-IUSE="brotli http2 test zstd"
-RESTRICT="!test? ( test )"
-
-# [secure] extra is deprecated and slated for removal, we don't need it:
-# https://github.com/urllib3/urllib3/issues/2680
-RDEPEND="
- >=dev-python/PySocks-1.5.8[${PYTHON_USEDEP}]
- <dev-python/PySocks-2.0[${PYTHON_USEDEP}]
- brotli? ( >=dev-python/brotlicffi-0.8.0[${PYTHON_USEDEP}] )
- http2? (
- <dev-python/h2-5[${PYTHON_USEDEP}]
- >=dev-python/h2-4[${PYTHON_USEDEP}]
- )
- zstd? ( >=dev-python/zstandard-0.18.0[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- test? (
- $(python_gen_cond_dep "
- ${RDEPEND}
- dev-python/brotlicffi[\${PYTHON_USEDEP}]
- dev-python/freezegun[\${PYTHON_USEDEP}]
- dev-python/h2[\${PYTHON_USEDEP}]
- dev-python/httpx[\${PYTHON_USEDEP}]
- dev-python/pytest[\${PYTHON_USEDEP}]
- dev-python/pytest-rerunfailures[\${PYTHON_USEDEP}]
- dev-python/pytest-timeout[\${PYTHON_USEDEP}]
- dev-python/pytest-xdist[\${PYTHON_USEDEP}]
- dev-python/quart[\${PYTHON_USEDEP}]
- dev-python/quart-trio[\${PYTHON_USEDEP}]
- dev-python/trio[\${PYTHON_USEDEP}]
- >=dev-python/tornado-4.2.1[\${PYTHON_USEDEP}]
- >=dev-python/trustme-0.5.3[\${PYTHON_USEDEP}]
- >=dev-python/zstandard-0.18.0[\${PYTHON_USEDEP}]
- " "${PYTHON_TESTED[@]}")
- )
-"
-
-src_prepare() {
- local PATCHES=(
- # https://github.com/urllib3/urllib3/commit/49b2ddaf07ec9ef65ef12d0218117f20e739ee6e
- "${FILESDIR}/${P}-revert.patch"
- # https://github.com/urllib3/urllib3/commit/aa8d3dd2535cc125e123e5c2bca38738d6864b2a
- "${FILESDIR}/${P}-pytest-8.patch"
- )
-
- # upstream considers 0.5 s to be "long" for a timeout
- # we get tons of test failures on *fast* systems because of that
- sed -i -e '/LONG_TIMEOUT/s:0.5:5:' test/__init__.py || die
- distutils-r1_src_prepare
-}
-
-python_test() {
- local -x PYTHONPATH=${WORKDIR}/hypercorn-${HYPERCORN_COMMIT}/src
- local -x CI=1
- if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
- einfo "Skipping tests on ${EPYTHON}"
- return
- fi
-
- local EPYTEST_DESELECT=(
- # TODO: timeouts
- test/contrib/test_pyopenssl.py::TestSocketClosing::test_timeout_errors_cause_retries
- test/with_dummyserver/test_socketlevel.py::TestSocketClosing::test_timeout_errors_cause_retries
- )
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- local EPYTEST_XDIST=1
- epytest -p timeout -p rerunfailures --reruns=10 --reruns-delay=2
-}
diff --git a/dev-python/urllib3/urllib3-2.2.1.ebuild b/dev-python/urllib3/urllib3-2.2.1.ebuild
index 25086d9c2aeb..ed32df8fffb5 100644
--- a/dev-python/urllib3/urllib3-2.2.1.ebuild
+++ b/dev-python/urllib3/urllib3-2.2.1.ebuild
@@ -27,7 +27,7 @@ SRC_URI+="
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ppc ppc64 ~riscv sparc x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ppc ppc64 ~riscv sparc x86"
IUSE="brotli http2 test zstd"
RESTRICT="!test? ( test )"
diff --git a/dev-python/yfinance/Manifest b/dev-python/yfinance/Manifest
index b823409e0ddd..d578127d5f99 100644
--- a/dev-python/yfinance/Manifest
+++ b/dev-python/yfinance/Manifest
@@ -1,2 +1,2 @@
-DIST yfinance-0.2.36.tar.gz 103131 BLAKE2B e071e35a6ce295fcf5d277db2387b3fb40fb2abfdb8cfa2033370e5cbf4919e942c28cb35ceb9b9307c4c26d066cd9ec8c1f0216a464c54a2bd363cec32f47e2 SHA512 e9b5c029a6f6122cef346970c58a4bed4d3b7daa9079af515bab1a80d49d60e70e5a527315e3a185ec894e0972b28d822d8ad112c003f18b245108e3c939751f
DIST yfinance-0.2.37.tar.gz 102974 BLAKE2B 5e130ce86a90df0ae590ae8cdbfbc6e6634b2ac86ffc065593b570b6fd357765ad176ce9505ca71fbaf9c42c7ddb143428d81f8025ad5950da687bd7e5608b3e SHA512 80b901273c342063f63dd9bb2b43a8e757d7fabb31b85b8b6ea6cf0c63643de7e6775f09072d9f7ab82ae1376798d2f5389f0eba14a9bc641bd4c54345fd0b4a
+DIST yfinance-0.2.38.tar.gz 103001 BLAKE2B b317e178cdb612c8833784bc522e24134a156654d47b46225bd4fa771f6e57fd635493c7a21841de87afead0719ef8e2f711d42b704aa02a16ef6ecd461e895d SHA512 8f4ca86c18d0748accef332a5e03f7b499c5947bb6dda838091b5d52a64cd3914bbe187ccda8c3e20c6f8ade4cd67685fb713759ad3c1b3da21797d2f3517159
diff --git a/dev-python/yfinance/yfinance-0.2.36.ebuild b/dev-python/yfinance/yfinance-0.2.38.ebuild
index 6b282989eb68..6b282989eb68 100644
--- a/dev-python/yfinance/yfinance-0.2.36.ebuild
+++ b/dev-python/yfinance/yfinance-0.2.38.ebuild
diff --git a/dev-python/zenlib/Manifest b/dev-python/zenlib/Manifest
index 4bd1d715064c..bc3224ca47e4 100644
--- a/dev-python/zenlib/Manifest
+++ b/dev-python/zenlib/Manifest
@@ -4,3 +4,4 @@ DIST zenlib-1.4.0.tar.gz 14315 BLAKE2B 76f9e8ed74a451837b27406c7bf0791b8d131de9d
DIST zenlib-1.6.2.tar.gz 15799 BLAKE2B 4a29f7ac386c197a1b9c6034b202a1cbce4a20bfdc137ec373fbb8818e806caadf82bd049e5ee92c2c3a49bb92d23d84bbcbc4a9e21b7f9dca42b73b41e3a3c3 SHA512 26807f566d8b8ca58768588ef2e63674ad8b8ed5e6ae97c336f8d090c2c4f568dc8d5620a869e2e518876ae269cfbc39583c8b4ff928bf8488a6aeb0177b5c5b
DIST zenlib-1.7.2.tar.gz 16853 BLAKE2B 9659723441c9e651e6a80a47565aeeb6bda67db04524bbd551fe5f9b38efa0afb33021a21e0fea3af934fc3c8c2b9cf4f38c4534c2c9bc4282971038503fafec SHA512 b69619b1e30f18892ec54b481e386a5bb7a728d87263601ddd4e22e2433e62d263bc67eea54748b9a49e528078cd152fd2d68738372409bb003a0a84a7cbb71b
DIST zenlib-1.7.3.tar.gz 16924 BLAKE2B 20bab075d9a09062e2d596238237a2684c206cc1606f7796a1ddf6421902a523731bcfad9c96b803be3d91ff6ee508bdb9553a0f90295aa3f56e64e87ba37f21 SHA512 f5f8ad560e74051e5daf7515b3777ff17e86d202f6c8958e476d22677a65454512db5a93f1281202fc058742da0f8fe0296339da68d5ce109ab93e33948eb79b
+DIST zenlib-1.7.4.tar.gz 16949 BLAKE2B 6bc770d55207e3f532106b2511a3cd1c2161a7228e6be5161115f59d95213d6328da2347a9f19402c422651cdf1af3977c70828028c898f701218e50ef7217a9 SHA512 1b4d41da207cdc819c85a568a3f13555b7271bde066a7bf89ad11077ed42d5fd1b1227d1d789ed583e6b2aa2de4aae26a0da0be9ea6f59d0a262bdebae423104
diff --git a/dev-python/zenlib/zenlib-1.7.4.ebuild b/dev-python/zenlib/zenlib-1.7.4.ebuild
new file mode 100644
index 000000000000..3b19cd41c055
--- /dev/null
+++ b/dev-python/zenlib/zenlib-1.7.4.ebuild
@@ -0,0 +1,16 @@
+# Copyright 2023 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="Useful python decorators and utilities"
+HOMEPAGE="https://github.com/desultory/zenlib"
+SRC_URI="https://github.com/desultory/${PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"