commit:     cc5a7572edcab682b5e2665439952ad6f246b5ea
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Jul  1 15:42:33 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Jul  1 15:55:23 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=cc5a7572

dev-python/asyncssh: Enable py3.13

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/asyncssh/asyncssh-2.14.2.ebuild         |   8 +-
 .../asyncssh/files/asyncssh-2.14.2-py313.patch     | 151 +++++++++++++++++++++
 2 files changed, 155 insertions(+), 4 deletions(-)

diff --git a/dev-python/asyncssh/asyncssh-2.14.2.ebuild 
b/dev-python/asyncssh/asyncssh-2.14.2.ebuild
index 1ad40f7b2969..f3f3d4abcd70 100644
--- a/dev-python/asyncssh/asyncssh-2.14.2.ebuild
+++ b/dev-python/asyncssh/asyncssh-2.14.2.ebuild
@@ -4,7 +4,7 @@
 EAPI=8
 
 DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{10..12} )
+PYTHON_COMPAT=( python3_{10..13} )
 
 inherit distutils-r1 optfeature pypi
 
@@ -35,9 +35,9 @@ BDEPEND="
        )
 "
 
-EPYTEST_DESELECT=(
-       # https://github.com/ronf/asyncssh/pull/578
-       tests/test_process.py::_TestAsyncFileRedirection::test_stdout_aiofile
+PATCHES=(
+       # https://github.com/ronf/asyncssh/issues/616
+       "${FILESDIR}/${P}-py313.patch"
 )
 
 distutils_enable_tests pytest

diff --git a/dev-python/asyncssh/files/asyncssh-2.14.2-py313.patch 
b/dev-python/asyncssh/files/asyncssh-2.14.2-py313.patch
new file mode 100644
index 000000000000..fa3752a2b516
--- /dev/null
+++ b/dev-python/asyncssh/files/asyncssh-2.14.2-py313.patch
@@ -0,0 +1,151 @@
+From 58168139adcaa4bf12448904137cd77812636b18 Mon Sep 17 00:00:00 2001
+From: Ron Frederick <[email protected]>
+Date: Sat, 23 Dec 2023 10:25:14 -0800
+Subject: [PATCH] Guard against possible UNIX domain socket cleanup in Python
+ 3.13
+
+This commit adds guards around code which cleans up UNIX domain
+sockets, to protect against a change proposed at
+https://github.com/python/cpython/issues/111246
+which would cause the socket to clean itself up on close.
+---
+ tests/test_agent.py   |  5 ++++-
+ tests/test_forward.py | 50 +++++++++++++++++++++++++++++++++----------
+ 2 files changed, 43 insertions(+), 12 deletions(-)
+
+diff --git a/tests/test_agent.py b/tests/test_agent.py
+index 28ca730..2f0b83c 100644
+--- a/tests/test_agent.py
++++ b/tests/test_agent.py
+@@ -85,7 +85,10 @@ async def stop(self):
+         self._server.close()
+         await self._server.wait_closed()
+ 
+-        os.remove(self._path)
++        try:
++            os.remove(self._path)
++        except OSError:
++            pass
+ 
+ 
+ class _TestAgent(AsyncTestCase):
+diff --git a/tests/test_forward.py b/tests/test_forward.py
+index cae199d..4d30eda 100644
+--- a/tests/test_forward.py
++++ b/tests/test_forward.py
+@@ -651,7 +651,10 @@ async def test_forward_local_path_to_port(self):
+             async with conn.forward_local_path_to_port('local', '', 7):
+                 await self._check_local_unix_connection('local')
+ 
+-        os.remove('local')
++        try:
++            os.remove('local')
++        except OSError:
++            pass
+ 
+     @unittest.skipIf(sys.platform == 'win32',
+                      'skip UNIX domain socket tests on Windows')
+@@ -665,7 +668,10 @@ async def test_forward_local_path_to_port_failure(self):
+             with self.assertRaises(OSError):
+                 await conn.forward_local_path_to_port('local', '', 7)
+ 
+-        os.remove('local')
++        try:
++            os.remove('local')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_forward_local_port_pause(self):
+@@ -798,7 +804,11 @@ async def test_forward_remote_port_to_path(self):
+ 
+         server.close()
+         await server.wait_closed()
+-        os.remove('local')
++
++        try:
++            os.remove('local')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_forward_remote_specific_port(self):
+@@ -1020,7 +1030,10 @@ async def test_unix_server(self):
+             await listener.wait_closed()
+             listener.close()
+ 
+-        os.remove('echo')
++        try:
++            os.remove('echo')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_unix_server_open(self):
+@@ -1053,7 +1066,10 @@ async def test_unix_server_non_async(self):
+             async with conn.start_unix_server(_unix_listener_non_async, path):
+                 await self._check_local_unix_connection('echo')
+ 
+-        os.remove('echo')
++        try:
++            os.remove('echo')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_unix_server_failure(self):
+@@ -1071,7 +1087,10 @@ async def test_forward_local_path(self):
+             async with conn.forward_local_path('local', '/echo'):
+                 await self._check_local_unix_connection('local')
+ 
+-        os.remove('local')
++        try:
++            os.remove('local')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_forward_local_port_to_path_accept_handler(self):
+@@ -1149,8 +1168,11 @@ async def test_forward_remote_path(self):
+         server.close()
+         await server.wait_closed()
+ 
+-        os.remove('echo')
+-        os.remove('local')
++        try:
++            os.remove('echo')
++            os.remove('local')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_forward_remote_path_to_port(self):
+@@ -1167,11 +1189,14 @@ async def test_forward_remote_path_to_port(self):
+                     path, '127.0.0.1', server_port):
+                 await self._check_local_unix_connection('echo')
+ 
+-        os.remove('echo')
+-
+         server.close()
+         await server.wait_closed()
+ 
++        try:
++            os.remove('echo')
++        except OSError:
++            pass
++
+     @asynctest
+     async def test_forward_remote_path_failure(self):
+         """Test failure of forwarding a remote UNIX domain path"""
+@@ -1184,7 +1209,10 @@ async def test_forward_remote_path_failure(self):
+             with self.assertRaises(asyncssh.ChannelListenError):
+                 await conn.forward_remote_path(path, 'local')
+ 
+-        os.remove('echo')
++        try:
++            os.remove('echo')
++        except OSError:
++            pass
+ 
+     @asynctest
+     async def test_forward_remote_path_not_permitted(self):

Reply via email to