Source code for clusterking.util.cli

#!/usr/bin/env python3

"""Utils for the command line interface (CLI)."""

[docs]def yn_prompt(question: str, yes=None, no=None) -> bool: """Ask yes-no question. Args: question: Description of the prompt yes: List of strings interpreted as yes no: List of strings interpreted as no Returns: True if yes, False if no. """ if not yes: yes = ["yes", "ye", "y"] if not no: no = ["no", "n"] prompt = question if not prompt.endswith(" "): prompt += " " prompt += "[{} or {}] ".format("/".join(yes), "/".join(no)) print(prompt, end="") while True: choice = input().lower().strip() if choice in yes: return True elif choice in no: return False else: print( "Please respond with '{}' or '{}': ".format( "/".join(yes), "/".join(no) ), end="", )
[docs]def handle_overwrite(paths, behavior, log): """Do we want to overwrite a file that exists? Args: paths: List of pathlib.Paths behavior: How to proceed if output file already exists: 'ask', 'overwrite', 'raise' log: logging.Logger instance Returns: True if overwrite will occur, False otherwise. """ behavior = behavior.lower() if any([p.exists() for p in paths]): if behavior == "ask": prompt = ( "Some of the output files would be overwritten. " "Are you ok with that?" ) if not yn_prompt(prompt): log.warning("Returning without doing anything.") return elif behavior == "overwrite": pass elif behavior == "raise": msg = "Some of the output files would be overwritten." log.critical(msg) raise FileExistsError(msg) else: msg = "Unknown option for 'overwrite' argument." log.critical(msg) raise ValueError(msg) return True return False
if __name__ == "__main__": # for testing ans = yn_prompt("This is a test.") print(ans)