Fix bug with timeouts.
authorScott Gasch <[email protected]>
Fri, 15 Apr 2022 16:46:38 +0000 (09:46 -0700)
committerScott Gasch <[email protected]>
Fri, 15 Apr 2022 16:46:38 +0000 (09:46 -0700)
input_utils.py

index 635e349009f174c9d7a69b68b38a93c4abf5f4bc..5e36db1ba853884636a2df7a5007004aa086760b 100644 (file)
@@ -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)