"""Utility functions for interacting with the console""" #----------------------------------------------------------------------------- # Copyright (c) 2013, the IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- # Used to determine python version import sys #----------------------------------------------------------------------------- # Classes and functions #----------------------------------------------------------------------------- def input(prompt_text): """ Prompt the user for input. The input command will change depending on the version of python installed. To maintain support for 2 and earlier, we must use raw_input in that case. Else use input. Parameters ---------- prompt_text : str Prompt to display to the user. """ # Try to get the python version. This command is only available in # python 2 and later, so it's important that we catch the exception # if the command isn't found. try: majorversion = sys.version_info[0] except AttributeError: majorversion = 1 # Use the correct function to prompt the user for input depending on # what python version the code is running in. if majorversion >= 3: return input(prompt_text) else: return raw_input(prompt_text).decode(sys.stdin.encoding) def prompt_boolean(prompt, default=False): """ Prompt the user for a boolean response. Parameters ---------- prompt : str prompt to display to the user default : bool, optional response to return if none is given by the user """ response = input(prompt) response = response.strip().lower() #Catch 1, true, yes as True if len(response) > 0 and (response == "1" or response[0] == "t" or response[0] == "y"): return True #Catch 0, false, no as False elif len(response) > 0 and (response == "0" or response[0] == "f" or response[0] == "n"): return False else: return default def prompt_dictionary(choices, default_style=1, menu_comments={}): """ Prompt the user to chose one of many selections from a menu. Parameters ---------- choices : dictionary Keys - choice numbers (int) Values - choice value (str), this is what the function will return default_style : int, optional Choice to select if the user doesn't respond menu_comments : dictionary, optional Additional comments to append to the menu as it is displayed in the console. Keys - choice numbers (int) Values - comment (str), what will be appended to the corresponding choice """ # Build the menu that will be displayed to the user with # all of the options available. prompt = "" for key, value in choices.items(): prompt += "%d %s " % (key, value) if key in menu_comments: prompt += menu_comments[key] prompt += "\n" # Continue to ask the user for a style until an appropriate # one is specified. response = -1 while (not response in choices): try: text_response = input(prompt) # Use default option if no input. if len(text_response.strip()) == 0: response = default_style else: response = int(text_response) except ValueError: print("Error: Value is not an available option. 0 selects the default.\n") return choices[response]