From ea1b324db472d5e734a9ef5ada5008c4087b6e15 Mon Sep 17 00:00:00 2001 From: Kenneth Yang Date: Sat, 15 Nov 2025 17:37:28 -0800 Subject: [PATCH 1/5] Create a loop to make requests --- src/ephys_link/back_end/server.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ephys_link/back_end/server.py b/src/ephys_link/back_end/server.py index a62502f..5c3b319 100644 --- a/src/ephys_link/back_end/server.py +++ b/src/ephys_link/back_end/server.py @@ -12,7 +12,7 @@ ``` """ -from asyncio import get_event_loop, run +from asyncio import new_event_loop, run, set_event_loop from collections.abc import Callable, Coroutine from json import JSONDecodeError, dumps, loads from typing import Any, TypeVar, final @@ -96,10 +96,17 @@ def launch(self) -> None: # List platform and available manipulators. self._console.info_print("PLATFORM", self._platform_handler.get_display_name()) - self._console.info_print( - "MANIPULATORS", - str(get_event_loop().run_until_complete(self._platform_handler.get_manipulators()).manipulators), - ) + + # Create event loop if one doesn't exist for getting manipulators + loop = new_event_loop() + set_event_loop(loop) + try: + self._console.info_print( + "MANIPULATORS", + str(loop.run_until_complete(self._platform_handler.get_manipulators()).manipulators), + ) + finally: + loop.close() # Launch server if self._options.use_proxy: From ef4f123fdb8d73d449f5ff1f0184768b075fe831 Mon Sep 17 00:00:00 2001 From: Kenneth Yang <82800265+kjy5@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:20:35 -0800 Subject: [PATCH 2/5] Update src/ephys_link/back_end/server.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/ephys_link/back_end/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ephys_link/back_end/server.py b/src/ephys_link/back_end/server.py index 5c3b319..197217e 100644 --- a/src/ephys_link/back_end/server.py +++ b/src/ephys_link/back_end/server.py @@ -97,7 +97,7 @@ def launch(self) -> None: # List platform and available manipulators. self._console.info_print("PLATFORM", self._platform_handler.get_display_name()) - # Create event loop if one doesn't exist for getting manipulators + # Create a temporary event loop for getting manipulators loop = new_event_loop() set_event_loop(loop) try: From 018f4b91c198862ab25c0c0f690cdac7547fdd6e Mon Sep 17 00:00:00 2001 From: Kenneth Yang <82800265+kjy5@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:21:25 -0800 Subject: [PATCH 3/5] Update src/ephys_link/back_end/server.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/ephys_link/back_end/server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ephys_link/back_end/server.py b/src/ephys_link/back_end/server.py index 197217e..e94ae42 100644 --- a/src/ephys_link/back_end/server.py +++ b/src/ephys_link/back_end/server.py @@ -99,7 +99,6 @@ def launch(self) -> None: # Create a temporary event loop for getting manipulators loop = new_event_loop() - set_event_loop(loop) try: self._console.info_print( "MANIPULATORS", From 66fef62ce5f243deaefaa128c4f805f88b3501e4 Mon Sep 17 00:00:00 2001 From: kjy5 <82800265+kjy5@users.noreply.github.com> Date: Sun, 16 Nov 2025 02:21:50 +0000 Subject: [PATCH 4/5] Hatch static analysis --- src/ephys_link/back_end/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ephys_link/back_end/server.py b/src/ephys_link/back_end/server.py index e94ae42..c19f6ee 100644 --- a/src/ephys_link/back_end/server.py +++ b/src/ephys_link/back_end/server.py @@ -12,7 +12,7 @@ ``` """ -from asyncio import new_event_loop, run, set_event_loop +from asyncio import new_event_loop, run from collections.abc import Callable, Coroutine from json import JSONDecodeError, dumps, loads from typing import Any, TypeVar, final From 2ea87b2dd52f2573104c5cd760e80b7f8eb51aaa Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:29:53 -0800 Subject: [PATCH 5/5] Update tests to mock new_event_loop instead of deprecated get_event_loop (#493) * Initial plan * Update tests to mock new_event_loop instead of get_event_loop Co-authored-by: kjy5 <82800265+kjy5@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Kenneth Yang <82800265+kjy5@users.noreply.github.com> --- tests/back_end/test_server.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/back_end/test_server.py b/tests/back_end/test_server.py index 9e82c84..8010265 100644 --- a/tests/back_end/test_server.py +++ b/tests/back_end/test_server.py @@ -88,8 +88,8 @@ def test_launch_server( patched_run_until_complete = mocker.patch.object( asyncio_loop, "run_until_complete", return_value=GetManipulatorsResponse(manipulators=DUMMY_STRING_LIST) ) - patched_get_event_loop = mocker.patch.object( - ephys_link.back_end.server, "get_event_loop", return_value=asyncio_loop + patched_new_event_loop = mocker.patch.object( + ephys_link.back_end.server, "new_event_loop", return_value=asyncio_loop ) # Mock out run_app. @@ -102,7 +102,7 @@ def test_launch_server( patched_get_display_name.assert_called_once() patched_get_manipulators.assert_called_once() patched_run_until_complete.assert_called_once() - patched_get_event_loop.assert_called_once() + patched_new_event_loop.assert_called_once() spied_info_print.assert_any_call("PLATFORM", platform_handler.get_display_name()) spied_info_print.assert_any_call("MANIPULATORS", str(DUMMY_STRING_LIST)) mocked_run_app.assert_called_once() @@ -123,8 +123,8 @@ def test_launch_proxy_client( patched_run_until_complete = mocker.patch.object( asyncio_loop, "run_until_complete", return_value=GetManipulatorsResponse(manipulators=DUMMY_STRING_LIST) ) - patched_get_event_loop = mocker.patch.object( - ephys_link.back_end.server, "get_event_loop", return_value=asyncio_loop + patched_new_event_loop = mocker.patch.object( + ephys_link.back_end.server, "new_event_loop", return_value=asyncio_loop ) # Mock out run. @@ -143,7 +143,7 @@ def run_coroutine(coroutine: Awaitable[None]) -> None: patched_get_display_name.assert_called_once() patched_get_manipulators.assert_called_once() patched_run_until_complete.assert_called_once() - patched_get_event_loop.assert_called_once() + patched_new_event_loop.assert_called_once() spied_info_print.assert_any_call("PLATFORM", platform_handler.get_display_name()) spied_info_print.assert_any_call("MANIPULATORS", str(DUMMY_STRING_LIST)) spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY) @@ -166,8 +166,8 @@ def test_launch_proxy_client_failed_init( patched_run_until_complete = mocker.patch.object( asyncio_loop, "run_until_complete", return_value=GetManipulatorsResponse(manipulators=DUMMY_STRING_LIST) ) - patched_get_event_loop = mocker.patch.object( - ephys_link.back_end.server, "get_event_loop", return_value=asyncio_loop + patched_new_event_loop = mocker.patch.object( + ephys_link.back_end.server, "new_event_loop", return_value=asyncio_loop ) # Mock out run. @@ -191,7 +191,7 @@ def run_coroutine(coroutine: Awaitable[None]) -> None: patched_get_display_name.assert_called_once() patched_get_manipulators.assert_called_once() patched_run_until_complete.assert_called_once() - patched_get_event_loop.assert_called_once() + patched_new_event_loop.assert_called_once() spied_info_print.assert_any_call("PLATFORM", platform_handler.get_display_name()) spied_info_print.assert_any_call("MANIPULATORS", str(DUMMY_STRING_LIST)) spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY)