From 87f6ace57dea2dd86857c19a4a5eb59b4a4e8dde Mon Sep 17 00:00:00 2001 From: Archimedes Trajano Date: Sat, 11 May 2024 16:08:31 -0400 Subject: [PATCH 1/7] Use asyncio to block forever rather than time sleep https://stackoverflow.com/questions/78465203/internally-is-asyncio-run-forever-basically-a-while-true-loop/78465221#78465221 https://stackoverflow.com/a/78463084/242042 --- ahk/_sync/engine.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index b10614e..7d6045f 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3839,12 +3839,24 @@ def folder_select_box( args = [starting_folder, str(opts), prompt] return self._transport.function_call('AHKFileSelectFolder', args, blocking=blocking) - def block_forever(self) -> NoReturn: + def block_forever( + self, + loop : asyncio.AbstractEventLoop = None, + stop_hotkeys: bool = False + ) -> NoReturn: """ - Blocks (sleeps) forever. Utility method to prevent script from exiting. + Blocks forever. Utility method to prevent script from exiting. Internally it uses + asyncio rather than a time.sleep. Optionally, hotkeys can be stopped cleanly once the + loop is done. """ - while True: - sleep(1) + if loop is None: + loop = asyncio.get_event_loop() + try: + loop.run_forever() + if stop_hotkeys: + ahk.stop_hotkeys() + finally: + loop.close() def get_version(self) -> str: return self._transport._get_full_version() From 22ae673b373321b03cd7153b8c755ec03c367010 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 20:14:45 +0000 Subject: [PATCH 2/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ahk/_sync/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index 7d6045f..f0c97a0 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3846,7 +3846,7 @@ def block_forever( ) -> NoReturn: """ Blocks forever. Utility method to prevent script from exiting. Internally it uses - asyncio rather than a time.sleep. Optionally, hotkeys can be stopped cleanly once the + asyncio rather than a time.sleep. Optionally, hotkeys can be stopped cleanly once the loop is done. """ if loop is None: From 4891e4cc5862452f83dd2aeb41d593526f38aee1 Mon Sep 17 00:00:00 2001 From: Archimedes Trajano Date: Sat, 11 May 2024 20:21:51 +0000 Subject: [PATCH 3/7] should be self not ahk --- ahk/_sync/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index f0c97a0..287415e 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3854,7 +3854,7 @@ def block_forever( try: loop.run_forever() if stop_hotkeys: - ahk.stop_hotkeys() + self.stop_hotkeys() finally: loop.close() From 23988396c083f96f993d28c09b118868b24789af Mon Sep 17 00:00:00 2001 From: Archimedes Trajano Date: Sat, 11 May 2024 20:59:29 +0000 Subject: [PATCH 4/7] fix typing --- ahk/_sync/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index 287415e..139db8b 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3841,7 +3841,7 @@ def folder_select_box( def block_forever( self, - loop : asyncio.AbstractEventLoop = None, + loop : Optional[asyncio.AbstractEventLoop] = None, stop_hotkeys: bool = False ) -> NoReturn: """ From 520a0fb246c0b2af43b8b2da3a096bfcfe9e3bb5 Mon Sep 17 00:00:00 2001 From: Archimedes Trajano Date: Sat, 11 May 2024 21:23:38 +0000 Subject: [PATCH 5/7] explicit return of None --- ahk/_sync/engine.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index 139db8b..9c0e9a3 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3857,6 +3857,7 @@ def block_forever( self.stop_hotkeys() finally: loop.close() + return None def get_version(self) -> str: return self._transport._get_full_version() From c6128e50b709b00731f02a8d9a49e18303905915 Mon Sep 17 00:00:00 2001 From: Archimedes Trajano Date: Sat, 11 May 2024 21:24:43 +0000 Subject: [PATCH 6/7] it's not NoReturn anymore --- ahk/_sync/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index 9c0e9a3..6147542 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3843,7 +3843,7 @@ def block_forever( self, loop : Optional[asyncio.AbstractEventLoop] = None, stop_hotkeys: bool = False - ) -> NoReturn: + ) -> None: """ Blocks forever. Utility method to prevent script from exiting. Internally it uses asyncio rather than a time.sleep. Optionally, hotkeys can be stopped cleanly once the From cdb20ba1208724698329cab8181eeeb8d799929a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 21:25:05 +0000 Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- ahk/_sync/engine.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/ahk/_sync/engine.py b/ahk/_sync/engine.py index 6147542..b10614e 100644 --- a/ahk/_sync/engine.py +++ b/ahk/_sync/engine.py @@ -3839,25 +3839,12 @@ def folder_select_box( args = [starting_folder, str(opts), prompt] return self._transport.function_call('AHKFileSelectFolder', args, blocking=blocking) - def block_forever( - self, - loop : Optional[asyncio.AbstractEventLoop] = None, - stop_hotkeys: bool = False - ) -> None: + def block_forever(self) -> NoReturn: """ - Blocks forever. Utility method to prevent script from exiting. Internally it uses - asyncio rather than a time.sleep. Optionally, hotkeys can be stopped cleanly once the - loop is done. + Blocks (sleeps) forever. Utility method to prevent script from exiting. """ - if loop is None: - loop = asyncio.get_event_loop() - try: - loop.run_forever() - if stop_hotkeys: - self.stop_hotkeys() - finally: - loop.close() - return None + while True: + sleep(1) def get_version(self) -> str: return self._transport._get_full_version()