From f2f36979c4a80f70b79b6a38f81f2d8bdcb5170d Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Fri, 15 Apr 2022 09:46:38 -0700 Subject: [PATCH] Fix bug with timeouts. --- input_utils.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/input_utils.py b/input_utils.py index 635e349..5e36db1 100644 --- a/input_utils.py +++ b/input_utils.py @@ -22,7 +22,7 @@ def single_keystroke_response( prompt: str = None, default_response: str = None, timeout_seconds: int = None, -) -> str: +) -> Optional[str]: # None if timeout w/o keystroke """Get a single keystroke response to a prompt.""" def _handle_timeout(signum, frame) -> None: @@ -49,6 +49,7 @@ def single_keystroke_response( if timeout_seconds is not None: signal.alarm(0) + response = None if prompt is not None: print(prompt, end="") sys.stdout.flush() @@ -60,20 +61,27 @@ def single_keystroke_response( except exceptions.TimeoutError: if default_response is not None: response = default_response - if prompt is not None: + if prompt and response: print(response) return response -def yn_response(prompt: str = None, *, timeout_seconds=None) -> str: +def yn_response(prompt: str = None, *, timeout_seconds=None) -> Optional[str]: """Get a Y/N response to a prompt.""" - return single_keystroke_response( + yn = single_keystroke_response( ["y", "n", "Y", "N"], prompt=prompt, timeout_seconds=timeout_seconds - ).lower() + ) + if yn: + yn = yn.lower() + return yn + +def press_any_key( + prompt: str = "Press any key to continue...", *, timeout_seconds=None +) -> Optional[str]: + """Press any key to continue...""" -def press_any_key(prompt: str = "Press any key to continue...", *, timeout_seconds=None) -> str: return single_keystroke_response(None, prompt=prompt, timeout_seconds=timeout_seconds) -- 2.45.2