summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-09-16 06:59:58 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-09-16 06:59:58 +0000
commit890b4527a2b4a35e821f750ad70f9fbfbe7d2239 (patch)
tree353bf478ec8596f35f61d364a42945e7a2711682 /dev-python
parent459468f49c11794ed867d2ad7055bb716a14c6b2 (diff)
downloadbaldeagleos-repo-890b4527a2b4a35e821f750ad70f9fbfbe7d2239.tar.gz
baldeagleos-repo-890b4527a2b4a35e821f750ad70f9fbfbe7d2239.tar.xz
baldeagleos-repo-890b4527a2b4a35e821f750ad70f9fbfbe7d2239.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/dulwich/Manifest1
-rw-r--r--dev-python/dulwich/dulwich-0.24.1.ebuild119
-rw-r--r--dev-python/dulwich/files/dulwich-0.24.1-test.patch220
-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/paramiko/paramiko-4.0.0-r1.ebuild63
-rw-r--r--dev-python/poetry-core/Manifest1
-rw-r--r--dev-python/poetry-core/poetry-core-2.2.0.ebuild66
-rw-r--r--dev-python/poetry/Manifest1
-rw-r--r--dev-python/poetry/poetry-2.2.0.ebuild86
-rw-r--r--dev-python/protobuf/files/protobuf-6.32.1-crash.patch33
-rw-r--r--dev-python/protobuf/protobuf-6.32.1-r1.ebuild159
14 files changed, 759 insertions, 21 deletions
diff --git a/dev-python/dulwich/Manifest b/dev-python/dulwich/Manifest
index 317fbd85e85b..23e450dc466e 100644
--- a/dev-python/dulwich/Manifest
+++ b/dev-python/dulwich/Manifest
@@ -1,5 +1,6 @@
DIST autocfg-1.5.0.crate 18729 BLAKE2B 27580e39b366c6fca02c9db09997b6415c409f12068f1249184268bf96fd85ba659e25ec730f99e10caf452f96c486f3d7442bf09c4552b5f39519b21d6f88cc SHA512 f279856f234d39d369623576acf9546a1ca24d7fe449f36d4fb93ea75a7efaf2c4015b9616a69bbbed358c5e5882e16b045352f046aa4c049b3d13b1e8257b08
DIST dulwich-0.23.2.tar.gz 704361 BLAKE2B 2ba377c86a96069efa93f0e227297ba679bf04b346fe799f7b36a54bb38b51b9178c407d373a5f3e4adc4188d268ac3705a16ef98e84758cc3b8c2eaff1f5ecd SHA512 b3da400f7b89b0afd1ad14623a2a8765f2c36131f2b401ed2267637d961a65e9be32c6bb56c555d7c649d8d828088a83b433a66669b48e2a295b782fffcf9c22
+DIST dulwich-0.24.1.tar.gz 806136 BLAKE2B fc8f8534c8df24cdd3c2ec6b8ce0a8c85d68fbc12aba057d1853973ea7b4a2cc0637dafa8e7c4d369b08e2d2cf5e145d323af1f23ea2afd95195072e421b3963 SHA512 705096f4822fbf8530deed78bbf2c41bf9143b19432e93a428343d0faf1ae25f6865fa777c0f1c35c94f3e6bc8fd12ab1b6f6bdaa80694bde4926846ec4f1934
DIST heck-0.5.0.crate 11517 BLAKE2B 5365ec43b2239a76b33a174f1a4292ece4147f9d382a68c6c60db78fdc8bad0afb1d51a65bcb25e96675372faa4ea37c318265030b0546ba51942f7c929e1835 SHA512 f044fc9c3d22466629fd8f772ec0555350fd611c0cfadca51d99a3d2f10e155f77c1091916c8a95a6b9b499f366c2e99a5fbf45b010f988bfb9b2501bf9f6a76
DIST indoc-2.0.6.crate 17164 BLAKE2B 1a6cff95bc12ea885ef36b935bf4f1c7870d65be0ff31ffc67dcab904fa80215c1254c1803c5d0c5686252addfad3512e9e1ec79d3edcba026a879f4706926d1 SHA512 e2ea2e5c8226c802bbe0631c1a99d2edd088cbafbf978b2a7b71c7c7f47754c6d4653f466e286441b61cc46def1c7f7a02d4785caab93a61dd785211dba7d1a9
DIST libc-0.2.174.crate 779933 BLAKE2B 20ffcbbcad6961e732521940f0595039dc0576d85b2d3b2ad3f1decd37571132a4cd7505b2e108078a4379fc4cec46290b5633bcbcc6e7009c3b474c1a852628 SHA512 243f2ffd5741ef859e4dc5b7ee0396071943b1d10429efcaecb322957e256c4be88a7a649029dfd47e6456acc73ee257893fb6c4e8b4d0fe66a12bc5d1c13c73
diff --git a/dev-python/dulwich/dulwich-0.24.1.ebuild b/dev-python/dulwich/dulwich-0.24.1.ebuild
new file mode 100644
index 000000000000..9decd98a7e08
--- /dev/null
+++ b/dev-python/dulwich/dulwich-0.24.1.ebuild
@@ -0,0 +1,119 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=1
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+CRATES="
+ autocfg@1.5.0
+ heck@0.5.0
+ indoc@2.0.6
+ libc@0.2.174
+ memchr@2.7.5
+ memoffset@0.9.1
+ once_cell@1.21.3
+ portable-atomic@1.11.1
+ proc-macro2@1.0.95
+ pyo3-build-config@0.25.1
+ pyo3-ffi@0.25.1
+ pyo3-macros-backend@0.25.1
+ pyo3-macros@0.25.1
+ pyo3@0.25.1
+ quote@1.0.40
+ syn@2.0.104
+ target-lexicon@0.13.2
+ unicode-ident@1.0.18
+ unindent@0.2.4
+"
+
+inherit cargo distutils-r1 pypi
+
+DESCRIPTION="Pure-Python implementation of the Git file formats and protocols"
+HOMEPAGE="
+ https://github.com/jelmer/dulwich/
+ https://pypi.org/project/dulwich/
+"
+SRC_URI+="
+ native-extensions? (
+ ${CARGO_CRATE_URIS}
+ )
+"
+
+LICENSE="GPL-2+ Apache-2.0"
+LICENSE+=" native-extensions? ("
+# Dependent crate licenses
+LICENSE+=" Apache-2.0-with-LLVM-exceptions MIT Unicode-3.0"
+LICENSE+=" )"
+
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="doc examples +native-extensions test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/urllib3-1.25[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ native-extensions? (
+ ${RUST_DEPEND}
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ )
+ test? (
+ ${RDEPEND}
+ dev-python/fastimport[${PYTHON_USEDEP}]
+ dev-python/gpgmepy[${PYTHON_USEDEP}]
+ dev-python/paramiko[${PYTHON_USEDEP},server(+)]
+ )
+"
+
+distutils_enable_sphinx docs
+
+PATCHES=(
+ "${FILESDIR}/${P}-test.patch"
+)
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/dulwich/_.*.so"
+
+pkg_setup() {
+ # avoid rust_pkg_setup which will die when there's no Rust found
+ if use native-extensions ; then
+ rust_pkg_setup # implicitly inherited through cargo
+ fi
+}
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+python_compile() {
+ unset PURE
+ # TODO: enable Rust extensions
+ if ! use native-extensions; then
+ local -x PURE=1
+ fi
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ # remove interference from the tests that do stuff like user.name
+ unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
+ unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE
+ unset EMAIL
+ # Do not use make check which rebuilds the extension and uses -Werror,
+ # causing unexpected failures.
+ "${EPYTHON}" -m unittest -v tests.test_suite ||
+ die "tests failed with ${EPYTHON}"
+}
+
+python_install_all() {
+ if use examples; then
+ docompress -x "/usr/share/doc/${PF}/examples"
+ dodoc -r examples
+ fi
+ distutils-r1_python_install_all
+}
diff --git a/dev-python/dulwich/files/dulwich-0.24.1-test.patch b/dev-python/dulwich/files/dulwich-0.24.1-test.patch
new file mode 100644
index 000000000000..46ac3317553a
--- /dev/null
+++ b/dev-python/dulwich/files/dulwich-0.24.1-test.patch
@@ -0,0 +1,220 @@
+From 624c8f77ac17cf4e9d2017cf31a353eb9f3e41ec Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= <jelmer@jelmer.uk>
+Date: Sat, 2 Aug 2025 15:10:36 +0100
+Subject: [PATCH] Fix worktree CLI tests to properly change to repository
+ directory
+
+The worktree CLI commands expect to be run from within a repository
+directory. Updated the test methods to change to the repo directory
+before running commands and restore the original directory afterward.
+
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 5394104e98..5322433d5c 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -2338,12 +2338,18 @@ def setUp(self):
+
+ def test_worktree_list(self):
+ """Test worktree list command."""
+- io.StringIO()
+- cmd = cli.cmd_worktree()
+- result = cmd.run(["list"])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ io.StringIO()
++ cmd = cli.cmd_worktree()
++ result = cmd.run(["list"])
+
+- # Should list the main worktree
+- self.assertEqual(result, 0)
++ # Should list the main worktree
++ self.assertEqual(result, 0)
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_add(self):
+ """Test worktree add command."""
+@@ -2367,81 +2373,115 @@ def test_worktree_add_detached(self):
+ """Test worktree add with detached HEAD."""
+ wt_path = os.path.join(self.test_dir, "detached-wt")
+
+- cmd = cli.cmd_worktree()
+- with patch("sys.stdout", new_callable=io.StringIO):
+- result = cmd.run(["add", "--detach", wt_path])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ cmd = cli.cmd_worktree()
++ with patch("sys.stdout", new_callable=io.StringIO):
++ result = cmd.run(["add", "--detach", wt_path])
+
+- self.assertEqual(result, 0)
+- self.assertTrue(os.path.exists(wt_path))
++ self.assertEqual(result, 0)
++ self.assertTrue(os.path.exists(wt_path))
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_remove(self):
+ """Test worktree remove command."""
+ # First add a worktree
+ wt_path = os.path.join(self.test_dir, "to-remove")
+- cmd = cli.cmd_worktree()
+- cmd.run(["add", wt_path])
+
+- # Then remove it
+- with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
+- result = cmd.run(["remove", wt_path])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ cmd = cli.cmd_worktree()
++ cmd.run(["add", wt_path])
+
+- self.assertEqual(result, 0)
+- self.assertFalse(os.path.exists(wt_path))
+- self.assertIn("Worktree removed:", mock_stdout.getvalue())
++ # Then remove it
++ with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
++ result = cmd.run(["remove", wt_path])
++
++ self.assertEqual(result, 0)
++ self.assertFalse(os.path.exists(wt_path))
++ self.assertIn("Worktree removed:", mock_stdout.getvalue())
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_prune(self):
+ """Test worktree prune command."""
+ # Add a worktree and manually remove it
+ wt_path = os.path.join(self.test_dir, "to-prune")
+- cmd = cli.cmd_worktree()
+- cmd.run(["add", wt_path])
+- shutil.rmtree(wt_path)
+
+- # Prune
+- with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
+- result = cmd.run(["prune", "-v"])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ cmd = cli.cmd_worktree()
++ cmd.run(["add", wt_path])
++ shutil.rmtree(wt_path)
++
++ # Prune
++ with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
++ result = cmd.run(["prune", "-v"])
+
+- self.assertEqual(result, 0)
+- output = mock_stdout.getvalue()
+- self.assertIn("to-prune", output)
++ self.assertEqual(result, 0)
++ output = mock_stdout.getvalue()
++ self.assertIn("to-prune", output)
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_lock_unlock(self):
+ """Test worktree lock and unlock commands."""
+ # Add a worktree
+ wt_path = os.path.join(self.test_dir, "lockable")
+- cmd = cli.cmd_worktree()
+- cmd.run(["add", wt_path])
+
+- # Lock it
+- with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
+- result = cmd.run(["lock", wt_path, "--reason", "Testing"])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ cmd = cli.cmd_worktree()
++ cmd.run(["add", wt_path])
+
+- self.assertEqual(result, 0)
+- self.assertIn("Worktree locked:", mock_stdout.getvalue())
++ # Lock it
++ with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
++ result = cmd.run(["lock", wt_path, "--reason", "Testing"])
+
+- # Unlock it
+- with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
+- result = cmd.run(["unlock", wt_path])
++ self.assertEqual(result, 0)
++ self.assertIn("Worktree locked:", mock_stdout.getvalue())
+
+- self.assertEqual(result, 0)
+- self.assertIn("Worktree unlocked:", mock_stdout.getvalue())
++ # Unlock it
++ with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
++ result = cmd.run(["unlock", wt_path])
++
++ self.assertEqual(result, 0)
++ self.assertIn("Worktree unlocked:", mock_stdout.getvalue())
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_move(self):
+ """Test worktree move command."""
+ # Add a worktree
+ old_path = os.path.join(self.test_dir, "old-location")
+ new_path = os.path.join(self.test_dir, "new-location")
+- cmd = cli.cmd_worktree()
+- cmd.run(["add", old_path])
+
+- # Move it
+- with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
+- result = cmd.run(["move", old_path, new_path])
++ # Change to repo directory
++ old_cwd = os.getcwd()
++ os.chdir(self.repo_path)
++ try:
++ cmd = cli.cmd_worktree()
++ cmd.run(["add", old_path])
++
++ # Move it
++ with patch("sys.stdout", new_callable=io.StringIO) as mock_stdout:
++ result = cmd.run(["move", old_path, new_path])
+
+- self.assertEqual(result, 0)
+- self.assertFalse(os.path.exists(old_path))
+- self.assertTrue(os.path.exists(new_path))
+- self.assertIn("Worktree moved:", mock_stdout.getvalue())
++ self.assertEqual(result, 0)
++ self.assertFalse(os.path.exists(old_path))
++ self.assertTrue(os.path.exists(new_path))
++ self.assertIn("Worktree moved:", mock_stdout.getvalue())
++ finally:
++ os.chdir(old_cwd)
+
+ def test_worktree_invalid_command(self):
+ """Test invalid worktree subcommand."""
+From 4f52beca896bb66f9a0cd0e4117474af284158e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= <jelmer@jelmer.uk>
+Date: Mon, 15 Sep 2025 19:18:20 +0100
+Subject: [PATCH] Support TMPDIR as example system directory in symlink test
+
+Fixes #1885
+---
+ tests/test_porcelain.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_porcelain.py b/tests/test_porcelain.py
+index f99b588f58..b3d10423d8 100644
+--- a/tests/test_porcelain.py
++++ b/tests/test_porcelain.py
+@@ -1684,7 +1684,7 @@ def test_add_symlink_absolute_to_system(self) -> None:
+ symlink_target = os.environ["TEMP"]
+ else:
+ # On Unix-like systems, use /tmp
+- symlink_target = "/tmp"
++ symlink_target = os.environ.get("TMPDIR", "/tmp")
+ os.symlink(symlink_target, symlink_path)
+
+ # Adding a symlink to a directory outside the repo should raise ValueError
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 98b2b0bf8d0b..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-2025 Gentoo Authors
+# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
-PYTHON_COMPAT=( python3_{11..14} )
+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/paramiko/paramiko-4.0.0-r1.ebuild b/dev-python/paramiko/paramiko-4.0.0-r1.ebuild
new file mode 100644
index 000000000000..d8979fe2af7a
--- /dev/null
+++ b/dev-python/paramiko/paramiko-4.0.0-r1.ebuild
@@ -0,0 +1,63 @@
+# 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 )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1
+
+DESCRIPTION="SSH2 protocol library"
+HOMEPAGE="
+ https://www.paramiko.org/
+ https://github.com/paramiko/paramiko/
+ https://pypi.org/project/paramiko/
+"
+SRC_URI="
+ https://github.com/paramiko/paramiko/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+IUSE="examples"
+
+RDEPEND="
+ >=dev-python/bcrypt-3.2[${PYTHON_USEDEP}]
+ >=dev-python/cryptography-3.3[${PYTHON_USEDEP}]
+ >=dev-python/pynacl-1.5[${PYTHON_USEDEP}]
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_RERUNS=5
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # upstream doesn't really maintain the gssapi support
+ tests/test_gssapi.py
+ tests/test_kex_gss.py
+ tests/test_ssh_gss.py
+)
+
+src_prepare() {
+ local PATCHES=(
+ "${FILESDIR}/${PN}-3.2.0-nih-test-deps.patch"
+ )
+
+ distutils-r1_src_prepare
+
+ # optional dep
+ sed -i -e '/invoke/d' pyproject.toml || die
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ if use examples; then
+ docinto examples
+ dodoc -r demos/*
+ fi
+}
diff --git a/dev-python/poetry-core/Manifest b/dev-python/poetry-core/Manifest
index f0409bf13953..698bd47a0436 100644
--- a/dev-python/poetry-core/Manifest
+++ b/dev-python/poetry-core/Manifest
@@ -1 +1,2 @@
DIST poetry_core-2.1.3.tar.gz 365027 BLAKE2B d3cd1536a8466f784b2cd6a835997c480cdc11d24afe4e0b757879b2acc4795e33485fc9bf6adccf5afbf475d4b1748959fb146a6c01cf8508d6c27a7abe52e0 SHA512 eb82164aef3ce00fc14d55db8065b95feca15a78e1c69ca58c8c0b1018404b173a80c61d448513f938535a03e73df99978b51b3494065bd1c99bc8a14e224ba8
+DIST poetry_core-2.2.0.tar.gz 378727 BLAKE2B b3b122ed167d4160054e76842df49ad836f2f1139e5d39de461d38fd76110e1718fb912552c5d48aba2fc88eca01fa5c0c66a7aa4973d7968b000bbb61d4cfe9 SHA512 83a05d2e024e0a92a32ac8ea9a8a8b1313a6910f11e27b0a501703b0aac5c9f833a2b642403e28bb3ddffa7300c6f5e4533b604af40421033c2416e175a340c5
diff --git a/dev-python/poetry-core/poetry-core-2.2.0.ebuild b/dev-python/poetry-core/poetry-core-2.2.0.ebuild
new file mode 100644
index 000000000000..f9a0a53c8140
--- /dev/null
+++ b/dev-python/poetry-core/poetry-core-2.2.0.ebuild
@@ -0,0 +1,66 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=standalone
+PYTHON_TESTED=( python3_{9,10,11,12,13} pypy3 )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Poetry PEP 517 Build Backend"
+HOMEPAGE="
+ https://github.com/python-poetry/poetry-core/
+ https://pypi.org/project/poetry-core/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+# check inside vendors/pyproject.toml
+# (note that some are indirect deps)
+RDEPEND="
+ >=dev-python/fastjsonschema-2.21.2[${PYTHON_USEDEP}]
+ >=dev-python/lark-1.2.2[${PYTHON_USEDEP}]
+ >=dev-python/packaging-25.0[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/build[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/tomli-w[${PYTHON_USEDEP}]
+ >=dev-python/trove-classifiers-2022.5.19[${PYTHON_USEDEP}]
+ >=dev-python/virtualenv-20.21[${PYTHON_USEDEP}]
+ dev-vcs/git
+ ' "${PYTHON_TESTED[@]}")
+ )
+"
+
+src_prepare() {
+ # remove vendoring of dependencies
+ rm -r src/poetry/core/_vendor || die
+ sed -e '/__vendor_site__/d' -i src/poetry/core/__init__.py || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
+ einfo "Skipping tests on ${EPYTHON} (unported deps)"
+ return
+ fi
+
+ # Poetry expects test to be run inside a git repository, otherwise
+ # VCS-related logic doesn't get triggered. An empty repository
+ # suffices, though.
+ git init || die
+
+ local EPYTEST_PLUGINS=( pytest-mock )
+ epytest
+}
diff --git a/dev-python/poetry/Manifest b/dev-python/poetry/Manifest
index 624c88466fa3..c920afdef349 100644
--- a/dev-python/poetry/Manifest
+++ b/dev-python/poetry/Manifest
@@ -1 +1,2 @@
DIST poetry-2.1.3.tar.gz 3435640 BLAKE2B cb4f9cd8613d5ef77b51a6431efdc9b2e32b296cd62353dcbe12d1fa4b98d3cdf04fc15eeecaddc41ae9074b131e4148193c11136c7e8956a5d26f5573800a0f SHA512 15c0bec8bf7922f277ec3e6f5f4aeca50488af6eb632d292a6140b351a28dad522d218f9abc70b3da80bf6db42f63947c9967edfb4dd29f0cf85d005171e6ee3
+DIST poetry-2.2.0.tar.gz 3441561 BLAKE2B d201cc5643dced3a89e6505ee1ec09524e5277cfc9f2697deeabff90484c563d9c43e0ef199cfaca081630419ab94ea5229b1127fb715867e6970b315e8c15ff SHA512 8677519a673534bebcea1f7d8894e4422e8f27d7cc29aa1361be2c15e8730c3b149c6086a475fefc11eb02e5268e3c2476a8acda92f090eac30737d9eac8e672
diff --git a/dev-python/poetry/poetry-2.2.0.ebuild b/dev-python/poetry/poetry-2.2.0.ebuild
new file mode 100644
index 000000000000..feeb958c955b
--- /dev/null
+++ b/dev-python/poetry/poetry-2.2.0.ebuild
@@ -0,0 +1,86 @@
+# Copyright 2023-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=poetry
+PYTHON_COMPAT=( python3_{9,10,11,12,13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="A frontend for poetry - a python dependency management and packaging tool"
+HOMEPAGE="
+ https://python-poetry.org/
+ https://github.com/python-poetry/poetry
+ https://pypi.org/project/poetry/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+RDEPEND="
+ >=dev-python/poetry-core-${PV}[${PYTHON_USEDEP}]
+ >=dev-python/poetry-plugin-export-1.6.0[${PYTHON_USEDEP}]
+ >=dev-python/build-1.2.1[${PYTHON_USEDEP}]
+ >=dev-python/cachecontrol-0.14.0[${PYTHON_USEDEP}]
+ >=dev-python/cleo-2.1.0[${PYTHON_USEDEP}]
+ >=dev-python/dulwich-0.24.0[${PYTHON_USEDEP}]
+ >=dev-python/fastjsonschema-2.18.0[${PYTHON_USEDEP}]
+ >=dev-python/findpython-0.6.2[${PYTHON_USEDEP}]
+ >=dev-python/installer-0.7.0[${PYTHON_USEDEP}]
+ >=dev-python/keyring-25.1.0[${PYTHON_USEDEP}]
+ >=dev-python/packaging-24.2[${PYTHON_USEDEP}]
+ >=dev-python/pbs-installer-2025.01.06[${PYTHON_USEDEP}]
+ >=dev-python/pkginfo-1.12[${PYTHON_USEDEP}]
+ >=dev-python/platformdirs-3.0.0[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.26[${PYTHON_USEDEP}]
+ >=dev-python/requests-toolbelt-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/shellingham-1.5.0[${PYTHON_USEDEP}]
+ >=dev-python/tomlkit-0.11.6[${PYTHON_USEDEP}]
+ >=dev-python/trove-classifiers-2022.5.19[${PYTHON_USEDEP}]
+ >=dev-python/virtualenv-20.26.6[${PYTHON_USEDEP}]
+"
+
+BDEPEND="
+ test? (
+ >=dev-python/deepdiff-6.3.1[${PYTHON_USEDEP}]
+ >=dev-python/httpretty-1.1[${PYTHON_USEDEP}]
+ >=dev-python/jaraco-classes-3.3.1[${PYTHON_USEDEP}]
+ >=dev-python/pytest-mock-3.9[${PYTHON_USEDEP}]
+ dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=( pytest-mock )
+EPYTEST_RERUNS=5
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+EPYTEST_DESELECT=(
+ # Internal test for lockfile being up-to-date
+ # Meaningless, also sdist does not include lockfile
+ tests/installation/test_installer.py::test_not_fresh_lock
+
+ # broken if poetry-plugin-export is installed
+ 'tests/console/test_application_command_not_found.py::test_application_command_not_found_messages[x-None]'
+
+ # TODO
+ tests/console/commands/env/test_activate.py::test_no_additional_output_in_verbose_mode
+ tests/installation/test_executor.py::test_executor_known_hashes
+ tests/puzzle/test_provider.py::test_search_for_directory_setup_read_setup_with_no_dependencies
+ tests/utils/env/test_env_manager.py::test_create_venv_finds_no_python_executable
+ tests/utils/test_python_manager.py::test_python_get_preferred_default
+ 'tests/inspection/test_info.py::test_info_setup_missing_mandatory_should_trigger_pep517[name]'
+)
+
+src_prepare() {
+ # unpin
+ sed -e 's:,<[0-9.]*::' -e 's:==\([0-9]\):>=\1:' -i pyproject.toml || die
+
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ epytest -m "not network"
+}
diff --git a/dev-python/protobuf/files/protobuf-6.32.1-crash.patch b/dev-python/protobuf/files/protobuf-6.32.1-crash.patch
new file mode 100644
index 000000000000..796d00c1805d
--- /dev/null
+++ b/dev-python/protobuf/files/protobuf-6.32.1-crash.patch
@@ -0,0 +1,33 @@
+From d57d2708b371bda5e7212b0eca63091fa2d7ab42 Mon Sep 17 00:00:00 2001
+From: Oleh Prypin <oprypin@google.com>
+Date: Mon, 15 Sep 2025 13:31:08 -0700
+Subject: [PATCH] Fix a crash that happens during shutdown due to looking up
+ modules in the cache
+
+The crash happens only since Python 3.13. Conveniently, Python 3.13 introduces a function to check if the interpreter is shutting down at the moment.
+
+There was a related issue https://github.com/protocolbuffers/protobuf/issues/22067 and related commit https://github.com/protocolbuffers/protobuf/commit/87de6f795f794f207c19ea5c887328fcbe35d518
+but it appears that the fix was incomplete. What actually causes a crash during shutdown is using `PyState_FindModule`, and `PyUpb_ModuleState_MaybeGet` still calls that anyway.
+
+PiperOrigin-RevId: 807361381
+---
+ python/protobuf.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/python/protobuf.c b/python/protobuf.c
+index ff6bf7c0d6654..a86fcaaf82e67 100644
+--- a/python/protobuf.c
++++ b/python/protobuf.c
+@@ -58,6 +58,12 @@ static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT,
+ // -----------------------------------------------------------------------------
+
+ PyUpb_ModuleState* PyUpb_ModuleState_MaybeGet(void) {
++#if PY_VERSION_HEX >= 0x030D0000 // >= 3.13
++ /* Calling `PyState_FindModule` during interpreter shutdown causes a crash. */
++ if (Py_IsFinalizing()) {
++ return NULL;
++ }
++#endif
+ PyObject* module = PyState_FindModule(&module_def);
+ return module ? PyModule_GetState(module) : NULL;
+ }
diff --git a/dev-python/protobuf/protobuf-6.32.1-r1.ebuild b/dev-python/protobuf/protobuf-6.32.1-r1.ebuild
new file mode 100644
index 000000000000..cdaf0acd014d
--- /dev/null
+++ b/dev-python/protobuf/protobuf-6.32.1-r1.ebuild
@@ -0,0 +1,159 @@
+# Copyright 2008-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Default implementation currently is upb, which doesn't match dev-libs/protobuf
+# https://github.com/protocolbuffers/protobuf/blob/main/python/README.md#implementation-backends
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit distutils-r1 pypi
+
+GH_PV=$(ver_cut 2-3)
+GH_P=${PN}-${GH_PV}
+
+DESCRIPTION="Google's Protocol Buffers - Python bindings"
+HOMEPAGE="
+ https://protobuf.dev/
+ https://pypi.org/project/protobuf/
+"
+# Rename sdist to avoid conflicts with dev-libs/protobuf
+SRC_URI="
+ $(pypi_sdist_url) -> ${P}.py.tar.gz
+ test? (
+ https://github.com/protocolbuffers/protobuf/archive/v${GH_PV}.tar.gz
+ -> ${GH_P}.gh.tar.gz
+ )
+"
+
+LICENSE="BSD"
+SLOT="0/$(ver_cut 1-3)"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+# need protobuf compiler
+BDEPEND="
+ test? (
+ dev-libs/protobuf
+ dev-python/absl-py[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ )
+"
+
+EPYTEST_PLUGINS=()
+EPYTEST_XDIST=1
+distutils_enable_tests pytest
+
+src_unpack() {
+ unpack "${P}.py.tar.gz"
+
+ if use test; then
+ mkdir "${WORKDIR}/test" || die
+ cd "${WORKDIR}/test" || die
+ unpack "${GH_P}.gh.tar.gz"
+ fi
+}
+
+src_prepare() {
+ local PATCHES=(
+ # https://github.com/protocolbuffers/protobuf/commit/d57d2708b371bda5e7212b0eca63091fa2d7ab42
+ # potentially fixes https://github.com/protocolbuffers/protobuf/issues/22067
+ "${FILESDIR}/${P}-crash.patch"
+ )
+
+ distutils-r1_src_prepare
+
+ # strip old-style namespace
+ rm google/__init__.py || die
+}
+
+python_test() {
+ local EPYTEST_DESELECT=()
+ local EPYTEST_IGNORE=(
+ # TODO: figure out how to build the pybind11 test extension
+ google/protobuf/internal/recursive_message_pybind11_test.py
+ )
+
+ case ${EPYTHON} in
+ python3.11)
+ EPYTEST_IGNORE+=(
+ # syntax error...
+ google/protobuf/internal/json_format_test.py
+ )
+ ;;
+ python3.14*)
+ EPYTEST_DESELECT+=(
+ # exception message mismatch
+ google/protobuf/internal/json_format_test.py::JsonFormatTest::testInvalidTimestamp
+ google/protobuf/internal/well_known_types_test.py::TimeUtilTest::testInvalidTimestamp
+ )
+ ;;
+ esac
+
+ cp -r "${BUILD_DIR}"/{install,test} || die
+ local -x PATH="${BUILD_DIR}/test${EPREFIX}/usr/bin:${PATH}"
+ cd "${BUILD_DIR}/test$(python_get_sitedir)" || die
+
+ # copy test files from the source tree
+ cp -r "${WORKDIR}/test/${GH_P}/python/google/protobuf/internal/." \
+ google/protobuf/internal/ || die
+ # link the test data for text_format_test.py
+ # (it traverses directories upwards until to finds src/google...)
+ ln -s "${WORKDIR}/test/${GH_P}/src" ../src || die
+
+ # compile test-related protobufs
+ local test_protos=(
+ # from src
+ any_test.proto
+ map_proto2_unittest.proto
+ map_unittest.proto
+ unittest.proto
+ unittest_custom_options.proto
+ unittest_delimited.proto
+ unittest_delimited_import.proto
+ unittest_features.proto
+ unittest_import.proto
+ unittest_import_public.proto
+ unittest_legacy_features.proto
+ unittest_mset.proto
+ unittest_mset_wire_format.proto
+ unittest_no_field_presence.proto
+ unittest_no_generic_services.proto
+ unittest_proto3.proto
+ unittest_proto3_arena.proto
+ unittest_proto3_extensions.proto
+ unittest_retention.proto
+ util/json_format.proto
+ util/json_format_proto3.proto
+ # from python
+ internal/descriptor_pool_test1.proto
+ internal/descriptor_pool_test2.proto
+ internal/factory_test1.proto
+ internal/factory_test2.proto
+ internal/file_options_test.proto
+ internal/import_test_package/import_public.proto
+ internal/import_test_package/import_public_nested.proto
+ internal/import_test_package/inner.proto
+ internal/import_test_package/outer.proto
+ internal/message_set_extensions.proto
+ internal/missing_enum_values.proto
+ internal/more_extensions.proto
+ internal/more_messages.proto
+ internal/no_package.proto
+ internal/packed_field_test.proto
+ internal/self_recursive.proto
+ internal/test_bad_identifiers.proto
+ internal/test_proto2.proto
+ internal/test_proto3_optional.proto
+ internal/well_known_types_test.proto
+ )
+ local proto
+ for proto in "${test_protos[@]}"; do
+ protoc --python_out=. -I"${WORKDIR}/test/${GH_P}/src" -I. \
+ "google/protobuf/${proto}" || die
+ done
+
+ epytest
+}