"""Util functions for context values.""" from enum import auto, Enum def get_context_values(values_from_context, possible_values): """Transform values from context into string and check them. Args: values_from_context (str or None): string with comma separator. possible_values (list): Return this if values_from_context is None. Returns: list: A list with values from context. Raises: ValueError: If values are inappropriate. """ if not values_from_context: return possible_values values_list = [ value.strip() for value in values_from_context.split(',')] if not set(values_list).issubset(possible_values): raise ValueError( 'This is incorrect format! Please provide ' 'comma-separated list.\n' '{} was provided.\n' '{} are available.'.format(values_from_context, possible_values) ) return values_list class Reload(Enum): """Enum for values of reload argument.""" FALSE = auto() SOFT = auto() TRUE = auto() @classmethod def possible_values(cls): """Return possible values for reload argument.""" return ['false', 'soft', 'true', 'full', 'none'] @classmethod def from_value(cls, value): """Convert str value to Reload. Acceptable values are (case-insensitive): - 'True', 'Full', -> Reload.FULL - 'Soft', -> Reload.SOFT - 'None', 'False', '' -> Reload.NONE For Reload.SOFT, check if soft_reload is allowed in config_module. """ value = str(value).lower() if value in {'true', 'full'}: return Reload.TRUE elif value == 'soft': return Reload.SOFT elif value in {'none', 'false', ''}: return Reload.FALSE else: raise ValueError(f'Invalid reload value: {value}') def strtobool(val): """Convert a string representation of truth to bool.""" if not isinstance(val, str): raise ValueError(f'invalid truth value {val!r}') val = val.lower() if val in ('y', 'yes', 'true', 'on', '1'): return True elif val in ('n', 'no', 'false', 'off', '0', ''): return False else: raise ValueError(f'invalid truth value {val!r}')