summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-05-09 11:57:53 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-05-09 11:57:53 +0000
commit3dc27067f5e12af168623c205d85522b92d1e8d9 (patch)
tree739295adc00c662e15d11512826a467c834e6366 /dev-python
parent2a056f8dc807f0f3f71656f72053560b984c03e3 (diff)
downloadbaldeagleos-repo-3dc27067f5e12af168623c205d85522b92d1e8d9.tar.gz
baldeagleos-repo-3dc27067f5e12af168623c205d85522b92d1e8d9.tar.xz
baldeagleos-repo-3dc27067f5e12af168623c205d85522b92d1e8d9.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/aiodns/Manifest1
-rw-r--r--dev-python/aiodns/aiodns-3.4.0.ebuild36
-rw-r--r--dev-python/authlib/authlib-1.5.2.ebuild1
-rw-r--r--dev-python/boto3/Manifest1
-rw-r--r--dev-python/boto3/boto3-1.38.12.ebuild53
-rw-r--r--dev-python/botocore/Manifest1
-rw-r--r--dev-python/botocore/botocore-1.38.12.ebuild67
-rw-r--r--dev-python/cfn-lint/Manifest1
-rw-r--r--dev-python/cfn-lint/cfn-lint-1.35.1.ebuild61
-rw-r--r--dev-python/cython/Manifest1
-rw-r--r--dev-python/cython/cython-3.1.0.ebuild84
-rw-r--r--dev-python/django-guardian/Manifest1
-rw-r--r--dev-python/django-guardian/django-guardian-3.0.0.ebuild29
-rw-r--r--dev-python/fastapi/Manifest1
-rw-r--r--dev-python/fastapi/fastapi-0.115.12.ebuild96
-rw-r--r--dev-python/fastapi/files/fastaapi-0.115.6-httpx-0.28-test-fix.patch26
-rw-r--r--dev-python/fastapi/metadata.xml (renamed from dev-python/safety/metadata.xml)9
-rw-r--r--dev-python/flufl-lock/Manifest1
-rw-r--r--dev-python/flufl-lock/flufl-lock-8.2.0.ebuild36
-rw-r--r--dev-python/freezegun/freezegun-1.5.1.ebuild2
-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/narwhals/Manifest1
-rw-r--r--dev-python/narwhals/narwhals-1.38.2.ebuild41
-rw-r--r--dev-python/nltk/Manifest7
-rw-r--r--dev-python/nltk/files/python-3.12.patch282
-rw-r--r--dev-python/nltk/metadata.xml11
-rw-r--r--dev-python/nltk/nltk-3.8.1.ebuild49
-rw-r--r--dev-python/nltk/nltk-3.9.1.ebuild33
-rw-r--r--dev-python/nuitka/Manifest1
-rw-r--r--dev-python/nuitka/nuitka-2.7.1.ebuild55
-rw-r--r--dev-python/phonenumbers/Manifest1
-rw-r--r--dev-python/phonenumbers/phonenumbers-9.0.5.ebuild39
-rw-r--r--dev-python/pytest-recording/Manifest1
-rw-r--r--dev-python/pytest-recording/pytest-recording-0.13.4.ebuild46
-rw-r--r--dev-python/pytest-rerunfailures/Manifest1
-rw-r--r--dev-python/pytest-rerunfailures/pytest-rerunfailures-15.1.ebuild31
-rw-r--r--dev-python/python-tests/Manifest3
-rw-r--r--dev-python/python-tests/python-tests-3.14.0_beta1-r100.ebuild70
-rw-r--r--dev-python/python-tests/python-tests-3.14.0_beta1.ebuild70
-rw-r--r--dev-python/safety/Manifest1
-rw-r--r--dev-python/safety/safety-3.4.0.ebuild41
-rw-r--r--dev-python/scipy/Manifest5
-rw-r--r--dev-python/scipy/scipy-1.14.1.ebuild169
-rw-r--r--dev-python/scipy/scipy-1.15.0.ebuild171
-rw-r--r--dev-python/scipy/scipy-1.15.1.ebuild171
-rw-r--r--dev-python/snowballstemmer/Manifest1
-rw-r--r--dev-python/snowballstemmer/snowballstemmer-3.0.0.1.ebuild19
-rw-r--r--dev-python/sphinxcontrib-apidoc/Manifest1
-rw-r--r--dev-python/sphinxcontrib-apidoc/sphinxcontrib-apidoc-0.6.0.ebuild40
-rw-r--r--dev-python/sqlglot/Manifest2
-rw-r--r--dev-python/sqlglot/sqlglot-26.17.1.ebuild96
-rw-r--r--dev-python/sqlmodel/Manifest1
-rw-r--r--dev-python/sqlmodel/metadata.xml11
-rw-r--r--dev-python/sqlmodel/sqlmodel-0.0.24.ebuild58
-rw-r--r--dev-python/tempora/tempora-5.8.0.ebuild12
-rw-r--r--dev-python/test/test-0.ebuild12
-rw-r--r--dev-python/textx/Manifest1
-rw-r--r--dev-python/textx/textx-4.2.0.ebuild59
-rw-r--r--dev-python/trove-classifiers/Manifest1
-rw-r--r--dev-python/trove-classifiers/trove-classifiers-2025.5.8.15.ebuild45
-rw-r--r--dev-python/typing-extensions/files/typing-extensions-4.13.2-py314.patch422
-rw-r--r--dev-python/typing-extensions/typing-extensions-4.13.2-r2.ebuild41
-rw-r--r--dev-python/virtualenv/Manifest1
-rw-r--r--dev-python/virtualenv/virtualenv-20.31.2.ebuild138
-rw-r--r--dev-python/wheel/files/wheel-0.45.1-test.patch125
-rw-r--r--dev-python/wheel/wheel-0.45.1.ebuild21
69 files changed, 2325 insertions, 621 deletions
diff --git a/dev-python/aiodns/Manifest b/dev-python/aiodns/Manifest
index cb31844a9ea5..914c73befb93 100644
--- a/dev-python/aiodns/Manifest
+++ b/dev-python/aiodns/Manifest
@@ -1,2 +1,3 @@
DIST aiodns-3.2.0.tar.gz 7823 BLAKE2B 8bafeebbf6ef69001670dffe8df3bd89b817bca921e266e218eaf2a53653d5bb150cef0c99b2fd498d39befb57c6e2edb4d94fbf4b4548e1debce69bcd114ff3 SHA512 ca6ae2d53cc0a0e5b8cd5f47da56d7db43236eb6738509d5cc088e56db996c49eba8b024cfe368e5acf44ad4de4cb5d6f949c7f0d4cd16ff4d5cc42ae3b27cb1
DIST aiodns-3.3.0.tar.gz 8444 BLAKE2B 6e4fb907b40e70c4be9c9e397f0b4a51d158b5eac0ac772ff272b8f5b255ccd7da84217eefa25485a12fe297fd7f66212fca4d7856d828fc6f0323478d624c7b SHA512 6209246c85e7871dc45fa84613e963bd500f18da5b2ffc672cf40f0efd36e858a2203b9a47f3f59f8b1d1d3a862bace0fbafa4e52b628c7a36df5b0b0876f7f9
+DIST aiodns-3.4.0.tar.gz 11433 BLAKE2B b829639ebe3f09b75da8a94bdfd4f8ca90c21710625e8dfb029747ca2fa2ffc37a7c2f1c948b36568b26547daf06881f254d7536909556e42c5394ee13202514 SHA512 0e9d703f13676e5dc057335dc0aa41e694da28ac727e6c5662f9888f225329cc14e4e01e2dfa9e56c72a755393cbc7e70e578cfb1675f71526dfaa0e26f35d69
diff --git a/dev-python/aiodns/aiodns-3.4.0.ebuild b/dev-python/aiodns/aiodns-3.4.0.ebuild
new file mode 100644
index 000000000000..d9af2e5f1366
--- /dev/null
+++ b/dev-python/aiodns/aiodns-3.4.0.ebuild
@@ -0,0 +1,36 @@
+# 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} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Simple DNS resolver for asyncio"
+HOMEPAGE="
+ https://pypi.org/project/aiodns/
+ https://github.com/aio-libs/aiodns/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+# Tests fail with network-sandbox, since they try to resolve google.com
+PROPERTIES="test_network"
+RESTRICT="test"
+
+RDEPEND=">=dev-python/pycares-3[${PYTHON_USEDEP}]"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-python/pytest-asyncio[${PYTHON_USEDEP}]
+"
+
+distutils_enable_tests pytest
+
+python_test() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest -p asyncio --asyncio-mode=auto
+}
diff --git a/dev-python/authlib/authlib-1.5.2.ebuild b/dev-python/authlib/authlib-1.5.2.ebuild
index 65f464fee82c..ca2b62b6fbb0 100644
--- a/dev-python/authlib/authlib-1.5.2.ebuild
+++ b/dev-python/authlib/authlib-1.5.2.ebuild
@@ -37,7 +37,6 @@ BDEPEND="
test? (
dev-python/pytest[${PYTHON_USEDEP}]
dev-python/pytest-asyncio[${PYTHON_USEDEP}]
- dev-python/coverage[${PYTHON_USEDEP}]
dev-python/anyio[${PYTHON_USEDEP}]
dev-python/cachelib[${PYTHON_USEDEP}]
dev-python/httpx[${PYTHON_USEDEP}]
diff --git a/dev-python/boto3/Manifest b/dev-python/boto3/Manifest
index a0a05240ac16..6cf6138c849c 100644
--- a/dev-python/boto3/Manifest
+++ b/dev-python/boto3/Manifest
@@ -1,6 +1,7 @@
DIST boto3-1.37.37.gh.tar.gz 930327 BLAKE2B 93ed4e903189a9620f13e71fe64557ebcfa5c696688b4a21fc4de0f9d21f51fd3b9c9dafa4a5dc91fc88165c14207b17b3f121e9eebdf1c1ab7e55472573d2ec SHA512 e19700633ccf6be76ab1baa0811c24d36aba7e0b8f1933fc10d1dc67d73ec0cd66a4c45ace1f2bdf815c3b35ffafaff2ce7ce9a4678e7f57984039f96d0f9fa0
DIST boto3-1.38.10.gh.tar.gz 937983 BLAKE2B 3e82c1f7e1de9ff61a0db1124d265a03d48abe8ed251a7981e378a3108e500593fbc31ee18e5533f94254e386558ce93b0ddc706d74ce457cfa22c34e496d4cf SHA512 635fb20ecead040d9a81e4738a9464210c9c31018c6bebc66f6f5893b68e924c12eb48cdcce55ce49faaf1d3a3ac9f7c07cfc56aee9b26713893d1dc5e43dc06
DIST boto3-1.38.11.gh.tar.gz 938736 BLAKE2B b1a27cb729b67047d9df35e4c9892560eeed5aec16e197e57493680423817692bc8ca02ff08afd4b2e678fa82b11226d22c27798270c1e3cc334578dd8a6a041 SHA512 cf70dd6710fb19fbcd604c14b0a98a51dc8efc49e2d4afdb02bcc75654e5c07ceac2695635b1e0a579f5db48b885ad1dcf1efc277bf5695a93da0b097a861ecc
+DIST boto3-1.38.12.gh.tar.gz 939412 BLAKE2B 096514640df4a98b76c30cd21816260fcb7a23c2a9cda9410094f35bf1c153995046a68497d1af8af7fdce47ece9efdede595a3d9a35ce9605058e5172bc8c60 SHA512 e430a248bf26fcf54fd3737502f0fb335275353381c23d7bfba793f0d092e0e37a1fe0bac550d1ad6386f92c1d62f868a939d9addfc48afc9331a082b9bae07e
DIST boto3-1.38.3.gh.tar.gz 934010 BLAKE2B f5008a63aec620385e06c15e97ea37335bba190e5a29920c14389ae0dfc0e09a70ce70f8b50c0d25feda3defd9e855739305d19df7759688c156f53fc698b533 SHA512 8f300e38c7912f5df00431c1b70494521ac49500512b4aba7dc18f6bf0e570508d6a00fe8a98eb3c8607af39744a67e3b47d69507dbaf25d44dd02085f24bf95
DIST boto3-1.38.8.gh.tar.gz 937130 BLAKE2B 4158573a032957c33f62c6406937a45956f4ccf972be4a223e16a327b0b476402a1e7bf7d9b6a5b83005fc324f6c0062ed73008972cabed9247790225c4d4e5a SHA512 3c3854ed132ad4c81cd868848a370cdc73101ac3c578f8ae70bc53c9a98b1d85dcd364258027adef976b3c6d220aa45f865928c055c9320d3a268e0e29d5af63
DIST boto3-1.38.9.gh.tar.gz 937730 BLAKE2B 6b1a68095601d9b32be0679171a73b204897a7f632c1825ee203d27b46c625b196739b9c6ed8f19e84e0f0d2ba3a777539d9474cbaaa526fd499655e62ce9def SHA512 37960c90bb8de6328dc08cabb98a71e0dbb9303137410a1e44efdd650d6d0009398a4c4fb75ab53f8c8dfa7f566925c03de10012092967e661157f6bdc12e583
diff --git a/dev-python/boto3/boto3-1.38.12.ebuild b/dev-python/boto3/boto3-1.38.12.ebuild
new file mode 100644
index 000000000000..b862f479d876
--- /dev/null
+++ b/dev-python/boto3/boto3-1.38.12.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_{9,10,11,12,13} )
+
+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.12.0[${PYTHON_USEDEP}]
+"
+
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_prepare_all() {
+ # don't lock versions to narrow ranges
+ sed -e '/botocore/ d' \
+ -e '/jmespath/ d' \
+ -e '/s3transfer/ d' \
+ -i setup.py || die
+
+ # do not rely on bundled deps in botocore (sic!)
+ find -name '*.py' -exec sed -i \
+ -e 's:from botocore[.]vendored import:import:' \
+ -e 's:from botocore[.]vendored[.]:from :' \
+ {} + || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/botocore/Manifest b/dev-python/botocore/Manifest
index de1e3adb11e8..1469b199676a 100644
--- a/dev-python/botocore/Manifest
+++ b/dev-python/botocore/Manifest
@@ -1,6 +1,7 @@
DIST botocore-1.37.37.gh.tar.gz 14563135 BLAKE2B 290689f13333ab7ebdbac0bccf6568035776482dbab62c542a41ce6bf93b9d5e01400526c50534fb068798dc5626408c039f8746f091fe881cb70629c6ccd6e4 SHA512 3e020f6f264ef19a71f812733536812abe92e5998f3c19766782e01cdd235a17648b330bdb64289ea8b87a520625e0c7ece9436e014ade111d66bc4181f5bec9
DIST botocore-1.38.10.gh.tar.gz 14616622 BLAKE2B adf54a0e015d3a8b17ac986f8f05b49552ab3966694bf2fe90fbf9a0e4da134f4028469133d5c9b9717c2bd9bb874e0212373482341c1fee7a837d15614cd3ca SHA512 bc3ff2e73cd123017bf3be6793cbb902fafce244cd2469c33f093120317acff75f19c37c5f11427882bfc1be228f2f1a1334024e6c6683e46a57793f77a3bf0b
DIST botocore-1.38.11.gh.tar.gz 14617163 BLAKE2B e521777baa74342bff16a59a0a1281e8c44abfa4e83c49aba3cf7ec21ef0fb9e4940a7aa82cd1e51ed628ce64260fbd953db8c0867139c2ed37d2a002e01ad9d SHA512 6b9cd410aa2cf4169450aa6607ae68408a179258d1de8f0c465bc8010cad0ad05946822924780c68259bcce95c1b99e61459c850f9a31a7df5ac8638ba1186cf
+DIST botocore-1.38.12.gh.tar.gz 14619336 BLAKE2B 65e66c6ef2daccef4e21a8256e4633140c2cfd424b76bee71c76fb1f9609c27623fbf34fa5a73606a9b9e1877e5eae70453b6106f0f02a1148f0baef6b5cda2e SHA512 471918f08af44395297f25b663d972155dddd23d6e1904afb3c002d38e919b52785dbc7da84f8a5b56921198304a7a28320328fc00da2b786ecc8b726bd1f08f
DIST botocore-1.38.3.gh.tar.gz 14578552 BLAKE2B 4766db1ba2651ebe65c79f8a37c91cf95875a20c0cc51c1886cd394b90d50109738daa79b398e0c4b80031cfab69e1338dfaafbc0ae796fffa3348f6b13fc1ce SHA512 ad69e119d5bbc98a0c14c1c927badeecc1f57d31305e6a07af41d4d4bf6755f5abc150e36321f71b9495221ad93052d84a1dc964fb9ef6fdd791d4c37e75a01a
DIST botocore-1.38.8.gh.tar.gz 14606167 BLAKE2B cb92f6014349f5188d62ddeb043e7532c50c7edc984cabae918825cdace981694c37ba656afcbbb64e65e275da4980d5f256a945bbcc63f9609272b08690c3d5 SHA512 bc9096051fde740a908ef0912a0c205595e7df653a349c167f616a788423578ba6b3aed6fe6213f528faa32b1c946abf0ac66dd81afdc05d41d12a4af4f7e818
DIST botocore-1.38.9.gh.tar.gz 14612563 BLAKE2B 10a0e43846393c06c808e306cde1398ea9374712d07b71d16270cd3238d3063f66ff532fab465acb5a87065002b7ca7394d0c77a25c83b9f8b8ecad7823042a2 SHA512 748c373a1be84a123968444316de7ab6f34b548d7619183d23ae07d0b0aeeeebc8ba1d25bb5517f0491144f7578fa9a7e9fbca066f6aa0da7b2d7439138bb8fd
diff --git a/dev-python/botocore/botocore-1.38.12.ebuild b/dev-python/botocore/botocore-1.38.12.ebuild
new file mode 100644
index 000000000000..df85ee0d220c
--- /dev/null
+++ b/dev-python/botocore/botocore-1.38.12.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_{9,10,11,12,13} )
+
+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_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
+ )
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest tests/{functional,unit}
+}
diff --git a/dev-python/cfn-lint/Manifest b/dev-python/cfn-lint/Manifest
index 50ecb10632f0..134133d0064b 100644
--- a/dev-python/cfn-lint/Manifest
+++ b/dev-python/cfn-lint/Manifest
@@ -1,3 +1,4 @@
DIST cfn_lint-1.33.2.tar.gz 3163304 BLAKE2B f61d6a55e1fe2edd3229d6e9281b6267b3231afea43376d0ef2046ed941ef1c910c56e1af05b9eec08c8f0bec87fcddc95757a2433e1c46b2c8863280bebae2a SHA512 d935009da692e5003461d9c9f806733d17de426e0598a33a53470d3ee6c8a194c735b542bd346e9b33d462a71a6043f6ae1f8e9ff55cff3b6b942d2f1f49913c
DIST cfn_lint-1.34.2.tar.gz 3180262 BLAKE2B 0e92964da1d661e5a37f9f4c65c46b7eabdf9a23df1cbeeba96e072347b9be32b8067e72179e51ff83fbf8fa5cf810a409fe1819f3c124189a83e0bd9d147e0a SHA512 46d738319c3e0227fa0996e102e753929bf2bd6916136fe1879d757e64cc83554eca9fd1934dba89602301e42854af9f229bf4d41a118e2dea895553cf556b6e
DIST cfn_lint-1.35.0.tar.gz 3070040 BLAKE2B f0f868188e8b9088ce3e15d6b83dfc75ff4fd69b6095e8f1d3f27eec0da6518df5231336416bfc14e50b290def2ed10c9d6e4b022686686f580fec1e4a88db6d SHA512 8f44c6f1639ddeed41f4b978b1b5f8503de6a3e2d96b85a82f86f23ea2a258dfa7cfb37019a5bc9ed0620ccba6d8993f12e33c06d81eb32f1201309dd2a23580
+DIST cfn_lint-1.35.1.tar.gz 3077415 BLAKE2B 8ef32c6a1b7e6d4db976e8b59b1933814647207a0d690ecadb82ac1dd660bc5ed55e66de2ef21e9936d0c97abcdaa1bdaf8e65a996622e949ddf07afa8588240 SHA512 90c6acec47e9d4fb7344dab7c3ce8170a0ee09875806fe1ea71da91a9ef9e852044a351227b279e9ae0ba42d8f2f1104c6f1460b0aba00aac63ce41d4e147b36
diff --git a/dev-python/cfn-lint/cfn-lint-1.35.1.ebuild b/dev-python/cfn-lint/cfn-lint-1.35.1.ebuild
new file mode 100644
index 000000000000..669286dc533a
--- /dev/null
+++ b/dev-python/cfn-lint/cfn-lint-1.35.1.ebuild
@@ -0,0 +1,61 @@
+# 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="CloudFormation Linter"
+HOMEPAGE="
+ https://github.com/aws-cloudformation/cfn-lint/
+ https://pypi.org/project/cfn-lint/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+
+RDEPEND="
+ >=dev-python/aws-sam-translator-1.97.0[${PYTHON_USEDEP}]
+ dev-python/jsonpatch[${PYTHON_USEDEP}]
+ >=dev-python/jschema-to-python-1.2.3[${PYTHON_USEDEP}]
+ <dev-python/jsonschema-5[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/junit-xml[${PYTHON_USEDEP}]
+ <dev-python/networkx-4[${PYTHON_USEDEP}]
+ >dev-python/pyyaml-5.4[${PYTHON_USEDEP}]
+ >=dev-python/regex-2021.7.1[${PYTHON_USEDEP}]
+ >=dev-python/sarif-om-1.0.4[${PYTHON_USEDEP}]
+ >=dev-python/sympy-1.0.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ >=dev-python/setuptools-77.0.3[${PYTHON_USEDEP}]
+ test? (
+ dev-python/defusedxml[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ # unpin the deps
+ sed -e 's:~=[0-9.]*::' -i pyproject.toml || die
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # different line wrapping somehow
+ test/unit/module/template/test_template.py::TestTemplate::test_build_graph
+ # requires git repo
+ test/unit/module/maintenance/test_update_documentation.py::TestUpdateDocumentation::test_update_docs
+ )
+
+ # from tox.ini
+ local -x AWS_DEFAULT_REGION=us-east-1
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest
+}
diff --git a/dev-python/cython/Manifest b/dev-python/cython/Manifest
index 17794fce5adf..b2ed93e391c6 100644
--- a/dev-python/cython/Manifest
+++ b/dev-python/cython/Manifest
@@ -1,3 +1,4 @@
DIST cython-3.0.12.tar.gz 2757617 BLAKE2B 064549e36e03424065eab081b60e2761d198490cfd4d7836ea236b833ada3962e6ed42ba1710b33418f8a31ac282cdc156ceb544ee21be80ee34b7a3d3f6c7fb SHA512 c4e85596eeea444fae983d32ce8731cc5d0d612d1f96b998db3aa7946e8be151a7ea62c6df163d875111e306c870656b82a8468dd873cacf84c7bd5671a39bc3
+DIST cython-3.1.0.tar.gz 3181017 BLAKE2B 8da25d43e4e24503dba8f0b22176eecf31d597c091734a7d3460d712137783c451f4589a99932ad3c0b028a825939980a92d9a653208eff2be71307680d353ff SHA512 94bbf2d020785a24828e9f5516515d11926bc3511074e5ea780db30d0b8dde332d52adb950dbdca4767ba86d5e7630549efc442e73269d2c4c91ac4844a69a14
DIST cython-3.1.0rc1.tar.gz 3158411 BLAKE2B 44540e95b8b060956654a0d92fc4b8417088816a1e3f8fc17c8575a1cbd4b71a76cc69209d58c731281a310a9f6a7e2e711f88dc6855bc487d08056203cb04d8 SHA512 b0cefe1d4e248e6044af373088902475839ae06b5855b5b3bffdce5159a0f6e54802c24715a6f6e3242a250841c2ff1e56435b7ed3e304964af01a162f8a851a
DIST cython-3.1.0rc2.tar.gz 3170920 BLAKE2B 08dbce1c6d52295dfc09d14349af03d2d58c84d165b92b8c95c24b6446695e4064960280acb177ab4114b381ee03c99d230f4b70a6f71b9a4b9a8ccd85e7a2e6 SHA512 89f75cd32187db8072fc9596528f72b374f47a0bcfeeea24d401bc4ab52b48ec16049e68e2b8c36ba6b9b6e28bf6e8d5f8f3dde2f19452ee3d8baf21bdf0e747
diff --git a/dev-python/cython/cython-3.1.0.ebuild b/dev-python/cython/cython-3.1.0.ebuild
new file mode 100644
index 000000000000..2f47286fe83a
--- /dev/null
+++ b/dev-python/cython/cython-3.1.0.ebuild
@@ -0,0 +1,84 @@
+# 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_TESTED=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 multiprocessing pypi toolchain-funcs
+
+DESCRIPTION="A Python to C compiler"
+HOMEPAGE="
+ https://cython.org/
+ https://github.com/cython/cython/
+ https://pypi.org/project/Cython/
+"
+
+LICENSE="Apache-2.0"
+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"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ $(python_gen_cond_dep '
+ <dev-python/numpy-2[${PYTHON_USEDEP}]
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.29.22-spawn-multiprocessing.patch"
+ "${FILESDIR}/${PN}-0.29.23-pythran-parallel-install.patch"
+)
+
+distutils_enable_sphinx docs \
+ dev-python/jinja2 \
+ dev-python/sphinx-issues \
+ dev-python/sphinx-tabs
+
+python_prepare_all() {
+ # Needs dev-python/pip and doesn't like 'externally-managed' (bug #927995)
+ rm tests/run/coverage_cmd_src_pkg_layout.srctree || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_compile() {
+ # Python gets confused when it is in sys.path before build.
+ local -x PYTHONPATH=
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
+ einfo "Skipping tests on ${EPYTHON} (xfail)"
+ return
+ fi
+
+ # Needed to avoid confusing cache tests
+ unset CYTHON_FORCE_REGEN
+
+ tc-export CC
+ # https://github.com/cython/cython/issues/1911
+ local -x CFLAGS="${CFLAGS} -fno-strict-overflow"
+ "${PYTHON}" runtests.py \
+ -vv \
+ -j "$(makeopts_jobs)" \
+ --work-dir "${BUILD_DIR}"/tests \
+ --no-examples \
+ --no-code-style \
+ || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+ local DOCS=( CHANGES.rst README.rst ToDo.txt USAGE.txt )
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/django-guardian/Manifest b/dev-python/django-guardian/Manifest
index 691a475b21b4..76cd1e8b1841 100644
--- a/dev-python/django-guardian/Manifest
+++ b/dev-python/django-guardian/Manifest
@@ -1 +1,2 @@
DIST django-guardian-2.4.0.gh.tar.gz 160663 BLAKE2B ce53b605f49e4671cd997a45f8fb8d605bed28693a7920e08a9269fe8ef9831864a5a234b927fee87db4d0c29a496c117f1f154d3e42b806eaafdf7bab444f51 SHA512 820dad68d0a7aa5b907803a3b7be2daf3f9d811dc51efcd1adc3c151f1468749943a0ce35514b83d7a64a4d2851ea2eca1581df928f516902a3cf38bca88c6be
+DIST django-guardian-3.0.0.gh.tar.gz 259983 BLAKE2B 9504cdb7f228f8bf6c40ddccec2b7c76663d359946d5662885b5831944938f78e82db3efcf2ad3d70ea021a3afd5b55fece18fddaba6234454a000d6ec1d8438 SHA512 729edc1556a4312476216a32a8221f15664f666f465697250ac38a6dfb5de633e4b223decf3445c3b461127bc9d41fe794fdd61188017107b88bb5eb34c04587
diff --git a/dev-python/django-guardian/django-guardian-3.0.0.ebuild b/dev-python/django-guardian/django-guardian-3.0.0.ebuild
new file mode 100644
index 000000000000..4a0982c3c413
--- /dev/null
+++ b/dev-python/django-guardian/django-guardian-3.0.0.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2023-2025 Liguros 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
+
+DESCRIPTION="A Django application to retrieve user's IP address"
+HOMEPAGE="
+ https://github.com/django-guardian/django-guardian
+ https://pypi.org/project/django-guardian/
+"
+SRC_URI="https://github.com/django-guardian/django-guardian/archive/refs/tags/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ >=dev-python/django-1.11[${PYTHON_USEDEP}]
+ dev-python/django-environ
+ dev-python/mock
+"
+
+python_test() {
+ "${EPYTHON}" tests/manage.py test -v2 myapp || die "Tests failed with ${EPYTHON}"
+}
diff --git a/dev-python/fastapi/Manifest b/dev-python/fastapi/Manifest
new file mode 100644
index 000000000000..5ea7c4b7b0e8
--- /dev/null
+++ b/dev-python/fastapi/Manifest
@@ -0,0 +1 @@
+DIST fastapi-0.115.12.tar.gz 295236 BLAKE2B 224b74553668721dde3592a50a3d5b02a967a58f55d3beb6bec753755cddfbb803f0661ce6cc41af3ddfc28bb304d053f41aad8ab9d8965048ff80cad6c3207e SHA512 8eb8d998643ca748744b9c00e14cdd62f02e58145e2a64dcf090361d56fa52a12b643b8fc3dc98f41af74c06d46b787acf92ae2be828d99b6d4290c20ced7f6f
diff --git a/dev-python/fastapi/fastapi-0.115.12.ebuild b/dev-python/fastapi/fastapi-0.115.12.ebuild
new file mode 100644
index 000000000000..fe85c6f57fc3
--- /dev/null
+++ b/dev-python/fastapi/fastapi-0.115.12.ebuild
@@ -0,0 +1,96 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=pdm-backend
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1 optfeature pypi
+
+DESCRIPTION="FastAPI framework, high performance, easy to learn, ready for production"
+HOMEPAGE="
+ https://fastapi.tiangolo.com/
+ https://pypi.org/project/fastapi/
+ https://github.com/fastapi/fastapi
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ <dev-python/pydantic-3.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-1.7.4[${PYTHON_USEDEP}]
+ <dev-python/starlette-0.47.0[${PYTHON_USEDEP}]
+ >=dev-python/starlette-0.40.0[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.8.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/aiosqlite[${PYTHON_USEDEP}]
+ >=dev-python/anyio-3.2.1[${PYTHON_USEDEP}]
+ dev-python/dirty-equals[${PYTHON_USEDEP}]
+ dev-python/email-validator[${PYTHON_USEDEP}]
+ >=dev-python/flask-1.1.2[${PYTHON_USEDEP}]
+ dev-python/inline-snapshot[${PYTHON_USEDEP}]
+ >=dev-python/jinja2-3.1.5[${PYTHON_USEDEP}]
+ dev-python/orjson[${PYTHON_USEDEP}]
+ <dev-python/passlib-2.0.0[${PYTHON_USEDEP}]
+ >=dev-python/passlib-1.7.2[${PYTHON_USEDEP}]
+ dev-python/pydantic-settings[${PYTHON_USEDEP}]
+ dev-python/pyjwt[${PYTHON_USEDEP}]
+ >=dev-python/python-multipart-0.0.18[${PYTHON_USEDEP}]
+ <dev-python/pyyaml-7.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-5.3.1[${PYTHON_USEDEP}]
+ dev-python/sqlmodel[${PYTHON_USEDEP}]
+ dev-python/trio[${PYTHON_USEDEP}]
+ dev-python/ujson[${PYTHON_USEDEP}]
+ )
+"
+# brottli and zstd due to starlette based tests expecting it
+
+PATCHES=(
+ "${FILESDIR}"/fastaapi-0.115.6-httpx-0.28-test-fix.patch
+)
+
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Depends on coverage
+ "tests/test_fastapi_cli.py::test_fastapi_cli"
+ # Test result affected by unrelated packages such as brottli and zstd
+ # https://github.com/fastapi/fastapi/blob/7c6f2f8fde68f488163376c9e92a59d46c491298/tests/test_tutorial/test_header_param_models/test_tutorial001.py#L77
+ "tests/test_tutorial/test_header_param_models/test_tutorial001.py::test_header_param_model_invalid"
+ # https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6afa196ca0cb1604875847b1b84fa64896a06f6e
+ "tests/test_multipart_installation.py::test_incorrect_multipart_installed_form"
+ "tests/test_multipart_installation.py::test_incorrect_multipart_installed_file_upload"
+ "tests/test_multipart_installation.py::test_incorrect_multipart_installed_file_bytes"
+ "tests/test_multipart_installation.py::test_incorrect_multipart_installed_multi_form"
+ "tests/test_multipart_installation.py::test_incorrect_multipart_installed_form_file"
+ "tests/test_multipart_installation.py::test_no_multipart_installed"
+ "tests/test_multipart_installation.py::test_no_multipart_installed_file"
+ "tests/test_multipart_installation.py::test_no_multipart_installed_file_bytes"
+ "tests/test_multipart_installation.py::test_no_multipart_installed_multi_form"
+ "tests/test_multipart_installation.py::test_no_multipart_installed_form_file"
+ "tests/test_multipart_installation.py::test_old_multipart_installed"
+)
+
+python_prepare_all() {
+ # Dont install fastapi executable as fastapi-cli is supposed to handle it
+ sed -i -e '/\[project.scripts\]/,/^$/d' pyproject.toml || die
+
+ distutils-r1_python_prepare_all
+}
+
+pkg_postinst() {
+ optfeature "commandline interface" dev-python/fastapi-cli
+ optfeature "test client" dev-python/httpx
+ optfeature "templates" dev-python/jinja2
+ optfeature "forms and file uploads" dev-python/python-multipart
+ optfeature "validate emails" dev-python/email-validator
+ optfeature "uvicorn with uvloop" dev-python/uvicorn
+ optfeature_header "Alternative JSON responses"
+ optfeature "ORJSONResponse" dev-python/orjson
+ optfeature "UJSONResponse" dev-python/ujson
+}
diff --git a/dev-python/fastapi/files/fastaapi-0.115.6-httpx-0.28-test-fix.patch b/dev-python/fastapi/files/fastaapi-0.115.6-httpx-0.28-test-fix.patch
new file mode 100644
index 000000000000..1ce4fe1d97d9
--- /dev/null
+++ b/dev-python/fastapi/files/fastaapi-0.115.6-httpx-0.28-test-fix.patch
@@ -0,0 +1,26 @@
+--- a/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py
++++ b/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py
+@@ -14,6 +14,22 @@ def test_endpoint_works():
+ def test_exception_handler_body_access():
+ response = client.post("/", json={"numbers": [1, 2, 3]})
+ assert response.json() == IsDict(
++ {
++ 'detail': {
++ 'body': '{"numbers":[1,2,3]}',
++ 'errors': [
++ {
++ 'input': {'numbers': [1, 2, 3]},
++ 'loc': ['body'],
++ 'msg': 'Input should be a valid list',
++ 'type': 'list_type'
++ }
++ ]
++ }
++ }
++ ) | IsDict(
++ # Pre httpx-0.28.0 json output
++ # https://github.com/encode/httpx/pull/3367
+ {
+ "detail": {
+ "errors": [
+
diff --git a/dev-python/safety/metadata.xml b/dev-python/fastapi/metadata.xml
index 3fab47b124fa..0dec5a678a5f 100644
--- a/dev-python/safety/metadata.xml
+++ b/dev-python/fastapi/metadata.xml
@@ -2,13 +2,10 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
- <email>oz.tiram@gmail.com</email>
- <name>Oz Tiram</name>
- </maintainer>
- <maintainer type="project">
- <email>proxy-maint@gentoo.org</email>
- <name>Proxy Maintainers</name>
+ <email>negril.nx+gentoo@gmail.com</email>
+ <name>Paul Zander</name>
</maintainer>
<origin>gentoo-guru-overlay</origin>
+ <stabilize-allarches/>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/flufl-lock/Manifest b/dev-python/flufl-lock/Manifest
index 83e89481700c..b7041e2af46d 100644
--- a/dev-python/flufl-lock/Manifest
+++ b/dev-python/flufl-lock/Manifest
@@ -1 +1,2 @@
DIST flufl_lock-8.1.0.tar.gz 32884 BLAKE2B 9d5f557d4664cda5fb31b4f73d79e99acac342462a94b4c1405f1032c25fd60785986e6ae9e48629b2bae0977517ec888eacc6e52d4f75b41887d14521a85f54 SHA512 3238d4c89c3702584c19882caa903a8efd33ad49ad9286d7965694f2cfdf626adee887d6a524d293457b3cd176fc02fc71edfdc0b807c3aaaed0aa77f2188a3b
+DIST flufl_lock-8.2.0.tar.gz 33514 BLAKE2B 99bb64435896d40c019403aefbe9171a25c28e1823b44f44c1940b3613f828e0cd69b4aa55b7cff9de774acb19137e3dd810768f76ff8736ba4d25f9fe31c99a SHA512 c02c0a2d1cff6c775d692c6dabb2c01ec07f62472c082be998430d71ee26a4c2d5f351d956ea349d74029f1669b72bf5340e82e1f6b319979b750951410c6b94
diff --git a/dev-python/flufl-lock/flufl-lock-8.2.0.ebuild b/dev-python/flufl-lock/flufl-lock-8.2.0.ebuild
new file mode 100644
index 000000000000..62f836f4c55a
--- /dev/null
+++ b/dev-python/flufl-lock/flufl-lock-8.2.0.ebuild
@@ -0,0 +1,36 @@
+# 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} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="NFS-safe file locking with timeouts for POSIX systems"
+HOMEPAGE="
+ https://gitlab.com/warsaw/flufl.lock/
+ https://pypi.org/project/flufl.lock/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ dev-python/atpublic[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/sybil[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ sed -e '/addopts/d' -i pyproject.toml || die
+ distutils-r1_src_prepare
+}
diff --git a/dev-python/freezegun/freezegun-1.5.1.ebuild b/dev-python/freezegun/freezegun-1.5.1.ebuild
index e2e52a84da5f..6b00bca74517 100644
--- a/dev-python/freezegun/freezegun-1.5.1.ebuild
+++ b/dev-python/freezegun/freezegun-1.5.1.ebuild
@@ -32,7 +32,7 @@ distutils_enable_tests pytest
python_test() {
local EPYTEST_DESELECT=()
case ${EPYTHON} in
- python3.13*)
+ python3.1[34]*)
EPYTEST_DESELECT+=(
# https://github.com/spulec/freezegun/issues/547
tests/test_datetimes.py::TestUnitTestMethodDecorator::test_method_decorator_works_on_unittest_kwarg_frozen_time
diff --git a/dev-python/langdetect/Manifest b/dev-python/langdetect/Manifest
index a11d7c268c91..d12ab8aeaca8 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 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
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 99577c43fc3e..56733bbffc48 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-2024 Gentoo Authors
+# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
DISTUTILS_USE_PEP517=setuptools
inherit distutils-r1 pypi
@@ -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 c0f74ac187e2..020e07f2a3dd 100644
--- a/dev-python/langdetect/metadata.xml
+++ b/dev-python/langdetect/metadata.xml
@@ -2,9 +2,11 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
- <email>pastalian46@gmail.com</email>
- <name>Takuya Wakazono</name>
+ <email>marcin.deranek@slonko.net</email>
+ <name>Marcin Deranek</name>
</maintainer>
-
- <origin>gentoo-guru-overlay</origin>
+ <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/narwhals/Manifest b/dev-python/narwhals/Manifest
index dfc093181031..d42913e0e134 100644
--- a/dev-python/narwhals/Manifest
+++ b/dev-python/narwhals/Manifest
@@ -1,2 +1,3 @@
DIST narwhals-1.37.1.gh.tar.gz 708868 BLAKE2B 0cda4e6febb2407b12db34068ba5419cfacc2003a6e4c9a62f713db8ab9994128ac6a739d09a8eb40ab543eb689c3867f3069841f761786a221eff5ef1b37b39 SHA512 3aeb15341f525397aff4ca389cafcdce3b433c0cdd7d0ad389592cfaf0c3837019660895b3a52923b84ce4f2b3f9d29670a962dcd5687dca1a4fe99977e49e20
DIST narwhals-1.38.0.gh.tar.gz 714872 BLAKE2B f60b828c20849866ac2b0a48a4d3cdd21c80c1f2d48beb1cfe1f519e09f9ea7e045ab3824de886a880e3e5385786e73208bc69a6bd8c1c06b94c3161f3be4d6c SHA512 668f57d7830d70992477f5ac7d917abaf95b36ade8c0b60c93d1ed6eb5f4aa892c83812aedd5056b32d6498d727804d835d880ddc41a2e6a0630fee05e30e581
+DIST narwhals-1.38.2.gh.tar.gz 715904 BLAKE2B b813fbf86e9210d3d232e06a5de390678742c81ccc6338d3f3c8e79bdd3c95046b947e8924ef736d55b40ed0808cf505e190e0cba14f33f6e46560396847ab99 SHA512 d0e01b754c77ff9764d42360cfcc38f35b1282ed1ce162f69dc1f28299484d1723de4ac13eadf8f7f8852c665c01f2ff9650f3103575e1781cfe5791d3f8748c
diff --git a/dev-python/narwhals/narwhals-1.38.2.ebuild b/dev-python/narwhals/narwhals-1.38.2.ebuild
new file mode 100644
index 000000000000..93ec9826f3d0
--- /dev/null
+++ b/dev-python/narwhals/narwhals-1.38.2.ebuild
@@ -0,0 +1,41 @@
+# Copyright 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} )
+
+inherit distutils-r1
+
+DESCRIPTION="Extremely lightweight compatibility layer between dataframe libraries"
+HOMEPAGE="
+ https://github.com/narwhals-dev/narwhals/
+ https://pypi.org/project/narwhals/
+"
+# https://github.com/narwhals-dev/narwhals/issues/2284
+SRC_URI="
+ https://github.com/narwhals-dev/narwhals/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+BDEPEND="
+ test? (
+ dev-python/hypothesis[${PYTHON_USEDEP}]
+ dev-python/pandas[${PYTHON_USEDEP}]
+ dev-python/pyarrow[${PYTHON_USEDEP}]
+ dev-python/pytest-env[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+python_test() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest --runslow --constructors="pandas,pandas[nullable],pandas[pyarrow],pyarrow"
+}
diff --git a/dev-python/nltk/Manifest b/dev-python/nltk/Manifest
index 4329ee5b7d5f..6a83b3ff24fa 100644
--- a/dev-python/nltk/Manifest
+++ b/dev-python/nltk/Manifest
@@ -1 +1,6 @@
-DIST nltk-3.9.1.tar.gz 2904691 BLAKE2B c4178eea863feb32642a7f1c290e465244655223c1b18437b832ebd315e01f797d393ab925e641ae9a53a785f0a7fe2bf1dca504a50fb8f66fbafe2a6a1b1c8b SHA512 dad570b3a6728f22b55438a159b56009676f4fbdfc293673eaae0b0ed55dd2db91c32f59b3f89ff6d38101b3c3af9ea81f3519b578c83c17c1a9f3f716bc3ff4
+AUX python-3.12.patch 8925 BLAKE2B a9ad62b0b8d37b8707c6fa880af98ce6ee8e3f02a1d6cf42456a6d1dc2398f7cbf8721eb9e580594531c963dc10232f2e259939ed4dd78b5f6b9d778e2c2c7f7 SHA512 b32631b7d0b805496188b30e4ea8bcb3bd6cccee98b2f3cf5ccffcd8467c6e333654d23ab71b78ca1030aff54ac2e2137efff076bf86bd991bfd0a3077a6543f
+DIST nltk-3.8.1.gh.tar.gz 2867926 BLAKE2B 54de1d3ae7cfe0b71ac0f5a62ed3e81e489fa4d322cd32eb4aa4ef60617eb96767a0f3a92c7e5a16e71836cb0d3a1076ae3598b6bcf0af5925c95e1a0ccf70f8 SHA512 5b13eff5d8e628173f5321c293d896919d369bcd586861a7e09bf6fdca2b09f2580902da98ec647bcf9cdc2b33a87c830dda3793de20c31c8bc38c86df8f7930
+DIST nltk-3.9.1.gh.tar.gz 2874006 BLAKE2B 4ad375dafb32f16aa23128f1585f51f8f2c864edb40ea64e3fe291944a41de52fa5e37add1de86434de054bc2ff9ffa48c56a6d6793533f4c0ca6e798829be14 SHA512 7e384a23fa3839c29d38c083d6288d15ff04eb071c4bca3ec1bfb3b9cfcac8d2388041a950d6c71684ee29b791318312df99e29ae258eb5e602ccf2ad1407840
+EBUILD nltk-3.8.1.ebuild 1394 BLAKE2B bf5cdfbd9eb5c1b415de3039f5af1be36c34e8a3c0245efc908c941028b34119d59486dc0c8649771e386808d0c10ab1ab52d1bc651fd8157cd9b9fcc77bfb8e SHA512 3f4c996aab04efd784d948199a7b96bc58372e453216ae290a7c2f903f67f6518cd39162f55900fb1e047badab3d3d6a1fd53c330901f8ccb3acbd0a7023bd78
+EBUILD nltk-3.9.1.ebuild 1223 BLAKE2B f2f1ce13a1f015c4674bd41355c3c00e5f769e1521d8cbb36650bb81e0e799d9c2ee5c53465d101b332a81ad36eeb5061e7e9abd2103b3769978febfd9717445 SHA512 729bc346694c07deed10f6bea8755ec8a5ce255e4045b8ec2fe6140de65c77be2a0cf5a6535608975d853d12c2aa11b8272b9a2989f8961deb8640251fbf5bce
+MISC metadata.xml 445 BLAKE2B 4bfcde721368b9c9354799863a7a78d2c04eb789672f52b5449bda3ef567448fa1b434dda9d150aa0ff360477c576ea2fd0bebce40bf80bb843393e245f85278 SHA512 89bb6d0ca2e268e3540cf36e91b57e834eb31f078a91bb7ed7218a17c1a9b63809ae77916822eabf6a3a86286d00ae4a311b33c52e40d9d2e61b6d242f4cef78
diff --git a/dev-python/nltk/files/python-3.12.patch b/dev-python/nltk/files/python-3.12.patch
new file mode 100644
index 000000000000..c55d2852751c
--- /dev/null
+++ b/dev-python/nltk/files/python-3.12.patch
@@ -0,0 +1,282 @@
+commit 544bf807bf506927872b7b837c6e1514e80419ab
+Author: Konstantin Chernyshev <k4black@ya.ru>
+Date: Thu Nov 16 19:40:54 2023 +0100
+
+ fix(bleu): add Fraction with 3.12 support
+
+diff --git a/nltk/test/unit/translate/test_bleu.py b/nltk/test/unit/translate/test_bleu.py
+index 990b76406..b472d785f 100644
+--- a/nltk/test/unit/translate/test_bleu.py
++++ b/nltk/test/unit/translate/test_bleu.py
+@@ -2,7 +2,6 @@
+ Tests for BLEU translation evaluation metric
+ """
+
+-import io
+ import unittest
+
+ import numpy as np
+diff --git a/nltk/translate/bleu_score.py b/nltk/translate/bleu_score.py
+index da445bc3e..9647202e6 100644
+--- a/nltk/translate/bleu_score.py
++++ b/nltk/translate/bleu_score.py
+@@ -7,16 +7,40 @@
+ # For license information, see LICENSE.TXT
+
+ """BLEU score implementation."""
++from __future__ import annotations
+
+ import math
+ import sys
+ import warnings
+ from collections import Counter
+-from fractions import Fraction
++from dataclasses import dataclass
+
+ from nltk.util import ngrams
+
+
++@dataclass
++class Fraction:
++ """
++ This class is used to represent a fraction with both the numerator and denominator saved for later retrieval.
++ Python 3.12 removed _normalize=False from the standard lib Fraction constructor.
++ """
++
++ numerator: int | float
++ denominator: int = 1
++
++ def __float__(self):
++ return self.numerator / self.denominator
++
++ def __lt__(self, other):
++ return float(self) < float(other)
++
++ def __eq__(self, other):
++ return self.numerator == other.numerator and self.denominator == other.denominator
++
++ def __gt__(self, other):
++ return float(self) > float(other)
++
++
+ def sentence_bleu(
+ references,
+ hypothesis,
+@@ -222,7 +246,7 @@ def corpus_bleu(
+
+ # Collects the various precision values for the different ngram orders.
+ p_n = [
+- Fraction(p_numerators[i], p_denominators[i], _normalize=False)
++ Fraction(p_numerators[i], p_denominators[i])
+ for i in range(1, max_weight_length + 1)
+ ]
+
+@@ -365,7 +389,7 @@ def modified_precision(references, hypothesis, n):
+ # Usually this happens when the ngram order is > len(reference).
+ denominator = max(1, sum(counts.values()))
+
+- return Fraction(numerator, denominator, _normalize=False)
++ return Fraction(numerator, denominator)
+
+
+ def closest_ref_length(references, hyp_len):
+@@ -577,7 +601,7 @@ class SmoothingFunction:
+ In COLING 2004.
+ """
+ return [
+- Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1, _normalize=False)
++ Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1)
+ if i != 0
+ else p_n[0]
+ for i in range(len(p_n))
+
+commit eab59d7ceac5dc64e34ca04ee0143fa8998af204
+Author: Konstantin Chernyshev <k4black@ya.ru>
+Date: Thu Nov 16 19:46:47 2023 +0100
+
+ style: fix pre-commit style checks
+
+diff --git a/nltk/translate/bleu_score.py b/nltk/translate/bleu_score.py
+index 9647202e6..aab519521 100644
+--- a/nltk/translate/bleu_score.py
++++ b/nltk/translate/bleu_score.py
+@@ -35,7 +35,9 @@ class Fraction:
+ return float(self) < float(other)
+
+ def __eq__(self, other):
+- return self.numerator == other.numerator and self.denominator == other.denominator
++ return (
++ self.numerator == other.numerator and self.denominator == other.denominator
++ )
+
+ def __gt__(self, other):
+ return float(self) > float(other)
+@@ -601,10 +603,7 @@ class SmoothingFunction:
+ In COLING 2004.
+ """
+ return [
+- Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1)
+- if i != 0
+- else p_n[0]
+- for i in range(len(p_n))
++ Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1) if i != 0 else p_n[0] for i in range(len(p_n))
+ ]
+
+ def method3(self, p_n, *args, **kwargs):
+
+commit 8f06fa4b1da4a390d53010e56bc6ab5d5cb32a3a
+Author: Konstantin Chernyshev <k4black@ya.ru>
+Date: Thu Nov 16 19:48:06 2023 +0100
+
+ style: fix pre-commit style checks
+
+diff --git a/nltk/translate/bleu_score.py b/nltk/translate/bleu_score.py
+index aab519521..f32743ecc 100644
+--- a/nltk/translate/bleu_score.py
++++ b/nltk/translate/bleu_score.py
+@@ -603,7 +603,8 @@ class SmoothingFunction:
+ In COLING 2004.
+ """
+ return [
+- Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1) if i != 0 else p_n[0] for i in range(len(p_n))
++ Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1) if i != 0 else p_n[0]
++ for i in range(len(p_n))
+ ]
+
+ def method3(self, p_n, *args, **kwargs):
+
+commit b72a4bdbaf99a2bdb6a99454a1eb8804051bf644
+Author: Konstantin Chernyshev <k4black@ya.ru>
+Date: Thu Nov 16 21:49:32 2023 +0100
+
+ fix: Fraction
+
+diff --git a/nltk/translate/bleu_score.py b/nltk/translate/bleu_score.py
+index f32743ecc..72f5b548d 100644
+--- a/nltk/translate/bleu_score.py
++++ b/nltk/translate/bleu_score.py
+@@ -42,6 +42,14 @@ class Fraction:
+ def __gt__(self, other):
+ return float(self) > float(other)
+
++ def __add__(self, other):
++ if isinstance(other, int):
++ other = Fraction(other, 1)
++ return Fraction(
++ self.numerator * other.denominator + other.numerator * self.denominator,
++ self.denominator * other.denominator,
++ )
++
+
+ def sentence_bleu(
+ references,
+
+commit 86fa0832f0f4b366f96867f59ae05d744d68b513
+Author: Konstantin Chernyshev <k4black@ya.ru>
+Date: Thu Nov 16 23:26:42 2023 +0100
+
+ fix: use Fraction override
+
+diff --git a/nltk/translate/bleu_score.py b/nltk/translate/bleu_score.py
+index 72f5b548d..ddb54dba8 100644
+--- a/nltk/translate/bleu_score.py
++++ b/nltk/translate/bleu_score.py
+@@ -7,48 +7,39 @@
+ # For license information, see LICENSE.TXT
+
+ """BLEU score implementation."""
+-from __future__ import annotations
+-
+ import math
+ import sys
+ import warnings
+ from collections import Counter
+-from dataclasses import dataclass
++from fractions import Fraction as _Fraction
+
+ from nltk.util import ngrams
+
+
+-@dataclass
+-class Fraction:
+- """
+- This class is used to represent a fraction with both the numerator and denominator saved for later retrieval.
+- Python 3.12 removed _normalize=False from the standard lib Fraction constructor.
+- """
+-
+- numerator: int | float
+- denominator: int = 1
+-
+- def __float__(self):
+- return self.numerator / self.denominator
+-
+- def __lt__(self, other):
+- return float(self) < float(other)
++class Fraction(_Fraction):
++ """Fraction with _normalize=False support for 3.12"""
+
+- def __eq__(self, other):
+- return (
+- self.numerator == other.numerator and self.denominator == other.denominator
+- )
++ def __new__(cls, numerator=0, denominator=None, _normalize=False):
++ if sys.version_info >= (3, 12):
++ self = super().__new__(cls, numerator, denominator)
++ else:
++ self = super().__new__(cls, numerator, denominator, _normalize=_normalize)
++ self._normalize = _normalize
++ self._original_numerator = numerator
++ self._original_denominator = denominator
++ return self
+
+- def __gt__(self, other):
+- return float(self) > float(other)
++ @property
++ def numerator(self):
++ if self._normalize:
++ return self._numerator
++ return self._original_numerator
+
+- def __add__(self, other):
+- if isinstance(other, int):
+- other = Fraction(other, 1)
+- return Fraction(
+- self.numerator * other.denominator + other.numerator * self.denominator,
+- self.denominator * other.denominator,
+- )
++ @property
++ def denominator(self):
++ if self._normalize:
++ return self._denominator
++ return self._original_denominator
+
+
+ def sentence_bleu(
+@@ -256,7 +247,7 @@ def corpus_bleu(
+
+ # Collects the various precision values for the different ngram orders.
+ p_n = [
+- Fraction(p_numerators[i], p_denominators[i])
++ Fraction(p_numerators[i], p_denominators[i], _normalize=False)
+ for i in range(1, max_weight_length + 1)
+ ]
+
+@@ -399,7 +390,7 @@ def modified_precision(references, hypothesis, n):
+ # Usually this happens when the ngram order is > len(reference).
+ denominator = max(1, sum(counts.values()))
+
+- return Fraction(numerator, denominator)
++ return Fraction(numerator, denominator, _normalize=False)
+
+
+ def closest_ref_length(references, hyp_len):
+@@ -611,7 +602,8 @@ class SmoothingFunction:
+ In COLING 2004.
+ """
+ return [
+- Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1) if i != 0 else p_n[0]
++ Fraction(p_n[i].numerator + 1, p_n[i].denominator + 1, _normalize=False)
++ if i != 0 else p_n[0]
+ for i in range(len(p_n))
+ ]
+
diff --git a/dev-python/nltk/metadata.xml b/dev-python/nltk/metadata.xml
index 3fab47b124fa..0317a43d0f5a 100644
--- a/dev-python/nltk/metadata.xml
+++ b/dev-python/nltk/metadata.xml
@@ -2,13 +2,10 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
- <email>oz.tiram@gmail.com</email>
- <name>Oz Tiram</name>
- </maintainer>
- <maintainer type="project">
- <email>proxy-maint@gentoo.org</email>
- <name>Proxy Maintainers</name>
+ <email>marcin.deranek@slonko.net</email>
+ <name>Marcin Deranek</name>
</maintainer>
- <origin>gentoo-guru-overlay</origin>
+ <origin>slonko-overlay</origin>
+ <stabilize-allarches/>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/nltk/nltk-3.8.1.ebuild b/dev-python/nltk/nltk-3.8.1.ebuild
new file mode 100644
index 000000000000..064a8ccee2aa
--- /dev/null
+++ b/dev-python/nltk/nltk-3.8.1.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2023 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} )
+PYTHON_REQ_USE="sqlite,tk?,xml(+)"
+
+inherit distutils-r1
+
+DESCRIPTION="Natural Language Toolkit"
+HOMEPAGE="https://www.nltk.org/ https://github.com/nltk/nltk/"
+SRC_URI="https://github.com/nltk/nltk/archive/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="amd64 ~ppc64 ~riscv x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+IUSE="tk"
+
+RDEPEND="
+ dev-python/click[${PYTHON_USEDEP}]
+ dev-python/joblib[${PYTHON_USEDEP}]
+ dev-python/regex[${PYTHON_USEDEP}]
+ dev-python/tqdm[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/joblib[${PYTHON_USEDEP}]
+ >=dev-python/nltk-data-20211221
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/twython[${PYTHON_USEDEP}]
+ dev-python/scikit-learn[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]
+ dev-python/matplotlib[${PYTHON_USEDEP}]
+ )"
+PDEPEND="dev-python/nltk-data"
+
+PATCHES=( "${FILESDIR}/python-3.12.patch" )
+
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Internet
+ nltk/test/unit/test_downloader.py::test_downloader_using_existing_parent_download_dir
+ nltk/test/unit/test_downloader.py::test_downloader_using_non_existing_parent_download_dir
+)
diff --git a/dev-python/nltk/nltk-3.9.1.ebuild b/dev-python/nltk/nltk-3.9.1.ebuild
index 815d42344ed6..ed46f1794bd1 100644
--- a/dev-python/nltk/nltk-3.9.1.ebuild
+++ b/dev-python/nltk/nltk-3.9.1.ebuild
@@ -1,19 +1,22 @@
-# Copyright 2025 Gentoo Authors
+# Copyright 1999-2023 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} )
+PYTHON_REQ_USE="sqlite,tk?,xml(+)"
-inherit distutils-r1 pypi
+inherit distutils-r1
-DESCRIPTION="Python package for natural language processing."
-HOMEPAGE="https://pypi.org/project/nltk/"
+DESCRIPTION="Natural Language Toolkit"
+HOMEPAGE="https://www.nltk.org/ https://github.com/nltk/nltk/"
+SRC_URI="https://github.com/nltk/nltk/archive/${PV}.tar.gz -> ${P}.gh.tar.gz"
LICENSE="Apache-2.0"
SLOT="0"
-KEYWORDS="~amd64"
+KEYWORDS="amd64 ~ppc64 ~riscv x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+IUSE="tk"
RDEPEND="
dev-python/click[${PYTHON_USEDEP}]
@@ -21,3 +24,23 @@ RDEPEND="
dev-python/regex[${PYTHON_USEDEP}]
dev-python/tqdm[${PYTHON_USEDEP}]
"
+BDEPEND="
+ test? (
+ dev-python/joblib[${PYTHON_USEDEP}]
+ >=dev-python/nltk-data-20211221
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pyparsing[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/twython[${PYTHON_USEDEP}]
+ dev-python/scikit-learn[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]
+ dev-python/matplotlib[${PYTHON_USEDEP}]
+ )"
+PDEPEND=">=dev-python/nltk-data-20250310"
+
+distutils_enable_tests pytest
+
+EPYTEST_IGNORE=(
+ # Network required
+ nltk/test/unit/test_downloader.py
+)
diff --git a/dev-python/nuitka/Manifest b/dev-python/nuitka/Manifest
index 4ee934d2900c..11913728f5c8 100644
--- a/dev-python/nuitka/Manifest
+++ b/dev-python/nuitka/Manifest
@@ -1 +1,2 @@
+DIST Nuitka-2.7.1.tar.gz 3882402 BLAKE2B 0772125d02af375ae6fc2ee03451dcd781cbe51b388f28cd02809394487edba8d50f18f72a71cfc169017dc141b1c4cdf31a159a93f114dd5d53ccbc6a69a32f SHA512 0ac4fa937120d82186fc233eb37b8707c553fab0c0e51cd2249961efe60d5b5eb0fbe2569ca608e89a15acdc2107102cc62b84719eb22aa63d23a90ce8c575c4
DIST Nuitka-2.7.tar.gz 3885354 BLAKE2B 71fb24778148b384193e63846f1c01c1725688be25ea700c1a7810dbc4248ea6417d7227ac38862ce68d848b3ce097cee220435958ae8688b21076f77eefb240 SHA512 cc2a1bc8c6a47e60f1e527316f522d34d5e89019660e44e84736d91cc80a00babf95cebfc682374e82adf1b7c1a0536c6505a74d9903ecbbc85442575841710c
diff --git a/dev-python/nuitka/nuitka-2.7.1.ebuild b/dev-python/nuitka/nuitka-2.7.1.ebuild
new file mode 100644
index 000000000000..c97d7f3c6ae8
--- /dev/null
+++ b/dev-python/nuitka/nuitka-2.7.1.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYPI_NO_NORMALIZE=1
+PYPI_PN=${PN^}
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1 flag-o-matic optfeature pypi
+
+DESCRIPTION="Python to native compiler"
+HOMEPAGE="
+ https://nuitka.net/
+ https://github.com/Nuitka/Nuitka/
+ https://pypi.org/project/Nuitka/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~loong ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-build/scons[${PYTHON_USEDEP}]
+ >=dev-python/ordered-set-4.1.0[${PYTHON_USEDEP}]
+ >=dev-python/zstandard-0.15[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? ( dev-util/ccache )
+"
+
+distutils-r1_src_prepare() {
+ # remove vendored version of SCons that is Python2 only
+ # this should be removed when upstream removes support for Python2
+ rm -vR "nuitka/build/inline_copy/lib/scons-2.3.2/SCons" || die
+ eapply_user
+}
+
+python_install() {
+ distutils-r1_python_install
+ doman doc/nuitka.1 doc/nuitka-run.1
+}
+
+python_test() {
+ append-ldflags -Wl,--no-warn-search-mismatch
+ ./tests/basics/run_all.py search || die
+}
+
+pkg_postinst() {
+ optfeature "support for stand-alone executables" dev-util/patchelf
+}
diff --git a/dev-python/phonenumbers/Manifest b/dev-python/phonenumbers/Manifest
index e38aa4e416cc..b1d1e875403d 100644
--- a/dev-python/phonenumbers/Manifest
+++ b/dev-python/phonenumbers/Manifest
@@ -1,3 +1,4 @@
DIST python-phonenumbers-9.0.2.gh.tar.gz 4915753 BLAKE2B 39b0f69b9f2728e7a1b1bdae7ba46972b31a876f63823be30b9fa533d6489c3fc936587e88c4580495d35bf2245793102ebbd37ab382d6ecc5157e6e1c9cc5f0 SHA512 26cceb6db96f39a5b4d440ab3b9526f4094c41c2c4787a7ab387ae6d0b4d908058d87bf40bbcf2ed8784eb835339332b5ee3b1ca52fe7eb595860b0d7e5d1c7c
DIST python-phonenumbers-9.0.3.gh.tar.gz 4915936 BLAKE2B d7c1ee56a260c67f808e15738e7f315770df049bdb9ff831f5c57a39eae34e6d69846e58f2ae68003c5d47b2c0748abc5d9c5c20e07e5b253426de2666f3f780 SHA512 474de0a960bb3a2aa833b17a8457dbe6c59ad8451af24239cc23db721d5ce209cb4f5aec5b72472ae0815575774401392896b57bc91c1ff0a24284ec3217a582
DIST python-phonenumbers-9.0.4.gh.tar.gz 4916487 BLAKE2B 6fbfe614819d9e39b8e97f32002e57a173c79280756dbc0203af0dfb0ac127f1d7c1cd8d2f4056257637341873ad2d9aa011526c91b9e08e3485899cb2b793a3 SHA512 a37bf117f7148b7007ac641623540c628cfa0228f3cfa7654fcd4181d5d0fbbe9e33520c485be098c2b47b50293c8fab7c788c29f137ecb1db60257f464c4665
+DIST python-phonenumbers-9.0.5.gh.tar.gz 4916518 BLAKE2B 9a2ad1e1410207319df745e39a386170a259f723c1c8e93044ba90d68658ff541cda529300a95495cd91b0ea703e3afb1fee301d68e4c8794d401f0125dc4240 SHA512 a6c8f78bbaba9be47205b085af52d210aa8f300f1e6388fcd75e25a4a5e72c30348ca02f9ab5a48708157d2182d935dbd37be0e104eab8c5d4081488dc4c06cf
diff --git a/dev-python/phonenumbers/phonenumbers-9.0.5.ebuild b/dev-python/phonenumbers/phonenumbers-9.0.5.ebuild
new file mode 100644
index 000000000000..85e8daf426e4
--- /dev/null
+++ b/dev-python/phonenumbers/phonenumbers-9.0.5.ebuild
@@ -0,0 +1,39 @@
+# 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
+
+MY_P=python-${P}
+DESCRIPTION="Python port of Google's libphonenumber"
+HOMEPAGE="
+ https://github.com/daviddrysdale/python-phonenumbers/
+ https://pypi.org/project/phonenumbers/
+"
+SRC_URI="
+ https://github.com/daviddrysdale/python-phonenumbers/archive/v${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}/python
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ test? (
+ dev-python/protobuf[${PYTHON_USEDEP}]
+ )
+"
+
+DOCS=( ../README.md )
+
+python_test() {
+ "${EPYTHON}" testwrapper.py -v || die "Tests failed with ${EPYTHON}"
+}
diff --git a/dev-python/pytest-recording/Manifest b/dev-python/pytest-recording/Manifest
index 73ae98c7d275..0cbd1e399774 100644
--- a/dev-python/pytest-recording/Manifest
+++ b/dev-python/pytest-recording/Manifest
@@ -1 +1,2 @@
DIST pytest_recording-0.13.3.tar.gz 26228 BLAKE2B 96ebdda1e6efb551f0d878c90f144359db3eb72c08a25b4d4ce5acaf4c664d06d787521935290731032be0076f9258af554a321ddab99b82d9747eee579a4db5 SHA512 32eda1e7066ed0e85344c36bc22856a0baeb74138c2bf026915a2dbe2e3e65f43b1154c097f1f183244e83f0aee5ee0bdd3ee563eb2014d41fb5ade3c10c9baf
+DIST pytest_recording-0.13.4.tar.gz 26576 BLAKE2B edb64ed12dfe6d7d2709b43daf76626b7adc2d96b5980f81f38a358cc465bf7342e2b1ac78e6418b4bd4ee20d17f50b83f83568fb8c6c2225fb7337aeb3bd996 SHA512 b4bf67b60272945c64ad11d6fcfc0184cd4e8a336131e34cf9581e0a214532013c8882ebf88651d89cc91481456a7419549229d234e0e38e8025bba563dafffc
diff --git a/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild b/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild
new file mode 100644
index 000000000000..cb49d1b320c9
--- /dev/null
+++ b/dev-python/pytest-recording/pytest-recording-0.13.4.ebuild
@@ -0,0 +1,46 @@
+# Copyright 2023-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} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A pytest plugin to record network interactions via VCR.py"
+HOMEPAGE="
+ https://pypi.org/project/pytest-recording/
+ https://github.com/kiwicom/pytest-recording/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+RDEPEND="
+ >=dev-python/pytest-3.5.0[${PYTHON_USEDEP}]
+ >=dev-python/vcrpy-2.0.1[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/pytest-httpbin[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+python_test () {
+ local EPYTEST_DESELECT=(
+ # Internet
+ # https://github.com/kiwicom/pytest-recording/issues/131
+ tests/test_blocking_network.py::test_block_network_with_allowed_hosts
+ )
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ local -x PYTEST_PLUGINS=pytest_recording.plugin
+ PYTEST_PLUGINS+=,pytest_httpbin.plugin,pytest_mock
+ epytest
+}
diff --git a/dev-python/pytest-rerunfailures/Manifest b/dev-python/pytest-rerunfailures/Manifest
index a4a6723e944b..891061bcc5c2 100644
--- a/dev-python/pytest-rerunfailures/Manifest
+++ b/dev-python/pytest-rerunfailures/Manifest
@@ -1 +1,2 @@
DIST pytest-rerunfailures-15.0.tar.gz 21816 BLAKE2B 75c42cec3a9cc0208e045be82c1b6660d56fff898ac0e97e992a020229a095a619eb1e87eeca8af7fba4f455f044ddd9729943becd90d185356e7bddb9ab1c6b SHA512 c03f430f9e24e0b149391e08ae6f38450d731d1f6a28294173e75f8776dc596230422e2082bbbc74cf31ea7e4c3105f5d8d57825dc418c4ce1c5538d84c861c3
+DIST pytest_rerunfailures-15.1.tar.gz 26981 BLAKE2B 78413183180edccbd9be6ca85ef05be7a1cce96470cf086a056b21231f84a9c7af4a3923fcb18f2081f14e53f6aea7a97807f7c311323cd5b99ff740c9aefedd SHA512 6344d625829038978f9cf224d59d3de07b1afcc6dcea578b22cdff8faefdbcacfaa54d6fc142351f9f5af6bacf6c2bda0e3f62013439b0276e1d48d6c30e8fe0
diff --git a/dev-python/pytest-rerunfailures/pytest-rerunfailures-15.1.ebuild b/dev-python/pytest-rerunfailures/pytest-rerunfailures-15.1.ebuild
new file mode 100644
index 000000000000..e5bd176e7f57
--- /dev/null
+++ b/dev-python/pytest-rerunfailures/pytest-rerunfailures-15.1.ebuild
@@ -0,0 +1,31 @@
+# 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} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="pytest plugin to re-run tests to eliminate flaky failures"
+HOMEPAGE="
+ https://github.com/pytest-dev/pytest-rerunfailures/
+ https://pypi.org/project/pytest-rerunfailures/
+"
+
+LICENSE="MPL-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="
+ >=dev-python/packaging-17.1[${PYTHON_USEDEP}]
+"
+
+distutils_enable_tests pytest
+
+python_test() {
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ local -x PYTEST_PLUGINS=pytest_rerunfailures
+ epytest
+}
diff --git a/dev-python/python-tests/Manifest b/dev-python/python-tests/Manifest
index 2c63973a37f2..1b863ec0adee 100644
--- a/dev-python/python-tests/Manifest
+++ b/dev-python/python-tests/Manifest
@@ -4,6 +4,9 @@ DIST Python-3.12.10.tar.xz 20520960 BLAKE2B f05805da36958e3ebb68c69353e8119b20ee
DIST Python-3.12.10.tar.xz.asc 963 BLAKE2B 45e1ec67311d1ac5679cb5a05b92e61f3e5e6e9d3ffa5462c09c2aa066fda7ea915df13f6e5ad33aa924f6ce1f18e2d78a31af15412a10c093fc8a5b536c5133 SHA512 7edfa6fd816cf2a052abdb775d464e2f389105ed3e782cacf90805613aaca54bf71308504a5336ee1204e872e7db28df32413fb10b057056b0d5cb3c7a20a9f1
DIST Python-3.13.3.tar.xz 22654240 BLAKE2B 24ac47c13cbfa4dc9ce6ae4d18d7b5310f83ac1f4f18722138ef07e01cb8ac37edf6f4301983cb468f533b9b475b5a9d761d3044e61c7ccaa99dceadb954fe34 SHA512 f7559b6dceae69f48742af0a6497fbec42cd1e5304f64b6eb9d89222a1171ccf12fa186cc0decabb4e98d05223184967a4a7537754c01083dacdc9073cb1a578
DIST Python-3.13.3.tar.xz.asc 963 BLAKE2B 4a98965305b80e985512f54d9ce8ab88a74fe0d3ee48e300fbc2b4e251c0f499f4eb935e0aeb6d5ad8262338643325126f094fff926da1e2b9a2b3a2247701dc SHA512 54f8da5f4a4dcadc9830cb07aecf695a26a2de48ab98e1f42b09fdde1c70989476d07ce7ea81337216f1e5fcbf6b688e0608c88a2545ced416b01640108e94db
+DIST Python-3.14.0b1.tar.xz 23358200 BLAKE2B c18329ee73545a3c50fb4d4a56c0888d19e15c9fb53e1e3b6c0bc4b9eb22fc4912f1c934dc6f0f9b24c19b187ddbc76776d84898d5fc371d740c9a499c9294c4 SHA512 46c0792fe4d7beab13403938e51cc73e4cbc90a1d0367ba106f56353fae6e93697aa08d6389fd5a1fffa71d59376aee0196aba82b2c40d2f0cf642f14eefead8
+DIST Python-3.14.0b1.tar.xz.sigstore 5083 BLAKE2B 5192c84b0580af88cbac55f9bc4fb3aa4b018ae384524108bf82e69a986f21a1512bf88298549f23bf9036951bb12fd56fcdd6032f532cb9f7695dcd9baae6ea SHA512 b8f6e4b4f10b50e0d71a5eba9b9ba18660d994c8ae6aff7d46caa706738a4aca0d4f53e29c5ae668c963ec0c9531b91f77aed03c550ffafe69eb6a5a2e5f755e
DIST python-gentoo-patches-3.11.12.tar.xz 15616 BLAKE2B 5d4a47058fc35c4ae966e3dff823f91129852bf81cd586d5b3a34a6daf672732918daf00199394f2f982411ec30a291f45bba55b3ffa3d96a179ecd600ea4647 SHA512 77973ef88403f94d55162e0138cd29b4d8959a8fcf4cec730daf7ddd8fb4a3acfcd0dd1fdaacbdd2b218bd15f6c6715ce339df4eba48227d17520243d96eeb39
DIST python-gentoo-patches-3.12.10.tar.xz 10744 BLAKE2B 2abf4874018156d6735cf8604c410dc4726ac9365bc7500abe6b82472aad100aac7268957256692f4275b02965773e58178519ed8038e121f1ffa3c53770d238 SHA512 62066405aa00f46f9645e9c747d53bb93bf510fc791d14d49e00edfd79981778e6c8e07bfa7bac88d76407a0ffd8f7321dea89f81d90b01dbf13f4d381b6a1a3
DIST python-gentoo-patches-3.13.3.tar.xz 8336 BLAKE2B 66393886fbd034eb14732e4f81f5798e77650ea3fe1c4f8176bd93808b711c8977a53c3f52be6c9b97a368299258b851d9bdb6d4c8e0c75695c6aea784d48b44 SHA512 c1ed31d6aaef81addf786c2ccc1013309b122b791c42fe10e467a677d0db8f149e8b1cc21928c146298918c7ceb851b4b19d1e59f491cb161004e1c9386db289
+DIST python-gentoo-patches-3.14.0b1.tar.xz 5680 BLAKE2B 514b3edc3025e5bf675d371b5ada17dea426856edf1fb6095c2ee400eae95bd4265ef81fe593ae9338e801e7d0a25b1d5ba2d05ca563fd9dd020114b13575746 SHA512 74289e42cf532b54bb1b66a283ec19156f8a36ba38764209c133842314c9efb2ce2ebcba5aa9213bcf7fc0c8a5ca9b6e7adbd5dbfa4397233136d7cd55f53ee7
diff --git a/dev-python/python-tests/python-tests-3.14.0_beta1-r100.ebuild b/dev-python/python-tests/python-tests-3.14.0_beta1-r100.ebuild
new file mode 100644
index 000000000000..ea1967e1a093
--- /dev/null
+++ b/dev-python/python-tests/python-tests-3.14.0_beta1-r100.ebuild
@@ -0,0 +1,70 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+VERIFY_SIG_METHOD=sigstore
+
+inherit python-r1 verify-sig
+
+MY_PV=${PV/_beta/b}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)t
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="Test modules from dev-lang/python"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.sigstore
+ )
+"
+S="${WORKDIR}/${MY_P}/Lib"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ ~dev-lang/python-${PV}:${PYVER}
+"
+BDEPEND="
+ ${RDEPEND}
+"
+
+# https://www.python.org/downloads/metadata/sigstore/
+VERIFY_SIG_CERT_IDENTITY=hugo@python.org
+VERIFY_SIG_CERT_OIDC_ISSUER=https://github.com/login/oauth
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.sigstore}
+ fi
+ default
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ cd .. || die
+ default
+}
+
+src_install() {
+ python_setup
+ # keep in sync with TESTSUBDIRS in Makefile.pre.in
+ python_moduleinto "/usr/lib/python${PYVER}"
+ python_domodule test
+ python_moduleinto "/usr/lib/python${PYVER}/idlelib"
+ python_domodule idlelib/idle_test
+}
diff --git a/dev-python/python-tests/python-tests-3.14.0_beta1.ebuild b/dev-python/python-tests/python-tests-3.14.0_beta1.ebuild
new file mode 100644
index 000000000000..59fc52e69fde
--- /dev/null
+++ b/dev-python/python-tests/python-tests-3.14.0_beta1.ebuild
@@ -0,0 +1,70 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+VERIFY_SIG_METHOD=sigstore
+
+inherit python-r1 verify-sig
+
+MY_PV=${PV/_beta/b}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="Test modules from dev-lang/python"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.sigstore
+ )
+"
+S="${WORKDIR}/${MY_P}/Lib"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ ~dev-lang/python-${PV}:${PYVER}
+"
+BDEPEND="
+ ${RDEPEND}
+"
+
+# https://www.python.org/downloads/metadata/sigstore/
+VERIFY_SIG_CERT_IDENTITY=hugo@python.org
+VERIFY_SIG_CERT_OIDC_ISSUER=https://github.com/login/oauth
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.sigstore}
+ fi
+ default
+}
+
+src_prepare() {
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ )
+
+ cd .. || die
+ default
+}
+
+src_install() {
+ python_setup
+ # keep in sync with TESTSUBDIRS in Makefile.pre.in
+ python_moduleinto "/usr/lib/python${PYVER}"
+ python_domodule test
+ python_moduleinto "/usr/lib/python${PYVER}/idlelib"
+ python_domodule idlelib/idle_test
+}
diff --git a/dev-python/safety/Manifest b/dev-python/safety/Manifest
deleted file mode 100644
index f646d029d9ee..000000000000
--- a/dev-python/safety/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST safety-3.4.0.tar.gz 266285 BLAKE2B 4675c124a792464c4d7a1f848b81a8b038a671be27a62841109d7039ad3e13813ec4ba2597b0fdd85e48513fe40d8c2453def1434a47cd5d7cd9827254e54064 SHA512 c71ce6d0009dac450d3f0de6da338ca3f385e54327902083a4b5d8fb70d4a88cde01bee0fe378238e33326e259a4b09e0a61a8b7a8192068d786863d8374822a
diff --git a/dev-python/safety/safety-3.4.0.ebuild b/dev-python/safety/safety-3.4.0.ebuild
deleted file mode 100644
index 504f23980e7d..000000000000
--- a/dev-python/safety/safety-3.4.0.ebuild
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2025
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-PYTHON_COMPAT=( python3_{9,10,11,12,13} )
-
-DISTUTILS_USE_PEP517="hatchling"
-
-inherit distutils-r1 pypi
-
-DESCRIPTION="Scan dependencies for known vulnerabilities and licenses."
-
-HOMEPAGE="https://safetycli.com"
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64"
-
-DEPEND="
- >=dev-python/authlib-1.2.0[${PYTHON_USEDEP}]
- >=dev-python/click-8.0.2[${PYTHON_USEDEP}]
- >=dev-python/dparse-0.6.4[${PYTHON_USEDEP}]
- >=dev-python/filelock-3.16.1[${PYTHON_USEDEP}]
- >=dev-python/jinja2-3.1.0[${PYTHON_USEDEP}]
- >=dev-python/marshmallow-3.15.0[${PYTHON_USEDEP}]
- >=dev-python/packaging-21.0[${PYTHON_USEDEP}]
- >=dev-python/psutil-6.1.0[${PYTHON_USEDEP}]
- >=dev-python/pydantic-2.6.0[${PYTHON_USEDEP}]
- <dev-python/pydantic-2.10.7[${PYTHON_USEDEP}]
- dev-python/requests[${PYTHON_USEDEP}]
- dev-python/httpx[${PYTHON_USEDEP}]
- dev-python/tenacity[${PYTHON_USEDEP}]
- ~dev-python/safety-schemas-0.0.14[${PYTHON_USEDEP}]
- >=dev-python/setuptools-65.5.1[${PYTHON_USEDEP}]
- >=dev-python/typer-0.12.1[${PYTHON_USEDEP}]
- >=dev-python/typing-extensions-4.7.1[${PYTHON_USEDEP}]
- >=dev-python/nltk-3.9[${PYTHON_USEDEP}]
- dev-python/tomlkit[${PYTHON_USEDEP}]
-"
-
-RDEPEND="${DEPEND}"
diff --git a/dev-python/scipy/Manifest b/dev-python/scipy/Manifest
index b3006c00e5df..bf0cf960fc25 100644
--- a/dev-python/scipy/Manifest
+++ b/dev-python/scipy/Manifest
@@ -1,7 +1,2 @@
-DIST scipy-1.14.1.tar.gz 58620554 BLAKE2B 5cb383648a5f3b8d0d321efcd66992212c59ce3fc3dbf812a2fa97c09cb18831b280af6c7689553644f83c531a266e9152e2a139a12aed08307e1ed64deea78e SHA512 20e3cf13590f76dfdc40ca8f90e6d5a68502e74415f37fa24fdb8169098e1d7f0aa631ae742c8c3e9573fa7d63da61986d51f35f090a3785873ae0761f7fcfa6
-DIST scipy-1.15.0.tar.gz 59407226 BLAKE2B 30e2f1c797c46646b21578c9b22145773c27119674ec8d4bba1b6e4bac4fe6d56d7b6fa49964783f432008a027e1498edbdceec6d1345aaee4bbe8975648b9b7 SHA512 62c2616535790a65cfe5907abaaa655ca9268406765e9baab31097aece7a3887e2bc616a77abe9869b2ff4b07dc4a56fc1dbbaaf82ebfd7d9a89e05b8e87df86
-DIST scipy-1.15.1.tar.gz 59407493 BLAKE2B 959e1e311c5e53c2751794f629777a611ebd79c87d6cc2dec330ca335100b773528aa151e319cd9ae0520257d89597acdb3aca2319ab78c367c135499f54001f SHA512 92cb6a2cdb5a305eef0aa81baea4b90c14c0084c09ffbf62f2d6ee8dd5a08791a838838e2d4907356b5b07d0b4f74a81a8e861f81628bd9e5c7e0216e3f77b17
DIST scipy-1.15.2.tar.gz 59417316 BLAKE2B 7ae748a58b6a7fb2674dc6627c3d6f4f28694283bf19ca9973fcf5796ccb0e2e35bb7cd8fbfbefa21cb832b771e563f478bc09ded61d989ea47625e7ac35e1bd SHA512 e772aa040622ef457478e08eb41471af33784cafc2022f091a30563f6abed067cdbae424a5ae86f9dab8c1adc67276794b67cb7cb7c7963ca55a38529df63834
-DIST scipy-html-1.14.0.zip 65723829 BLAKE2B ba47dbf00a5d2a53a9addc5ea68ab18b42f211a018b89aa4b0b57ff0dee02e410a3effc59ddf8fbbc5aa33075d45d86880aed3a14068da5bd7b62ee526199967 SHA512 93be0bafcc64cea1ba130bbcc77c0741acc4f819c84a5030391a22657a1bc63abe8434a2723f66b7ad04c0809dc6d02e3a97ffb8d94bd3d4a4bb759ee796b475
-DIST scipy-html-1.15.1.zip 68514487 BLAKE2B 328550d3d5700c520b2a6404c326a54ffecacc95ad5d05c727d833803d698346fb0188b6bcb659838c1a0f26355b28d70df02cddff48b8bdf564292e6cab56bc SHA512 14311da185c9454fe7dd2a8253dc4fad434664df4c7261b22a3415de576a49d51ce9a00dfb3c3ea4df9ce2bf1c9d7547ceeeb5af72eeda823243d7a2541db676
DIST scipy-html-1.15.2.zip 68568078 BLAKE2B 270f1d89bbcb707616f7af0e1bd90909c1f33d647cf55e42dbf27128ecd90f619f0d579d8897eb04851b6327df1682236c5fd9c4c948b1fd99b083145681a202 SHA512 48e09d3678547775c6c86b82cdb4ef5e7eed7722c6ba8d53170384c3a9380b2bb29fc467b5ee66ae2ec1a621930c8bf20adfc8db3a75546a6ba8e9906df03426
diff --git a/dev-python/scipy/scipy-1.14.1.ebuild b/dev-python/scipy/scipy-1.14.1.ebuild
deleted file mode 100644
index 0c88f9ce49d9..000000000000
--- a/dev-python/scipy/scipy-1.14.1.ebuild
+++ /dev/null
@@ -1,169 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-FORTRAN_NEEDED=fortran
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=meson-python
-PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
-PYTHON_REQ_USE="threads(+)"
-
-inherit flag-o-matic fortran-2 distutils-r1
-
-DESCRIPTION="Scientific algorithms library for Python"
-HOMEPAGE="
- https://scipy.org/
- https://github.com/scipy/scipy/
- https://pypi.org/project/scipy/
-"
-
-if [[ ${PV} == *9999* ]] ; then
- inherit git-r3
-
- # Need submodules, so git for now.
- EGIT_REPO_URI="https://github.com/scipy/scipy"
- EGIT_BRANCH="maintenance/$(ver_cut 1-2).x"
- EGIT_SUBMODULES=( '*' )
-else
- inherit pypi
-
- # Upstream is often behind with doc updates
- DOC_PV=1.14.0
-
- SRC_URI+="
- doc? (
- https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-html-${DOC_PV}.zip
- )"
-
- if [[ ${PV} != *rc* ]] ; then
- KEYWORDS="amd64 arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 ~sparc x86"
- fi
-fi
-
-LICENSE="BSD LGPL-2"
-SLOT="0"
-IUSE="doc +fortran test-rust"
-
-# pythran is needed in both BDEPEND (for /usr/bin/pythran) and in DEPEND
-# to actually compile code generated by pythran (headers and such needed).
-#
-# umfpack is technically optional but it's preferred to have it available.
-DEPEND="
- >=dev-python/numpy-1.23.5:=[lapack,${PYTHON_USEDEP}]
- sci-libs/arpack:=
- sci-libs/umfpack
- virtual/cblas
- >=virtual/lapack-3.8
-"
-RDEPEND="
- ${DEPEND}
- dev-python/pillow[${PYTHON_USEDEP}]
-"
-DEPEND+="
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
-"
-BDEPEND="
- dev-lang/swig
- >=dev-python/cython-3.0.8[${PYTHON_USEDEP}]
- >=dev-python/meson-python-0.15.0[${PYTHON_USEDEP}]
- >=dev-python/pybind11-2.12.0[${PYTHON_USEDEP}]
- >=dev-build/meson-1.1.0
- !kernel_Darwin? ( dev-util/patchelf )
- virtual/pkgconfig
- doc? ( app-arch/unzip )
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
- test? (
- >=dev-python/hypothesis-6.30[${PYTHON_USEDEP}]
- )
- test-rust? (
- dev-python/pooch[${PYTHON_USEDEP}]
- )
-"
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_unpack() {
- default
-
- if use doc; then
- unzip -qo "${DISTDIR}"/${PN}-html-${DOC_PV}.zip -d html || die
- fi
-}
-
-python_configure_all() {
- DISTUTILS_ARGS=(
- -Dblas=blas
- -Dlapack=lapack
- -Duse-pythran=$(usex fortran true false)
- )
-
- # https://bugs.gentoo.org/932721
- has_version '>=dev-python/numpy-2.0.0' && filter-lto
-}
-
-python_test() {
- cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
-
- local EPYTEST_DESELECT=(
- # Network
- scipy/datasets/tests/test_data.py::TestDatasets::test_existence_all
- scipy/datasets/tests/test_data.py::TestDatasets::test_ascent
- scipy/datasets/tests/test_data.py::TestDatasets::test_face
- scipy/datasets/tests/test_data.py::TestDatasets::test_electrocardiogram
-
- # Precision issue with diff. blas?
- scipy/optimize/tests/test__basinhopping.py::Test_Metropolis::test_gh7799
-
- # Crashes with assertion, not a regression
- # https://github.com/scipy/scipy/issues/19321
- scipy/signal/tests/test_signaltools.py::test_lfilter_bad_object
-
- # timeouts
- scipy/sparse/linalg/tests/test_propack.py::test_examples
- # hang or incredibly slow
- scipy/optimize/tests/test_lsq_linear.py::TestBVLS::test_large_rank_deficient
- scipy/optimize/tests/test_lsq_linear.py::TestTRF::test_large_rank_deficient
-
- # TODO
- scipy/optimize/tests/test_minimize_constrained.py::TestTrustRegionConstr::test_list_of_problems
- )
- local EPYTEST_IGNORE=()
-
- if ! has_version -b "dev-python/pooch[${PYTHON_USEDEP}]" ; then
- EPYTEST_IGNORE+=(
- scipy/datasets/tests/test_data.py
- )
- fi
-
- case ${EPYTHON} in
- pypy3)
- EPYTEST_DESELECT+=(
- # fd leaks in tests
- # https://github.com/scipy/scipy/issues/19553
- scipy/fft/_pocketfft/tests/test_real_transforms.py
- # TODO
- 'scipy/special/tests/test_data.py::test_boost[<Data for expi: expinti_data_long_ipp-expinti_data_long>]'
- # missing dict.__ror__
- # https://github.com/pypy/pypy/issues/4934
- 'scipy/sparse/tests/test_dok.py::test_dunder_ror[dok_matrix]'
- # mismatched exception message
- scipy/optimize/tests/test_hessian_update_strategy.py::TestHessianUpdateStrategy::test_initialize_catch_illegal
- )
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- epytest scipy
-}
-
-python_install_all() {
- use doc && local HTML_DOCS=( "${WORKDIR}"/html/. )
-
- distutils-r1_python_install_all
-}
diff --git a/dev-python/scipy/scipy-1.15.0.ebuild b/dev-python/scipy/scipy-1.15.0.ebuild
deleted file mode 100644
index 7efa1a801c55..000000000000
--- a/dev-python/scipy/scipy-1.15.0.ebuild
+++ /dev/null
@@ -1,171 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-FORTRAN_NEEDED=fortran
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=meson-python
-PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
-PYTHON_REQ_USE="threads(+)"
-
-inherit flag-o-matic fortran-2 distutils-r1
-
-DESCRIPTION="Scientific algorithms library for Python"
-HOMEPAGE="
- https://scipy.org/
- https://github.com/scipy/scipy/
- https://pypi.org/project/scipy/
-"
-
-if [[ ${PV} == *9999* ]] ; then
- inherit git-r3
-
- # Need submodules, so git for now.
- EGIT_REPO_URI="https://github.com/scipy/scipy"
- EGIT_BRANCH="maintenance/$(ver_cut 1-2).x"
- EGIT_SUBMODULES=( '*' )
-else
- inherit pypi
-
- # Upstream is often behind with doc updates
- DOC_PV=1.14.0
-
- SRC_URI+="
- doc? (
- https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-html-${DOC_PV}.zip
- )"
-
- if [[ ${PV} != *rc* ]] ; then
- KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
- fi
-fi
-
-LICENSE="BSD LGPL-2"
-SLOT="0"
-IUSE="doc +fortran test-rust"
-
-# pythran is needed in both BDEPEND (for /usr/bin/pythran) and in DEPEND
-# to actually compile code generated by pythran (headers and such needed).
-#
-# umfpack is technically optional but it's preferred to have it available.
-DEPEND="
- >=dev-python/numpy-1.23.5:=[lapack,${PYTHON_USEDEP}]
- sci-libs/arpack:=
- sci-libs/umfpack
- virtual/cblas
- >=virtual/lapack-3.8
-"
-RDEPEND="
- ${DEPEND}
- dev-python/pillow[${PYTHON_USEDEP}]
-"
-DEPEND+="
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
-"
-BDEPEND="
- dev-lang/swig
- >=dev-python/cython-3.0.8[${PYTHON_USEDEP}]
- >=dev-python/meson-python-0.15.0[${PYTHON_USEDEP}]
- >=dev-python/pybind11-2.13.2[${PYTHON_USEDEP}]
- >=dev-build/meson-1.1.0
- !kernel_Darwin? ( dev-util/patchelf )
- virtual/pkgconfig
- doc? ( app-arch/unzip )
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
- test? (
- >=dev-python/hypothesis-6.30[${PYTHON_USEDEP}]
- )
- test-rust? (
- dev-python/pooch[${PYTHON_USEDEP}]
- )
-"
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_unpack() {
- default
-
- if use doc; then
- unzip -qo "${DISTDIR}"/${PN}-html-${DOC_PV}.zip -d html || die
- fi
-}
-
-python_configure_all() {
- DISTUTILS_ARGS=(
- -Dblas=blas
- -Dlapack=lapack
- -Duse-pythran=$(usex fortran true false)
- )
-
- # https://bugs.gentoo.org/932721
- has_version '>=dev-python/numpy-2.0.0' && filter-lto
-}
-
-python_test() {
- cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
-
- local EPYTEST_DESELECT=(
- # Network
- scipy/datasets/tests/test_data.py::TestDatasets::test_existence_all
- scipy/datasets/tests/test_data.py::TestDatasets::test_ascent
- scipy/datasets/tests/test_data.py::TestDatasets::test_face
- scipy/datasets/tests/test_data.py::TestDatasets::test_electrocardiogram
-
- # Precision issue with diff. blas?
- scipy/optimize/tests/test__basinhopping.py::Test_Metropolis::test_gh7799
-
- # Crashes with assertion, not a regression
- # https://github.com/scipy/scipy/issues/19321
- scipy/signal/tests/test_signaltools.py::test_lfilter_bad_object
-
- # timeouts
- scipy/sparse/linalg/tests/test_propack.py::test_examples
- # hang or incredibly slow
- scipy/optimize/tests/test_lsq_linear.py::TestBVLS::test_large_rank_deficient
- scipy/optimize/tests/test_lsq_linear.py::TestTRF::test_large_rank_deficient
-
- # TODO
- scipy/optimize/tests/test_minimize_constrained.py::TestTrustRegionConstr::test_list_of_problems
- )
- local EPYTEST_IGNORE=()
-
- if ! has_version -b "dev-python/pooch[${PYTHON_USEDEP}]" ; then
- EPYTEST_IGNORE+=(
- scipy/datasets/tests/test_data.py
- )
- fi
-
- case ${EPYTHON} in
- pypy3)
- EPYTEST_DESELECT+=(
- # fd leaks in tests
- # https://github.com/scipy/scipy/issues/19553
- scipy/fft/_pocketfft/tests/test_real_transforms.py
- # TODO
- 'scipy/special/tests/test_data.py::test_boost[<Data for expi: expinti_data_long_ipp-expinti_data_long>]'
- # missing dict.__ror__
- # https://github.com/pypy/pypy/issues/4934
- 'scipy/sparse/tests/test_dok.py::test_dunder_ror[dok_matrix]'
- # mismatched exception message
- scipy/optimize/tests/test_hessian_update_strategy.py::TestHessianUpdateStrategy::test_initialize_catch_illegal
- )
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- # avoid other stuff being multithreaded when using xdist
- local -x PYTHON_CPU_COUNT=1
- epytest scipy
-}
-
-python_install_all() {
- use doc && local HTML_DOCS=( "${WORKDIR}"/html/. )
-
- distutils-r1_python_install_all
-}
diff --git a/dev-python/scipy/scipy-1.15.1.ebuild b/dev-python/scipy/scipy-1.15.1.ebuild
deleted file mode 100644
index 1c9f77094875..000000000000
--- a/dev-python/scipy/scipy-1.15.1.ebuild
+++ /dev/null
@@ -1,171 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-FORTRAN_NEEDED=fortran
-DISTUTILS_EXT=1
-DISTUTILS_USE_PEP517=meson-python
-PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
-PYTHON_REQ_USE="threads(+)"
-
-inherit flag-o-matic fortran-2 distutils-r1
-
-DESCRIPTION="Scientific algorithms library for Python"
-HOMEPAGE="
- https://scipy.org/
- https://github.com/scipy/scipy/
- https://pypi.org/project/scipy/
-"
-
-if [[ ${PV} == *9999* ]] ; then
- inherit git-r3
-
- # Need submodules, so git for now.
- EGIT_REPO_URI="https://github.com/scipy/scipy"
- EGIT_BRANCH="maintenance/$(ver_cut 1-2).x"
- EGIT_SUBMODULES=( '*' )
-else
- inherit pypi
-
- # Upstream is often behind with doc updates
- DOC_PV=${PV}
-
- SRC_URI+="
- doc? (
- https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-html-${DOC_PV}.zip
- )"
-
- if [[ ${PV} != *rc* ]] ; then
- KEYWORDS="~amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 ~sparc x86"
- fi
-fi
-
-LICENSE="BSD LGPL-2"
-SLOT="0"
-IUSE="doc +fortran test-rust"
-
-# pythran is needed in both BDEPEND (for /usr/bin/pythran) and in DEPEND
-# to actually compile code generated by pythran (headers and such needed).
-#
-# umfpack is technically optional but it's preferred to have it available.
-DEPEND="
- >=dev-python/numpy-1.23.5:=[lapack,${PYTHON_USEDEP}]
- sci-libs/arpack:=
- sci-libs/umfpack
- virtual/cblas
- >=virtual/lapack-3.8
-"
-RDEPEND="
- ${DEPEND}
- dev-python/pillow[${PYTHON_USEDEP}]
-"
-DEPEND+="
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
-"
-BDEPEND="
- dev-lang/swig
- >=dev-python/cython-3.0.8[${PYTHON_USEDEP}]
- >=dev-python/meson-python-0.15.0[${PYTHON_USEDEP}]
- >=dev-python/pybind11-2.13.2[${PYTHON_USEDEP}]
- >=dev-build/meson-1.1.0
- !kernel_Darwin? ( dev-util/patchelf )
- virtual/pkgconfig
- doc? ( app-arch/unzip )
- fortran? (
- >=dev-python/pythran-0.16.0[${PYTHON_USEDEP}]
- )
- test? (
- >=dev-python/hypothesis-6.30[${PYTHON_USEDEP}]
- )
- test-rust? (
- dev-python/pooch[${PYTHON_USEDEP}]
- )
-"
-
-EPYTEST_XDIST=1
-distutils_enable_tests pytest
-
-src_unpack() {
- default
-
- if use doc; then
- unzip -qo "${DISTDIR}"/${PN}-html-${DOC_PV}.zip -d html || die
- fi
-}
-
-python_configure_all() {
- DISTUTILS_ARGS=(
- -Dblas=blas
- -Dlapack=lapack
- -Duse-pythran=$(usex fortran true false)
- )
-
- # https://bugs.gentoo.org/932721
- has_version '>=dev-python/numpy-2.0.0' && filter-lto
-}
-
-python_test() {
- cd "${BUILD_DIR}/install$(python_get_sitedir)" || die
-
- local EPYTEST_DESELECT=(
- # Network
- scipy/datasets/tests/test_data.py::TestDatasets::test_existence_all
- scipy/datasets/tests/test_data.py::TestDatasets::test_ascent
- scipy/datasets/tests/test_data.py::TestDatasets::test_face
- scipy/datasets/tests/test_data.py::TestDatasets::test_electrocardiogram
-
- # Precision issue with diff. blas?
- scipy/optimize/tests/test__basinhopping.py::Test_Metropolis::test_gh7799
-
- # Crashes with assertion, not a regression
- # https://github.com/scipy/scipy/issues/19321
- scipy/signal/tests/test_signaltools.py::test_lfilter_bad_object
-
- # timeouts
- scipy/sparse/linalg/tests/test_propack.py::test_examples
- # hang or incredibly slow
- scipy/optimize/tests/test_lsq_linear.py::TestBVLS::test_large_rank_deficient
- scipy/optimize/tests/test_lsq_linear.py::TestTRF::test_large_rank_deficient
-
- # TODO
- scipy/optimize/tests/test_minimize_constrained.py::TestTrustRegionConstr::test_list_of_problems
- )
- local EPYTEST_IGNORE=()
-
- if ! has_version -b "dev-python/pooch[${PYTHON_USEDEP}]" ; then
- EPYTEST_IGNORE+=(
- scipy/datasets/tests/test_data.py
- )
- fi
-
- case ${EPYTHON} in
- pypy3)
- EPYTEST_DESELECT+=(
- # fd leaks in tests
- # https://github.com/scipy/scipy/issues/19553
- scipy/fft/_pocketfft/tests/test_real_transforms.py
- # TODO
- 'scipy/special/tests/test_data.py::test_boost[<Data for expi: expinti_data_long_ipp-expinti_data_long>]'
- # missing dict.__ror__
- # https://github.com/pypy/pypy/issues/4934
- 'scipy/sparse/tests/test_dok.py::test_dunder_ror[dok_matrix]'
- # mismatched exception message
- scipy/optimize/tests/test_hessian_update_strategy.py::TestHessianUpdateStrategy::test_initialize_catch_illegal
- )
- ;;
- esac
-
- local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
- # avoid other stuff being multithreaded when using xdist
- local -x PYTHON_CPU_COUNT=1
- epytest scipy
-}
-
-python_install_all() {
- use doc && local HTML_DOCS=( "${WORKDIR}"/html/. )
-
- distutils-r1_python_install_all
-}
diff --git a/dev-python/snowballstemmer/Manifest b/dev-python/snowballstemmer/Manifest
index b77a4f87cd77..46a7095e42e8 100644
--- a/dev-python/snowballstemmer/Manifest
+++ b/dev-python/snowballstemmer/Manifest
@@ -1 +1,2 @@
DIST snowballstemmer-2.2.0.tar.gz 86699 BLAKE2B b106fac1587143c9e88f54cc982c573b227f9e2d0125d36391a95050b41e9c97e47c7c8dff890ebfcf4bdf7c97559908d3bd380c6659b0d1fef4bed111fbae4b SHA512 f1dee83e06fc79ffb250892fe62c75e3393b9af07fbf7cde413e6391870aa74934302771239dea5c9bc89806684f95059b00c9ffbcf7340375c9dd8f1216cd37
+DIST snowballstemmer-3.0.0.1.tar.gz 105321 BLAKE2B 3f6c71cce25c1a2afbec0f52008f8e44d9898af62ee75f75b4dca7d27736f360a37539ea1d65d42471bc0dcad33698defc47bb12c8b64a421385de6d47fc5b8c SHA512 6970ecc4188f714df19c6eb6415368774726e54c3c574ac34a866532385bb3e89eaff28bbac2c3820f8d393c7d4e852ada8689986f0aad7c18aa8cf9d5879772
diff --git a/dev-python/snowballstemmer/snowballstemmer-3.0.0.1.ebuild b/dev-python/snowballstemmer/snowballstemmer-3.0.0.1.ebuild
new file mode 100644
index 000000000000..fe382b3fb048
--- /dev/null
+++ b/dev-python/snowballstemmer/snowballstemmer-3.0.0.1.ebuild
@@ -0,0 +1,19 @@
+# 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} pypy3 )
+inherit distutils-r1 pypi
+
+DESCRIPTION="Stemmer algorithms generated from Snowball algorithms"
+HOMEPAGE="
+ https://snowballstem.org/
+ https://github.com/snowballstem/snowball
+ https://pypi.org/project/snowballstemmer/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-macos ~x64-solaris"
diff --git a/dev-python/sphinxcontrib-apidoc/Manifest b/dev-python/sphinxcontrib-apidoc/Manifest
index 3a78f521f7b0..2501793ac78a 100644
--- a/dev-python/sphinxcontrib-apidoc/Manifest
+++ b/dev-python/sphinxcontrib-apidoc/Manifest
@@ -1 +1,2 @@
DIST sphinxcontrib-apidoc-0.5.0.tar.gz 16117 BLAKE2B f486cfdf2cbf74c2ac35e688671f64d7e8a8d5b30c5e932036d1dcb2c58bd32b4bfeb14680311cf3dd1345b0548b0b083a1d30a667f934c08a2c2e431bdc2cdc SHA512 36858dab0915f4aac48b2bab1aeea830e35e1e865ff5f4726df0c9f9c2917d450ed1e27b1db9d143fade09369201b1b6b72f0264e674130f62a67df494c8f646
+DIST sphinxcontrib_apidoc-0.6.0.tar.gz 16790 BLAKE2B 2b49c12eee51548ff9e700981cd9a33a922186784d03a8fda858f8f52acecfdac04c9dfbae0c1211a2d0560e6859107036f29468900c701fd8cc9dd34eb7cc7e SHA512 5bc7750d92d911e77daaa0023f8c4de00dcd68ce6fc82b0cd69fa902c3b9296605958cef0151f26537ada23aae49d76beb579a254ec0c604694f39f12f6100ae
diff --git a/dev-python/sphinxcontrib-apidoc/sphinxcontrib-apidoc-0.6.0.ebuild b/dev-python/sphinxcontrib-apidoc/sphinxcontrib-apidoc-0.6.0.ebuild
new file mode 100644
index 000000000000..a7f090b36858
--- /dev/null
+++ b/dev-python/sphinxcontrib-apidoc/sphinxcontrib-apidoc-0.6.0.ebuild
@@ -0,0 +1,40 @@
+# Copyright 2021-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="Sphinx extension for running sphinx-apidoc on each build"
+HOMEPAGE="
+ https://pypi.org/project/sphinxcontrib-apidoc/
+ https://github.com/sphinx-contrib/apidoc/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
+
+BDEPEND="
+ dev-python/pbr[${PYTHON_USEDEP}]
+"
+RDEPEND="
+ ${BDEPEND}
+ >=dev-python/sphinx-5.0.0[${PYTHON_USEDEP}]
+"
+
+distutils_enable_tests pytest
+
+python_compile() {
+ distutils-r1_python_compile
+ find "${BUILD_DIR}" -name '*.pth' -delete || die
+}
+
+python_test() {
+ distutils_write_namespace sphinxcontrib
+ cd "${T}" || die
+ epytest "${S}"/tests
+}
diff --git a/dev-python/sqlglot/Manifest b/dev-python/sqlglot/Manifest
index 54e9ca00bee8..578942e41f65 100644
--- a/dev-python/sqlglot/Manifest
+++ b/dev-python/sqlglot/Manifest
@@ -1,2 +1,4 @@
DIST sqlglot-26.16.4-crates.tar.xz 8327388 BLAKE2B 69213d11940f9d4e743b169ef831b8b52a771f012e247570cf0703580a14af435d4d033b4b3ddfca6f4022b741261a24f3b47e5137de644d863714006520f857 SHA512 5de0781c54265b369e5e46b7cfbcc04a3118aa8d1323bff14f2841c95d471f545c923eedb88dbbb81a910801c5a505ff37a25701af936c06cf55a1659cd8822e
DIST sqlglot-26.16.4.tar.gz 5355134 BLAKE2B 3fd5e7687f7a65a9499773a53b7d694ba02caa1ad7aabaa744716329716b3e62d2c999aadc6a66f2524a3d41a8bc80d753b18e0c77997d7abbf3e67748be83ab SHA512 791ed728405759b6053f620bb3dd5c16eddf60566087e6290e22503816d7c52f52a1bed3b897f41d2ae9cd9b6c3e4730f3c154ae29ca64e0ac07e10d27deedf7
+DIST sqlglot-26.17.1-crates.tar.xz 8327388 BLAKE2B 69213d11940f9d4e743b169ef831b8b52a771f012e247570cf0703580a14af435d4d033b4b3ddfca6f4022b741261a24f3b47e5137de644d863714006520f857 SHA512 5de0781c54265b369e5e46b7cfbcc04a3118aa8d1323bff14f2841c95d471f545c923eedb88dbbb81a910801c5a505ff37a25701af936c06cf55a1659cd8822e
+DIST sqlglot-26.17.1.tar.gz 5356122 BLAKE2B 7c83c2569c767a424929b0d88aa451e29f83596e3b381db9e35175488492ef1e30bc7fbf2a33a7a261c2396259db12b1cc89f07420f3e1994c416b5d891be258 SHA512 5cef50050b412baa5ef72056b377d327e6d19990de07f9b6f5d915b7bc628ee3a343fc64003e1ea3fc2555759c79662d4081d7925d3dd6b77f6c08a6507e971e
diff --git a/dev-python/sqlglot/sqlglot-26.17.1.ebuild b/dev-python/sqlglot/sqlglot-26.17.1.ebuild
new file mode 100644
index 000000000000..745ae109fd13
--- /dev/null
+++ b/dev-python/sqlglot/sqlglot-26.17.1.ebuild
@@ -0,0 +1,96 @@
+# Copyright 2023-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES=""
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+CARGO_OPTIONAL=1
+
+inherit cargo distutils-r1 pypi optfeature
+
+DESCRIPTION="An easily customizable SQL parser and transpiler"
+HOMEPAGE="
+ https://sqlglot.com/
+ https://github.com/tobymao/sqlglot/
+ https://pypi.org/project/sqlglot/
+"
+SRC_URI+="
+ native-extensions? (
+ https://github.com/gentoo-crate-dist/sqlglot/releases/download/v${PV}/${P}-crates.tar.xz
+ )
+"
+
+LICENSE="MIT"
+LICENSE+=" native-extensions? ("
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions MIT Unicode-DFS-2016
+"
+LICENSE+=" )"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+IUSE="+native-extensions"
+
+BDEPEND="
+ native-extensions? (
+ ${RUST_DEPEND}
+ dev-util/maturin[${PYTHON_USEDEP}]
+ )
+ test? (
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/sqlglotrs/sqlglotrs.*.so"
+
+pkg_setup() {
+ use native-extensions && rust_pkg_setup
+}
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+python_compile() {
+ distutils-r1_python_compile
+
+ if use native-extensions; then
+ local DISTUTILS_USE_PEP517=maturin
+ local DISTUTILS_UPSTREAM_PEP517=maturin
+ cd sqlglotrs || die
+ distutils-r1_python_compile
+ cd - >/dev/null || die
+ fi
+}
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # timing, sigh
+ # https://github.com/tobymao/sqlglot/issues/3961
+ tests/test_generator.py::TestGenerator::test_generate_nested_binary
+ )
+ local EPYTEST_IGNORE=(
+ # Tests require pyspark or duckdb which aren't in the tree.
+ # Pandas would be a requirement normally, but it gets ignored by proxy.
+ "tests/dataframe/integration/test_dataframe.py"
+ "tests/dataframe/integration/test_grouped_data.py"
+ "tests/dataframe/integration/test_session.py"
+ "tests/test_executor.py"
+ "tests/test_optimizer.py"
+ )
+
+ # make sure not to use an earlier installed version
+ local -x SQLGLOTRS_TOKENIZER=$(usex native-extensions 1 0)
+ rm -rf sqlglotrs || die
+ epytest
+}
+
+pkg_postinst() {
+ optfeature "simplifying timedelta expressions" dev-python/python-dateutil
+}
diff --git a/dev-python/sqlmodel/Manifest b/dev-python/sqlmodel/Manifest
new file mode 100644
index 000000000000..607180c7c247
--- /dev/null
+++ b/dev-python/sqlmodel/Manifest
@@ -0,0 +1 @@
+DIST sqlmodel-0.0.24.tar.gz 116780 BLAKE2B 94e9fd37398af55fd0958d3303f4315a56305856ff798f2569206656a1f7441bb70633c8e0522ec86543b5ffb4b63aa0f769d7833a86e35651b55c6a2ee5e18b SHA512 3a7b04c35a71ec96f6c3ddf83d9286a8f6d57efef5f136412cddc5c742a30e3e80015f8a738f539a5b294b4613e2f5db41adbc2deddfa39028211944a7cc5207
diff --git a/dev-python/sqlmodel/metadata.xml b/dev-python/sqlmodel/metadata.xml
new file mode 100644
index 000000000000..0dec5a678a5f
--- /dev/null
+++ b/dev-python/sqlmodel/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>negril.nx+gentoo@gmail.com</email>
+ <name>Paul Zander</name>
+ </maintainer>
+
+ <origin>gentoo-guru-overlay</origin>
+ <stabilize-allarches/>
+</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/sqlmodel/sqlmodel-0.0.24.ebuild b/dev-python/sqlmodel/sqlmodel-0.0.24.ebuild
new file mode 100644
index 000000000000..7c7c6280eadf
--- /dev/null
+++ b/dev-python/sqlmodel/sqlmodel-0.0.24.ebuild
@@ -0,0 +1,58 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=pdm-backend
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="SQL databases in Python, designed for simplicity, compatibility, and robustness."
+HOMEPAGE="
+ https://sqlmodel.tiangolo.com/
+ https://github.com/fastapi/sqlmodel/
+ https://pypi.org/project/sqlmodel/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ <dev-python/sqlalchemy-2.1.0[${PYTHON_USEDEP}]
+ >=dev-python/sqlalchemy-2.0.14[${PYTHON_USEDEP}]
+ <dev-python/pydantic-3.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-1.10.13[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/black[${PYTHON_USEDEP}]
+ dev-python/fastapi[${PYTHON_USEDEP}]
+ dev-python/httpx[${PYTHON_USEDEP}]
+ dev-python/dirty-equals[${PYTHON_USEDEP}]
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/typing-extensions[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Uses coverage
+ # TIP: Search for subprocess.run([coverage])
+ "tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_py310_tests_main.py::test_run_tests"
+ "tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_py39_tests_main.py::test_run_tests"
+ "tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py::test_run_tests"
+)
+
+EPYTEST_IGNORE=(
+ # Uses coverage
+ # TIP: Search for imports of coverage_run
+ "tests/test_tutorial/test_create_db_and_table/test_tutorial001.py"
+ "tests/test_tutorial/test_create_db_and_table/test_tutorial001_py310.py"
+)
+
+python_test() {
+ epytest tests
+}
diff --git a/dev-python/tempora/tempora-5.8.0.ebuild b/dev-python/tempora/tempora-5.8.0.ebuild
index c04bcf5bb8cd..0b95bcd22174 100644
--- a/dev-python/tempora/tempora-5.8.0.ebuild
+++ b/dev-python/tempora/tempora-5.8.0.ebuild
@@ -4,8 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_TESTED=( python3_{9,10,11,12,13} pypy3 )
-PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
inherit distutils-r1 pypi
@@ -26,20 +25,13 @@ RDEPEND="
BDEPEND="
dev-python/setuptools-scm[${PYTHON_USEDEP}]
test? (
- $(python_gen_cond_dep '
- dev-python/pytest-freezer[${PYTHON_USEDEP}]
- ' "${PYTHON_TESTED[@]}")
+ dev-python/pytest-freezer[${PYTHON_USEDEP}]
)
"
distutils_enable_tests pytest
python_test() {
- if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
- einfo "Skipping tests on ${EPYTHON}"
- return
- fi
-
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
epytest -p freezer
}
diff --git a/dev-python/test/test-0.ebuild b/dev-python/test/test-0.ebuild
index fa246954612a..01327d8cf95f 100644
--- a/dev-python/test/test-0.ebuild
+++ b/dev-python/test/test-0.ebuild
@@ -20,12 +20,6 @@ RDEPEND="
$(python_gen_impl_dep 'test-install(+)' 'pypy3*')
$(python_gen_cond_dep '
|| (
- dev-python/python-tests:3.10
- <dev-lang/python-3.10.14_p3-r1:3.10
- )
- ' python3_10)
- $(python_gen_cond_dep '
- || (
dev-python/python-tests:3.11
<dev-lang/python-3.11.9_p2-r1:3.11
)
@@ -45,4 +39,10 @@ RDEPEND="
$(python_gen_cond_dep '
dev-python/python-tests:3.13t
' python3_13t)
+ $(python_gen_cond_dep '
+ dev-python/python-tests:3.14
+ ' python3_14)
+ $(python_gen_cond_dep '
+ dev-python/python-tests:3.14t
+ ' python3_14t)
"
diff --git a/dev-python/textx/Manifest b/dev-python/textx/Manifest
index 2f0ffaec2584..65af8be048ed 100644
--- a/dev-python/textx/Manifest
+++ b/dev-python/textx/Manifest
@@ -1 +1,2 @@
DIST textX-4.1.0.gh.tar.gz 2136599 BLAKE2B d6c7d4d741b4e526d0a71743387ee8455cc861bc4b356c605b6d174adb870bd178fd557a804f170f3d411b3ae70845771f7ffa7bbe9c4d1053c3d87e062deddb SHA512 313fea5b6d9e94e280a0614d4130872229536fe39d5af6e440a08babe6c4e5a5c23b53827713d577cc9af32a55a6beeaeddce59dbceb5f53a3f87cb910609599
+DIST textX-4.2.0.gh.tar.gz 2136704 BLAKE2B c851a74deb7f79719549181b1e49201e60422007d600ff058b8c513d3cfbcfaad6d42a719425d16a7810662fe190ddbd65a23e75c8f8fca59b109c6be9046306 SHA512 d2342e7408dd51b5960e868d278ee5f4f656b4befad7f67ecac15e1c587d65b1894ecfadb7219c8c1a33c0945ba37eff638458b69f3dfa01626ab363eee99540
diff --git a/dev-python/textx/textx-4.2.0.ebuild b/dev-python/textx/textx-4.2.0.ebuild
new file mode 100644
index 000000000000..58d83cece042
--- /dev/null
+++ b/dev-python/textx/textx-4.2.0.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1
+
+MY_P=textX-${PV}
+DESCRIPTION="Meta-language for DSL implementation inspired by Xtext"
+HOMEPAGE="
+ https://pypi.org/project/textX/
+ https://github.com/textX/textX/
+"
+SRC_URI="
+ https://github.com/textX/textX/archive/${PV}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+RDEPEND="
+ >=dev-python/arpeggio-2.0.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/html5lib[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests pytest
+
+python_test() {
+ cp -a "${BUILD_DIR}"/{install,test} || die
+ local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH}
+
+ # Update the shebang
+ sed -e "s:install/usr/bin/${EPYTHON}:test/usr/bin/${EPYTHON}:" \
+ -i "${BUILD_DIR}"/test/usr/bin/textx || die
+
+ # Install necessary plugins
+ local plugins=(
+ tests/functional/subcommands/example_project
+ tests/functional/registration/projects/*
+ )
+ local p
+ for p in "${plugins[@]}"; do
+ pushd "${p}" >/dev/null || die
+ distutils_pep517_install "${BUILD_DIR}"/test
+ popd >/dev/null || die
+ done
+
+ epytest tests/functional
+}
diff --git a/dev-python/trove-classifiers/Manifest b/dev-python/trove-classifiers/Manifest
index 62c92f383655..757e93701a30 100644
--- a/dev-python/trove-classifiers/Manifest
+++ b/dev-python/trove-classifiers/Manifest
@@ -2,3 +2,4 @@ DIST trove_classifiers-2025.4.11.15.tar.gz 16321 BLAKE2B b011b524d267506aef4d91a
DIST trove_classifiers-2025.4.28.22.tar.gz 16883 BLAKE2B 9598b19874f7deaeb15333a7f97cb91a7d82fe34d26d6d4e526bf857ed777539cad89949628196f2bbff187511fc5bca2327aeaacec4052611c5f2d82c4bb8a8 SHA512 4863ff031d9c83177099b5c1e04e2a22396055209b88e60dd44e22a8357889f27572444e0a1fbef65b7b37919cb9d7f8cb548b7007fd878d8fe92c9cd39b864e
DIST trove_classifiers-2025.5.1.12.tar.gz 16876 BLAKE2B 27ae91479d2a811978b3f1447568f5849341a7fda5c825ebf0dd0502d85f206d63f4687463708031637da4313d0182abc05b6b710a6f32fd714167ac766a587d SHA512 af3c0ee51e7ce3e7ec0eb1fd901ac3d0c02f6c0ba1c77d3ba66e0770bf5300144f636dcbf608f046a21789cfc780f651be222b7d23f359a672fde0210af966b5
DIST trove_classifiers-2025.5.7.19.tar.gz 16891 BLAKE2B 42c1d72cb1f70137e4d2af4b2a4f85811b0aab0a325793865afb51511bf00d7d5f7f5cfeeb1c887a630fdbe8e437987396cb9a9eeefc4d2cd56e5ecbfab0aab3 SHA512 ab35ab9f627244ce68d9db45684018392bd91d9b3f001be7e41ec8bf061fb86aee904347813db90afd2b94325d74665fea85994f29b144753c409642e8d9fdda
+DIST trove_classifiers-2025.5.8.15.tar.gz 16870 BLAKE2B d52e632a6a9e563c2ab7d9d5bf46baa8168d86677c98b3447e1b7c8c9f92c8a33707b4c2603dcbf546ffd87819a1362f23a60b2e299c5356480ce0f5660a3157 SHA512 81e96cd33997cb2574d05a553a0402f02d320d5fe2234a7c92d23d5bf460a5603bbdaa19ea37ecbbe81d6e2c8ef86bb936d74817514482ef551d85d103761858
diff --git a/dev-python/trove-classifiers/trove-classifiers-2025.5.8.15.ebuild b/dev-python/trove-classifiers/trove-classifiers-2025.5.8.15.ebuild
new file mode 100644
index 000000000000..0b6867aee421
--- /dev/null
+++ b/dev-python/trove-classifiers/trove-classifiers-2025.5.8.15.ebuild
@@ -0,0 +1,45 @@
+# 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_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Canonical source for classifiers on PyPI (pypi.org)"
+HOMEPAGE="
+ https://github.com/pypa/trove-classifiers/
+ https://pypi.org/project/trove-classifiers/
+"
+
+LICENSE="Apache-2.0"
+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"
+
+distutils_enable_tests pytest
+
+src_configure() {
+ grep -q 'build-backend = "setuptools' pyproject.toml ||
+ die "Upstream changed build-backend, recheck"
+ # write a custom pyproject.toml to ease hatchling bootstrap
+ cat > pyproject.toml <<-EOF || die
+ [build-system]
+ requires = ["flit_core >=3.2,<4"]
+ build-backend = "flit_core.buildapi"
+
+ [project]
+ name = "trove-classifiers"
+ version = "${PV}"
+ description = "Canonical source for classifiers on PyPI (pypi.org)."
+
+ [project.scripts]
+ trove-classifiers = "trove_classifiers.__main__:cli"
+ EOF
+}
+
+python_test() {
+ epytest
+ "${EPYTHON}" -m tests.lib || die
+}
diff --git a/dev-python/typing-extensions/files/typing-extensions-4.13.2-py314.patch b/dev-python/typing-extensions/files/typing-extensions-4.13.2-py314.patch
new file mode 100644
index 000000000000..d1086c2c3590
--- /dev/null
+++ b/dev-python/typing-extensions/files/typing-extensions-4.13.2-py314.patch
@@ -0,0 +1,422 @@
+From 2354c1a8d21cf8f6d6f6a9d54bb3a69b5908e035 Mon Sep 17 00:00:00 2001
+From: Jelle Zijlstra <jelle.zijlstra@gmail.com>
+Date: Fri, 2 May 2025 19:45:27 -0700
+Subject: [PATCH 1/2] Fix test failures on Python 3.14 (#566)
+
+---
+ src/test_typing_extensions.py | 40 ++++++++++++++++++++++++-----------
+ src/typing_extensions.py | 9 ++++++--
+ 2 files changed, 35 insertions(+), 14 deletions(-)
+
+diff --git a/src/test_typing_extensions.py b/src/test_typing_extensions.py
+index 584b0fa..7b08f72 100644
+--- a/src/test_typing_extensions.py
++++ b/src/test_typing_extensions.py
+@@ -901,10 +901,12 @@ class Cls:
+
+ class DeprecatedCoroTests(BaseTestCase):
+ def test_asyncio_iscoroutinefunction(self):
+- self.assertFalse(asyncio.coroutines.iscoroutinefunction(func))
+- self.assertFalse(asyncio.coroutines.iscoroutinefunction(Cls.func))
+- self.assertTrue(asyncio.coroutines.iscoroutinefunction(coro))
+- self.assertTrue(asyncio.coroutines.iscoroutinefunction(Cls.coro))
++ with warnings.catch_warnings():
++ warnings.simplefilter("ignore", DeprecationWarning)
++ self.assertFalse(asyncio.coroutines.iscoroutinefunction(func))
++ self.assertFalse(asyncio.coroutines.iscoroutinefunction(Cls.func))
++ self.assertTrue(asyncio.coroutines.iscoroutinefunction(coro))
++ self.assertTrue(asyncio.coroutines.iscoroutinefunction(Cls.coro))
+
+ @skipUnless(TYPING_3_12_ONLY or TYPING_3_13_0_RC, "inspect.iscoroutinefunction works differently on Python < 3.12")
+ def test_inspect_iscoroutinefunction(self):
+@@ -7228,7 +7230,7 @@ class TypeVarTests(BaseTestCase):
+
+ def test_bound_errors(self):
+ with self.assertRaises(TypeError):
+- TypeVar('X', bound=Union)
++ TypeVar('X', bound=Optional)
+ with self.assertRaises(TypeError):
+ TypeVar('X', str, float, bound=Employee)
+ with self.assertRaisesRegex(TypeError,
+@@ -8213,19 +8215,26 @@ class TestGetAnnotations(BaseTestCase):
+ get_annotations(f2, format=Format.FORWARDREF),
+ {"a": "undefined"},
+ )
+- self.assertEqual(get_annotations(f2, format=2), {"a": "undefined"})
++ # Test that the raw int also works
++ self.assertEqual(
++ get_annotations(f2, format=Format.FORWARDREF.value),
++ {"a": "undefined"},
++ )
+
+ self.assertEqual(
+ get_annotations(f1, format=Format.STRING),
+ {"a": "int"},
+ )
+- self.assertEqual(get_annotations(f1, format=3), {"a": "int"})
++ self.assertEqual(
++ get_annotations(f1, format=Format.STRING.value),
++ {"a": "int"},
++ )
+
+ with self.assertRaises(ValueError):
+ get_annotations(f1, format=0)
+
+ with self.assertRaises(ValueError):
+- get_annotations(f1, format=4)
++ get_annotations(f1, format=42)
+
+ def test_custom_object_with_annotations(self):
+ class C:
+@@ -8264,10 +8273,17 @@ class TestGetAnnotations(BaseTestCase):
+ foo.__annotations__ = {"a": "foo", "b": "str"}
+ for format in Format:
+ with self.subTest(format=format):
+- self.assertEqual(
+- get_annotations(foo, format=format),
+- {"a": "foo", "b": "str"},
+- )
++ if format is Format.VALUE_WITH_FAKE_GLOBALS:
++ with self.assertRaisesRegex(
++ ValueError,
++ "The VALUE_WITH_FAKE_GLOBALS format is for internal use only"
++ ):
++ get_annotations(foo, format=format)
++ else:
++ self.assertEqual(
++ get_annotations(foo, format=format),
++ {"a": "foo", "b": "str"},
++ )
+
+ self.assertEqual(
+ get_annotations(foo, eval_str=True, locals=locals()),
+diff --git a/src/typing_extensions.py b/src/typing_extensions.py
+index fa89c83..d089d5e 100644
+--- a/src/typing_extensions.py
++++ b/src/typing_extensions.py
+@@ -4153,8 +4153,9 @@ _PEP_649_OR_749_IMPLEMENTED = (
+
+ class Format(enum.IntEnum):
+ VALUE = 1
+- FORWARDREF = 2
+- STRING = 3
++ VALUE_WITH_FAKE_GLOBALS = 2
++ FORWARDREF = 3
++ STRING = 4
+
+
+ if _PEP_649_OR_749_IMPLEMENTED:
+@@ -4198,6 +4199,10 @@ else:
+
+ """
+ format = Format(format)
++ if format is Format.VALUE_WITH_FAKE_GLOBALS:
++ raise ValueError(
++ "The VALUE_WITH_FAKE_GLOBALS format is for internal use only"
++ )
+
+ if eval_str and format is not Format.VALUE:
+ raise ValueError("eval_str=True is only supported with format=Format.VALUE")
+From 62740a52eca38414efc9ce01b361ab45eae7c38e Mon Sep 17 00:00:00 2001
+From: Jelle Zijlstra <jelle.zijlstra@gmail.com>
+Date: Mon, 5 May 2025 09:50:14 -0700
+Subject: [PATCH 2/2] Fix tests on Python 3.14 (#592)
+
+---
+ src/test_typing_extensions.py | 117 ++++++++++++++++++++++++++++++----
+ src/typing_extensions.py | 67 +++++++++++++++----
+ 2 files changed, 161 insertions(+), 23 deletions(-)
+
+diff --git a/src/test_typing_extensions.py b/src/test_typing_extensions.py
+index 7b08f72..9742b98 100644
+--- a/src/test_typing_extensions.py
++++ b/src/test_typing_extensions.py
+@@ -440,6 +440,48 @@ class BaseTestCase(TestCase):
+ raise self.failureException(message)
+
+
++class EqualToForwardRef:
++ """Helper to ease use of annotationlib.ForwardRef in tests.
++
++ This checks only attributes that can be set using the constructor.
++
++ """
++
++ def __init__(
++ self,
++ arg,
++ *,
++ module=None,
++ owner=None,
++ is_class=False,
++ ):
++ self.__forward_arg__ = arg
++ self.__forward_is_class__ = is_class
++ self.__forward_module__ = module
++ self.__owner__ = owner
++
++ def __eq__(self, other):
++ if not isinstance(other, (EqualToForwardRef, typing.ForwardRef)):
++ return NotImplemented
++ if sys.version_info >= (3, 14) and self.__owner__ != other.__owner__:
++ return False
++ return (
++ self.__forward_arg__ == other.__forward_arg__
++ and self.__forward_module__ == other.__forward_module__
++ and self.__forward_is_class__ == other.__forward_is_class__
++ )
++
++ def __repr__(self):
++ extra = []
++ if self.__forward_module__ is not None:
++ extra.append(f", module={self.__forward_module__!r}")
++ if self.__forward_is_class__:
++ extra.append(", is_class=True")
++ if sys.version_info >= (3, 14) and self.__owner__ is not None:
++ extra.append(f", owner={self.__owner__!r}")
++ return f"EqualToForwardRef({self.__forward_arg__!r}{''.join(extra)})"
++
++
+ class Employee:
+ pass
+
+@@ -5075,6 +5117,64 @@ class TypedDictTests(BaseTestCase):
+ x: str
+
+
++ def test_annotations(self):
++ # _type_check is applied
++ with self.assertRaisesRegex(TypeError, "Plain typing.Optional is not valid as type argument"):
++ class X(TypedDict):
++ a: Optional
++
++ # _type_convert is applied
++ class Y(TypedDict):
++ a: None
++ b: "int"
++ if sys.version_info >= (3, 14):
++ import annotationlib
++
++ fwdref = EqualToForwardRef('int', module=__name__)
++ self.assertEqual(Y.__annotations__, {'a': type(None), 'b': fwdref})
++ self.assertEqual(Y.__annotate__(annotationlib.Format.FORWARDREF), {'a': type(None), 'b': fwdref})
++ else:
++ self.assertEqual(Y.__annotations__, {'a': type(None), 'b': typing.ForwardRef('int', module=__name__)})
++
++ @skipUnless(TYPING_3_14_0, "Only supported on 3.14")
++ def test_delayed_type_check(self):
++ # _type_check is also applied later
++ class Z(TypedDict):
++ a: undefined # noqa: F821
++
++ with self.assertRaises(NameError):
++ Z.__annotations__
++
++ undefined = Final
++ with self.assertRaisesRegex(TypeError, "Plain typing.Final is not valid as type argument"):
++ Z.__annotations__
++
++ undefined = None # noqa: F841
++ self.assertEqual(Z.__annotations__, {'a': type(None)})
++
++ @skipUnless(TYPING_3_14_0, "Only supported on 3.14")
++ def test_deferred_evaluation(self):
++ class A(TypedDict):
++ x: NotRequired[undefined] # noqa: F821
++ y: ReadOnly[undefined] # noqa: F821
++ z: Required[undefined] # noqa: F821
++
++ self.assertEqual(A.__required_keys__, frozenset({'y', 'z'}))
++ self.assertEqual(A.__optional_keys__, frozenset({'x'}))
++ self.assertEqual(A.__readonly_keys__, frozenset({'y'}))
++ self.assertEqual(A.__mutable_keys__, frozenset({'x', 'z'}))
++
++ with self.assertRaises(NameError):
++ A.__annotations__
++
++ import annotationlib
++ self.assertEqual(
++ A.__annotate__(annotationlib.Format.STRING),
++ {'x': 'NotRequired[undefined]', 'y': 'ReadOnly[undefined]',
++ 'z': 'Required[undefined]'},
++ )
++
++
+ class AnnotatedTests(BaseTestCase):
+
+ def test_repr(self):
+@@ -5887,7 +5987,7 @@ class ConcatenateTests(BaseTestCase):
+ U2 = Unpack[Ts]
+ self.assertEqual(C2[U1], (str, int, str))
+ self.assertEqual(C2[U2], (str, Unpack[Ts]))
+- self.assertEqual(C2["U2"], (str, typing.ForwardRef("U2")))
++ self.assertEqual(C2["U2"], (str, EqualToForwardRef("U2")))
+
+ if (3, 12, 0) <= sys.version_info < (3, 12, 4):
+ with self.assertRaises(AssertionError):
+@@ -7196,8 +7296,8 @@ class TypeVarTests(BaseTestCase):
+ self.assertEqual(X | "x", Union[X, "x"])
+ self.assertEqual("x" | X, Union["x", X])
+ # make sure the order is correct
+- self.assertEqual(get_args(X | "x"), (X, typing.ForwardRef("x")))
+- self.assertEqual(get_args("x" | X), (typing.ForwardRef("x"), X))
++ self.assertEqual(get_args(X | "x"), (X, EqualToForwardRef("x")))
++ self.assertEqual(get_args("x" | X), (EqualToForwardRef("x"), X))
+
+ def test_union_constrained(self):
+ A = TypeVar('A', str, bytes)
+@@ -8770,7 +8870,7 @@ class TestEvaluateForwardRefs(BaseTestCase):
+ type_params=None,
+ format=Format.FORWARDREF,
+ )
+- self.assertEqual(evaluated_ref, typing.ForwardRef("doesnotexist2"))
++ self.assertEqual(evaluated_ref, EqualToForwardRef("doesnotexist2"))
+
+ def test_evaluate_with_type_params(self):
+ # Use a T name that is not in globals
+@@ -8857,13 +8957,6 @@ class TestEvaluateForwardRefs(BaseTestCase):
+ obj = object()
+ self.assertIs(evaluate_forward_ref(typing.ForwardRef("int"), globals={"int": obj}), obj)
+
+- def test_fwdref_value_is_cached(self):
+- fr = typing.ForwardRef("hello")
+- with self.assertRaises(NameError):
+- evaluate_forward_ref(fr)
+- self.assertIs(evaluate_forward_ref(fr, globals={"hello": str}), str)
+- self.assertIs(evaluate_forward_ref(fr), str)
+-
+ @skipUnless(TYPING_3_9_0, "Needs PEP 585 support")
+ def test_fwdref_with_owner(self):
+ self.assertEqual(
+@@ -8908,7 +9001,7 @@ class TestEvaluateForwardRefs(BaseTestCase):
+ self.assertEqual(get_args(evaluated_ref1b), (Y[Tx],))
+
+ with self.subTest("nested string of TypeVar"):
+- evaluated_ref2 = evaluate_forward_ref(typing.ForwardRef("""Y["Y['Tx']"]"""), locals={"Y": Y})
++ evaluated_ref2 = evaluate_forward_ref(typing.ForwardRef("""Y["Y['Tx']"]"""), locals={"Y": Y, "Tx": Tx})
+ self.assertEqual(get_origin(evaluated_ref2), Y)
+ if not TYPING_3_9_0:
+ self.skipTest("Nested string 'Tx' stays ForwardRef in 3.8")
+diff --git a/src/typing_extensions.py b/src/typing_extensions.py
+index d089d5e..baa6c4f 100644
+--- a/src/typing_extensions.py
++++ b/src/typing_extensions.py
+@@ -13,6 +13,9 @@ import types as _types
+ import typing
+ import warnings
+
++if sys.version_info >= (3, 14):
++ import annotationlib
++
+ __all__ = [
+ # Super-special typing primitives.
+ 'Any',
+@@ -1014,21 +1017,31 @@ else:
+ tp_dict.__orig_bases__ = bases
+
+ annotations = {}
++ own_annotate = None
+ if "__annotations__" in ns:
+ own_annotations = ns["__annotations__"]
+- elif "__annotate__" in ns:
+- # TODO: Use inspect.VALUE here, and make the annotations lazily evaluated
+- own_annotations = ns["__annotate__"](1)
++ elif sys.version_info >= (3, 14):
++ if hasattr(annotationlib, "get_annotate_from_class_namespace"):
++ own_annotate = annotationlib.get_annotate_from_class_namespace(ns)
++ else:
++ # 3.14.0a7 and earlier
++ own_annotate = ns.get("__annotate__")
++ if own_annotate is not None:
++ own_annotations = annotationlib.call_annotate_function(
++ own_annotate, Format.FORWARDREF, owner=tp_dict
++ )
++ else:
++ own_annotations = {}
+ else:
+ own_annotations = {}
+ msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
+ if _TAKES_MODULE:
+- own_annotations = {
++ own_checked_annotations = {
+ n: typing._type_check(tp, msg, module=tp_dict.__module__)
+ for n, tp in own_annotations.items()
+ }
+ else:
+- own_annotations = {
++ own_checked_annotations = {
+ n: typing._type_check(tp, msg)
+ for n, tp in own_annotations.items()
+ }
+@@ -1041,7 +1054,8 @@ else:
+ for base in bases:
+ base_dict = base.__dict__
+
+- annotations.update(base_dict.get('__annotations__', {}))
++ if sys.version_info <= (3, 14):
++ annotations.update(base_dict.get('__annotations__', {}))
+ required_keys.update(base_dict.get('__required_keys__', ()))
+ optional_keys.update(base_dict.get('__optional_keys__', ()))
+ readonly_keys.update(base_dict.get('__readonly_keys__', ()))
+@@ -1051,8 +1065,8 @@ else:
+ # is retained for backwards compatibility, but only for Python
+ # 3.13 and lower.
+ if (closed and sys.version_info < (3, 14)
+- and "__extra_items__" in own_annotations):
+- annotation_type = own_annotations.pop("__extra_items__")
++ and "__extra_items__" in own_checked_annotations):
++ annotation_type = own_checked_annotations.pop("__extra_items__")
+ qualifiers = set(_get_typeddict_qualifiers(annotation_type))
+ if Required in qualifiers:
+ raise TypeError(
+@@ -1066,8 +1080,8 @@ else:
+ )
+ extra_items_type = annotation_type
+
+- annotations.update(own_annotations)
+- for annotation_key, annotation_type in own_annotations.items():
++ annotations.update(own_checked_annotations)
++ for annotation_key, annotation_type in own_checked_annotations.items():
+ qualifiers = set(_get_typeddict_qualifiers(annotation_type))
+
+ if Required in qualifiers:
+@@ -1085,7 +1099,38 @@ else:
+ mutable_keys.add(annotation_key)
+ readonly_keys.discard(annotation_key)
+
+- tp_dict.__annotations__ = annotations
++ if sys.version_info >= (3, 14):
++ def __annotate__(format):
++ annos = {}
++ for base in bases:
++ if base is Generic:
++ continue
++ base_annotate = base.__annotate__
++ if base_annotate is None:
++ continue
++ base_annos = annotationlib.call_annotate_function(
++ base.__annotate__, format, owner=base)
++ annos.update(base_annos)
++ if own_annotate is not None:
++ own = annotationlib.call_annotate_function(
++ own_annotate, format, owner=tp_dict)
++ if format != Format.STRING:
++ own = {
++ n: typing._type_check(tp, msg, module=tp_dict.__module__)
++ for n, tp in own.items()
++ }
++ elif format == Format.STRING:
++ own = annotationlib.annotations_to_string(own_annotations)
++ elif format in (Format.FORWARDREF, Format.VALUE):
++ own = own_checked_annotations
++ else:
++ raise NotImplementedError(format)
++ annos.update(own)
++ return annos
++
++ tp_dict.__annotate__ = __annotate__
++ else:
++ tp_dict.__annotations__ = annotations
+ tp_dict.__required_keys__ = frozenset(required_keys)
+ tp_dict.__optional_keys__ = frozenset(optional_keys)
+ tp_dict.__readonly_keys__ = frozenset(readonly_keys)
diff --git a/dev-python/typing-extensions/typing-extensions-4.13.2-r2.ebuild b/dev-python/typing-extensions/typing-extensions-4.13.2-r2.ebuild
new file mode 100644
index 000000000000..4b245e1081ba
--- /dev/null
+++ b/dev-python/typing-extensions/typing-extensions-4.13.2-r2.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{9,10,11,12,13} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Backported and Experimental Type Hints for Python 3.7+"
+HOMEPAGE="
+ https://pypi.org/project/typing-extensions/
+ https://github.com/python/typing_extensions/
+"
+
+LICENSE="PSF-2"
+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"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=dev-python/flit-core-3.11[${PYTHON_USEDEP}]
+ test? (
+ dev-python/test[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_tests unittest
+
+PATCHES=(
+ # https://github.com/python/typing_extensions/pull/566
+ # https://github.com/python/typing_extensions/pull/592
+ "${FILESDIR}/${P}-py314.patch"
+)
+
+python_test() {
+ cd src || die
+ eunittest
+}
diff --git a/dev-python/virtualenv/Manifest b/dev-python/virtualenv/Manifest
index 15d713a43bda..6e00bee6117d 100644
--- a/dev-python/virtualenv/Manifest
+++ b/dev-python/virtualenv/Manifest
@@ -1,2 +1,3 @@
DIST virtualenv-20.30.0.tar.gz 4346945 BLAKE2B 67e78ae9e0b51799da4d3b1f981b70e4727d43f044cb699fcf93c00af181457f0bce8f5519e2b9b36b7713608a14da21bc1a8767d5c10a7791830f52580af70c SHA512 c7a43fe7ba1fa5224252d4d0982120b5ef353a20fd3b48c52f62a0ef46f63a795dcf2c5388449cdec3f24316dda77724f801358330baa71501e1dfd16dcda2ab
DIST virtualenv-20.31.1.tar.gz 6076234 BLAKE2B d97adc477cf09d8944289d7e395428454e3867516bf3a84da08b598299b0a293eff5d6ea3a25dc906b1023d32eefcb0aa37f8515a68ab338de8d61c3c998df8f SHA512 1bac09af8a8db0104332e129f2a7a6623408547a1af63a2168a3e1519ff708c33d0665be489085548c0ae17962d787c5eec81d02920e32e256085ea4de5e7774
+DIST virtualenv-20.31.2.tar.gz 6076316 BLAKE2B 23584e0b5f556d95dcc1c24da4c140749fe8edd9abee9213cb47c89a43c7b8aa26d0f539523d93600c2d023db4153bd1ae2e2c33996677dfc3eef3ec4d9d7201 SHA512 b253fdd81412cbde1358a885ab25db62d7ee05309fd37c6d81cccde570f70acdd4ae13204dcf0a97cea67b6d6524d8d083ff6ca43a0ee22c513b39f1e37ee6f3
diff --git a/dev-python/virtualenv/virtualenv-20.31.2.ebuild b/dev-python/virtualenv/virtualenv-20.31.2.ebuild
new file mode 100644
index 000000000000..48e79b25362d
--- /dev/null
+++ b/dev-python/virtualenv/virtualenv-20.31.2.ebuild
@@ -0,0 +1,138 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_TESTED=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Virtual Python Environment builder"
+HOMEPAGE="
+ https://virtualenv.pypa.io/en/stable/
+ https://pypi.org/project/virtualenv/
+ https://github.com/pypa/virtualenv/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-python/distlib-0.3.7[${PYTHON_USEDEP}]
+ >=dev-python/filelock-3.12.2[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-3.9.1[${PYTHON_USEDEP}]
+
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ dev-python/ensurepip-wheel
+"
+# coverage is used somehow magically in virtualenv, maybe it actually
+# tests something useful
+BDEPEND="
+ dev-python/hatch-vcs[${PYTHON_USEDEP}]
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/coverage[${PYTHON_USEDEP}]
+ dev-python/flaky[${PYTHON_USEDEP}]
+ >=dev-python/pip-22.2.1[${PYTHON_USEDEP}]
+ >=dev-python/pytest-mock-3.6.1[${PYTHON_USEDEP}]
+ dev-python/pytest-timeout[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ >=dev-python/setuptools-67.8[${PYTHON_USEDEP}]
+ dev-python/wheel[${PYTHON_USEDEP}]
+ >=dev-python/packaging-20.0[${PYTHON_USEDEP}]
+ ' "${PYTHON_TESTED[@]}")
+ $(python_gen_cond_dep '
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ ' python3_{11..13})
+ $(python_gen_cond_dep '
+ >=dev-python/pytest-freezer-0.4.6[${PYTHON_USEDEP}]
+ ' 'pypy3*')
+ )
+"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ local PATCHES=(
+ # use wheels from ensurepip bundle
+ "${FILESDIR}/${PN}-20.31.1-ensurepip.patch"
+ )
+
+ distutils-r1_src_prepare
+
+ # workaround test failures due to warnings from setuptools-scm, sigh
+ echo '[tool.setuptools_scm]' >> pyproject.toml || die
+
+ # remove useless pins
+ sed -i -e 's:,<[0-9.]*::' pyproject.toml || die
+
+ # remove bundled wheels
+ rm src/virtualenv/seed/wheels/embed/*.whl || die
+}
+
+python_test() {
+ if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
+ einfo "Skipping testing on ${EPYTHON}"
+ return
+ fi
+
+ local EPYTEST_DESELECT=(
+ tests/unit/seed/embed/test_bootstrap_link_via_app_data.py::test_seed_link_via_app_data
+ # tests for old wheels with py3.7 support
+ tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke
+ tests/unit/seed/wheels/test_wheels_util.py::test_wheel_not_support
+ # broken by different wheel versions in ensurepip
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest_string
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_exact
+ tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest_none
+ tests/unit/seed/wheels/test_acquire.py::test_download_wheel_bad_output
+ # hangs on a busy system, sigh
+ tests/unit/test_util.py::test_reentrant_file_lock_is_thread_safe
+ # TODO
+ tests/unit/create/via_global_ref/test_build_c_ext.py::test_can_build_c_extensions
+ )
+ case ${EPYTHON} in
+ pypy3.11)
+ EPYTEST_DESELECT+=(
+ # these don't like the executable called pypy3.11?
+ tests/unit/activation/test_bash.py::test_bash
+ tests/unit/activation/test_fish.py::test_fish
+ tests/unit/discovery/py_info/test_py_info.py::test_fallback_existent_system_executable
+ )
+ ;;
+ python3.1[23])
+ EPYTEST_DESELECT+=(
+ tests/unit/create/via_global_ref/test_build_c_ext.py
+ )
+ ;&
+ python3.11)
+ EPYTEST_DESELECT+=(
+ # TODO
+ tests/unit/discovery/py_info/test_py_info.py::test_fallback_existent_system_executable
+ )
+ ;;
+ esac
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ local -x TZ=UTC
+ local plugins=( -p flaky -p pytest_mock )
+ if [[ ${EPYTHON} == pypy3* ]]; then
+ plugins+=( -p freezer )
+ else
+ plugins+=( -p time_machine )
+ fi
+ local EPYTEST_TIMEOUT=180
+ local EPYTEST_XDIST=1
+ epytest "${plugins[@]}"
+}
+
+src_install() {
+ distutils-r1_src_install
+
+ # remove bundled wheels, we're using ensurepip bundle instead
+ find "${ED}" -name '*.whl' -delete || die
+}
diff --git a/dev-python/wheel/files/wheel-0.45.1-test.patch b/dev-python/wheel/files/wheel-0.45.1-test.patch
new file mode 100644
index 000000000000..49dba4e2e579
--- /dev/null
+++ b/dev-python/wheel/files/wheel-0.45.1-test.patch
@@ -0,0 +1,125 @@
+From 36877e99122e8df90d4aa41d414999857d6d852d Mon Sep 17 00:00:00 2001
+From: shenxianpeng <xianpeng.shen@gmail.com>
+Date: Sun, 16 Mar 2025 01:35:32 +0800
+Subject: [PATCH] Fixed test failures (#651)
+
+---
+ tests/test_bdist_wheel.py | 4 ++--
+ tests/test_tagopt.py | 18 +++++++++---------
+ tests/testdata/unicode.dist/setup.py | 2 +-
+ 3 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/tests/test_bdist_wheel.py b/tests/test_bdist_wheel.py
+index fcb2dfc..21eddd0 100644
+--- a/tests/test_bdist_wheel.py
++++ b/tests/test_bdist_wheel.py
+@@ -79,9 +79,9 @@ def test_no_scripts(wheel_paths):
+
+
+ def test_unicode_record(wheel_paths):
+- path = next(path for path in wheel_paths if "unicode.dist" in path)
++ path = next(path for path in wheel_paths if "unicode_dist" in path)
+ with ZipFile(path) as zf:
+- record = zf.read("unicode.dist-0.1.dist-info/RECORD")
++ record = zf.read("unicode_dist-0.1.dist-info/RECORD")
+
+ assert "åäö_日本語.py".encode() in record
+
+diff --git a/tests/test_tagopt.py b/tests/test_tagopt.py
+index 5335af4..5733e1a 100644
+--- a/tests/test_tagopt.py
++++ b/tests/test_tagopt.py
+@@ -14,7 +14,7 @@ SETUP_PY = """\
+ from setuptools import setup, Extension
+
+ setup(
+- name="Test",
++ name="test",
+ version="1.0",
+ author_email="author@example.com",
+ py_modules=["test"],
+@@ -63,7 +63,7 @@ def test_default_tag(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name == f"Test-1.0-py{sys.version_info[0]}-none-any.whl"
++ assert wheels[0].name == f"test-1.0-py{sys.version_info[0]}-none-any.whl"
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -76,7 +76,7 @@ def test_build_number(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name == f"Test-1.0-1-py{sys.version_info[0]}-none-any.whl"
++ assert wheels[0].name == f"test-1.0-1-py{sys.version_info[0]}-none-any.whl"
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -89,7 +89,7 @@ def test_explicit_tag(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py32-")
++ assert wheels[0].name.startswith("test-1.0-py32-")
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -101,7 +101,7 @@ def test_universal_tag(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py2.py3-")
++ assert wheels[0].name.startswith("test-1.0-py2.py3-")
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -114,7 +114,7 @@ def test_universal_beats_explicit_tag(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py2.py3-")
++ assert wheels[0].name.startswith("test-1.0-py2.py3-")
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -129,7 +129,7 @@ def test_universal_in_setup_cfg(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py2.py3-")
++ assert wheels[0].name.startswith("test-1.0-py2.py3-")
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -144,7 +144,7 @@ def test_pythontag_in_setup_cfg(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py32-")
++ assert wheels[0].name.startswith("test-1.0-py32-")
+ assert wheels[0].suffix == ".whl"
+
+
+@@ -157,7 +157,7 @@ def test_legacy_wheel_section_in_setup_cfg(temp_pkg):
+ assert dist_dir.is_dir()
+ wheels = list(dist_dir.iterdir())
+ assert len(wheels) == 1
+- assert wheels[0].name.startswith("Test-1.0-py2.py3-")
++ assert wheels[0].name.startswith("test-1.0-py2.py3-")
+ assert wheels[0].suffix == ".whl"
+
+
+diff --git a/tests/testdata/unicode.dist/setup.py b/tests/testdata/unicode.dist/setup.py
+index ec66d1e..46ef0a1 100644
+--- a/tests/testdata/unicode.dist/setup.py
++++ b/tests/testdata/unicode.dist/setup.py
+@@ -3,7 +3,7 @@ from __future__ import annotations
+ from setuptools import setup
+
+ setup(
+- name="unicode.dist",
++ name="unicode_dist",
+ version="0.1",
+ description="A testing distribution \N{SNOWMAN}",
+ packages=["unicodedist"],
diff --git a/dev-python/wheel/wheel-0.45.1.ebuild b/dev-python/wheel/wheel-0.45.1.ebuild
index 7060370c8e7d..0dd4b7fc4e63 100644
--- a/dev-python/wheel/wheel-0.45.1.ebuild
+++ b/dev-python/wheel/wheel-0.45.1.ebuild
@@ -28,14 +28,14 @@ BDEPEND="
)
"
-EPYTEST_DESELECT=(
- # fails if any setuptools plugin imported the module first
- tests/test_bdist_wheel.py::test_deprecated_import
-)
-
distutils_enable_tests pytest
src_prepare() {
+ local PATCHES=(
+ # https://github.com/pypa/wheel/pull/651
+ "${FILESDIR}/${P}-test.patch"
+ )
+
distutils-r1_src_prepare
# unbundle packaging
@@ -46,6 +46,17 @@ src_prepare() {
}
python_test() {
+ local EPYTEST_DESELECT=(
+ # fails if any setuptools plugin imported the module first
+ tests/test_bdist_wheel.py::test_deprecated_import
+
+ # broken by setuptools license changes
+ # upstream removed the tests already
+ tests/test_bdist_wheel.py::test_licenses_default
+ tests/test_bdist_wheel.py::test_licenses_deprecated
+ tests/test_bdist_wheel.py::test_licenses_override
+ )
+
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
epytest
}