Convertors¶
Convertors classes for converting the string input to the desired output type. The GetInput class calls the Convertor after cleaning and before validation.
Creating Convertors¶
Convertor classes inherit from the Convertor base class. They must be callable, with the __call__ dunder method taking three parameters: the value to convert, a function to call when an error occurs and the format string for the error function. The __call__ method returns the converted value. Error conditions are handled by calling the error_callback function . See error_callbacks for more information on error functions and their format strings. The __init__ method should use super to call the __init__ method on the Convertor base class so value_error_str gets set.
An example of a convertor to change the input value to an integer looks like:
class IntConvertor(Convertor):
# convert to a value to an integer
def __init__(self, base=10, value_error_str='an integer number'):
self._base = base
super(IntConvertor, self).__init__(value_error_str)
def __call__(self, value, error_callback, convertor_fmt_str):
try:
return int(value, self._base)
except ValueError:
error_callback(convertor_fmt_str, value, 'an int')
raise # re-raise the exception
def __repr__(self):
return 'IntConvertor(base={}, value_error_str={})'.format(self._base, self.value_error_str)
Convertors¶
BooleanConvertor¶
-
class
cooked_input.
BooleanConvertor
(value_error_str='true or false')¶ convert to a boolean value (True or False.)
Parameters: value_error_str (str) – (optional) the error string to use when an improper value is input Returns: value
converted to a booleanReturn type: boolean (True or False) Raises: ConvertorError – if value
cannot be converted to boolBooleanConvertor returns True for input values: ‘t’, ‘true’, ‘y’, ‘yes’, and ‘1’. BooleanConvertor returns False for input values: ‘f’, ‘false’, ‘n’, ‘no’, ‘0’.
DateConvertor¶
-
class
cooked_input.
DateConvertor
(value_error_str='a date')¶ convert to a datetime value.
Parameters: value_error_str (str) – (optional) the error string to use when an improper value is input Returns: value
converted to a datetimeReturn type: datetime Raises: ConvertorError – if dateparser is unable to convert
value
to a datetimeConverts the cleaned input to an datetime value. Dateparser is used for the parsing, allowing a lot of flexibility in how date input is entered (e.g. ‘12/12/12’, ‘October 1, 2015’, ‘today’, or ‘next Tuesday’). For more information about dateparser see: https://dateparser.readthedocs.io/en/latest/
FloatConvertor¶
-
class
cooked_input.
FloatConvertor
(value_error_str='a float number')¶ convert to a floating point number.
Parameters: value_error_str (str) – (optional) the error string to use when an improper value is input Returns: value
converted to floatReturn type: float Raises: ConvertorError – if value
cannot be converted to float
IntConvertor¶
-
class
cooked_input.
IntConvertor
(base=10, value_error_str='an integer number')¶ convert the cleaned input to an integer.
Parameters: - base (int) – the radix base to use for the int conversion (default=10)
- value_error_str (str) – (optional) the error string to use when an improper value is input
Returns: value
converted to intReturn type: int
Raises: ConvertorError – if
value
cannot be converted to intLegal values for the base parameter are 0 and 2-36. See the Python int built-in function for more information.
ListConvertor¶
-
class
cooked_input.
ListConvertor
(elem_get_input=None, delimiter=', ', value_error_str='list of values')¶ convert to a list.
Parameters: - elem_get_input (GetInput) – an instance of a
GetInput
to apply to each element. IfNone
(default) each element in the list is a string - delimiter (str) – (optional) the single character delimiter to use for parsing the list. If None, will sniff the value (ala CSV library.)
- value_error_str (str) – (optional) the error string for improper value inputs
Returns: a list values, where each item in the list is of the type returned by
elem_get_input
Return type: List[Any] (element type of list determined by
elem_get_input
)Raises: ConvertorError – if
elem_get_input
’sGetInput.process_value()
failsConverts to a homogenous list of values. The
GetInput.process_value()
method on theelem_get_input
GetInput
instance is called for each element in the list.For example, the accept a list of integers separated by colons (‘:’) and return it as a Python list of ints:
prompt_str = 'Enter a list of integers (separated by ":")' lc = ListConvertor(delimiter=':', elem_get_input=GetInput(convertor=IntConvertor())) result = get_input(prompt=prompt_str, convertor=lc)
- elem_get_input (GetInput) – an instance of a
YesNoConvertor¶
-
class
cooked_input.
YesNoConvertor
(value_error_str='yes or no')¶ convert to ‘yes’ or ‘no’.
Parameters: value_error_str (str) – (optional) the error string to use when an improper value is input Returns: a string set to either “yes” or “no” Return type: str (“yes” or “no”) Raises: ConvertorError – if value
cannot be converted to “yes” or “no”YesNoConvertor returns yes for input values: ‘y’, ‘yes’, ‘yeah’, ‘yup’, ‘aye’, ‘qui’, ‘si’, ‘ja’, ‘ken’, ‘hai’, ‘gee’, ‘da’, ‘tak’, ‘affirmative’. YesNoConvertor returns no for input values: ‘n’, ‘no’, ‘nope’, ‘na’, ‘nae’, ‘non’, ‘negatory’, ‘nein’, ‘nie’, ‘nyet’, ‘lo’.
ChoiceConvertor¶
-
class
cooked_input.
ChoiceConvertor
(value_dict, value_error_str='a valid row number')¶ Convert a value to its mapped value in a dictionary.
Parameters: - value_dict (Dict) – a dictionary containing keys to map from and values to map to
- value_error_str (str) – (optional) the error string to use when an improper value is input
:raises ConvertorError if
value
key is not found invalue_dict
Returns: the value associated with the choice in value_dict
(e.g. value_dict[value])Return type: Any (type is dependent on mapped value in value_dict
)convert a value to it’s return value in a dictionary (i.e. value_dict[value]). Can be used to map the row index from a table of values or to map multiple tags to a single choice.
For example, to use a number to pick from a list of colors:
value_map = {'1': 'red', '2': 'green', '3': 'blue'} choice_convertor = ci.ChoiceConvertor(value_dict=value_map) result = ci.get_input(convertor=choice_convertor, prompt='Pick a color (1 - red, 2 - green, 3 - blue)')