Press any key to continue.
[python_utils.git] / input_utils.py
index 77094daaa7a70cd83ebf0e2b5ba0adac311d2b01..635e349009f174c9d7a69b68b38a93c4abf5f4bc 100644 (file)
@@ -7,7 +7,7 @@
 import logging
 import signal
 import sys
-from typing import List
+from typing import List, Optional
 
 import readchar  # type: ignore
 
@@ -17,7 +17,7 @@ logger = logging.getLogger(__file__)
 
 
 def single_keystroke_response(
-    valid_responses: List[str],
+    valid_responses: Optional[List[str]],  # None = accept anything
     *,
     prompt: str = None,
     default_response: str = None,
@@ -29,7 +29,7 @@ def single_keystroke_response(
         raise exceptions.TimeoutError()
 
     def _single_keystroke_response_internal(
-        valid_responses: List[str], timeout_seconds=None
+        valid_responses: Optional[List[str]], timeout_seconds: int = None
     ) -> str:
         os_special_keystrokes = [3, 26]  # ^C, ^Z
         if timeout_seconds is not None:
@@ -40,7 +40,7 @@ def single_keystroke_response(
             while True:
                 response = readchar.readchar()
                 logger.debug('Keystroke: 0x%x', ord(response))
-                if response in valid_responses:
+                if not valid_responses or response in valid_responses:
                     break
                 if ord(response) in os_special_keystrokes:
                     break
@@ -73,6 +73,10 @@ def yn_response(prompt: str = None, *, timeout_seconds=None) -> str:
     ).lower()
 
 
+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)
+
+
 def keystroke_helper() -> None:
     """Misc util to watch keystrokes and report what they were."""