From 7447fc9726bf75945b2ddbda406d88e0d265645d Mon Sep 17 00:00:00 2001 From: Puneet Dixit <236133619+puneetdixit200@users.noreply.github.com> Date: Fri, 22 May 2026 03:06:08 +0530 Subject: [PATCH] Use asyncio.run for StatelessServer --- asgiref/server.py | 3 +-- tests/test_server.py | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/asgiref/server.py b/asgiref/server.py index 131ea430..186c5b1f 100644 --- a/asgiref/server.py +++ b/asgiref/server.py @@ -56,9 +56,8 @@ def run(self): """ Runs the asyncio event loop with our handler loop. """ - event_loop = asyncio.get_event_loop() try: - event_loop.run_until_complete(self.arun()) + asyncio.run(self.arun()) except KeyboardInterrupt: logger.info("Exiting due to Ctrl-C/interrupt") diff --git a/tests/test_server.py b/tests/test_server.py index f8aad448..b6205039 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -124,6 +124,32 @@ async def do_test(): pass +def test_run_creates_event_loop_when_none_exists(monkeypatch): + async def app(scope, receive, send): + pass + + class RunServer(StatelessServer): + def __init__(self): + super().__init__(app) + self.handled = False + + async def handle(self): + self.handled = True + + async def application_send(self, scope, message): + pass + + def raise_no_event_loop(): + raise RuntimeError("There is no current event loop in thread 'MainThread'.") + + monkeypatch.setattr(asyncio, "get_event_loop", raise_no_event_loop) + + server = RunServer() + server.run() + + assert server.handled + + @pytest.mark.asyncio async def test_server_delete_instance(server): """The max_applications of Server is 10. After 20 times register, application number should be 10."""