From 97981252628a9f6a9b80a0ea62d21907060ffcf0 Mon Sep 17 00:00:00 2001 From: "zainnadeem(RedOpsCell)" Date: Thu, 25 Jun 2026 22:24:47 +0500 Subject: [PATCH] gh-152099: Raise SendfileNotAvailableError for fallback transports --- Lib/asyncio/base_events.py | 2 +- Lib/test/test_asyncio/test_sendfile.py | 5 +++-- .../Library/2026-06-25-22-19-04.gh-issue-152099.L7fKq9.rst | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2026-06-25-22-19-04.gh-issue-152099.L7fKq9.rst diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index e6c72e3d5b5487e..451ab76b7416542 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -1283,7 +1283,7 @@ async def sendfile(self, transport, file, offset=0, count=None, raise if not fallback: - raise RuntimeError( + raise exceptions.SendfileNotAvailableError( f"fallback is disabled and native sendfile is not " f"supported for transport {transport!r}") return await self._sendfile_fallback(transport, file, diff --git a/Lib/test/test_asyncio/test_sendfile.py b/Lib/test/test_asyncio/test_sendfile.py index 7afd7de3bb936e6..38591629d71141e 100644 --- a/Lib/test/test_asyncio/test_sendfile.py +++ b/Lib/test/test_asyncio/test_sendfile.py @@ -354,7 +354,7 @@ def test_sendfile_not_supported(self): try: with self.assertRaisesRegex(RuntimeError, "not supported"): self.run_loop( - self.loop.sendfile(tr, self.file)) + self.loop.sendfile(tr, self.file, fallback=False)) self.assertEqual(0, self.file.tell()) finally: # don't use self.addCleanup because it produces resource warning @@ -580,7 +580,8 @@ def test_sendfile_no_fallback_for_fallback_transport(self): transport = mock.Mock() transport.is_closing.side_effect = lambda: False transport._sendfile_compatible = constants._SendfileMode.FALLBACK - with self.assertRaisesRegex(RuntimeError, 'fallback is disabled'): + with self.assertRaisesRegex(asyncio.SendfileNotAvailableError, + 'fallback is disabled'): self.loop.run_until_complete( self.loop.sendfile(transport, None, fallback=False)) diff --git a/Misc/NEWS.d/next/Library/2026-06-25-22-19-04.gh-issue-152099.L7fKq9.rst b/Misc/NEWS.d/next/Library/2026-06-25-22-19-04.gh-issue-152099.L7fKq9.rst new file mode 100644 index 000000000000000..05e760bcf6ed6d3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-06-25-22-19-04.gh-issue-152099.L7fKq9.rst @@ -0,0 +1,4 @@ +``asyncio``'s ``loop.sendfile(..., fallback=False)`` now consistently raises +:exc:`asyncio.SendfileNotAvailableError` for fallback-only transports, such as +SSL/TLS transports, when native sendfile cannot be used. Previously, this case +raised :exc:`RuntimeError`.