def _parse_template_parameter(where: str, raw: object) -> TemplateParameter: rd = check_keys(raw, where, ['name', 'desc', 'type'], ['default']) name = check_str(rd['name'], 'name field of ' + where) r_desc = rd.get('desc') if r_desc is None: desc = None else: desc = check_str(r_desc, 'desc field of ' + where) r_type = rd.get('type') param_type = check_str(r_type, 'type field of ' + where) if param_type not in TemplateParameter.VALID_PARAM_TYPES: raise ValueError('At {}, the {} param has an invalid type field {!r}. ' 'Allowed values are: {}.'.format( where, name, param_type, ', '.join(TemplateParameter.VALID_PARAM_TYPES))) r_default = rd.get('default') if param_type == 'int': default = check_int( r_default, 'default field of {}, (an integer parameter)'.format(name)) elif param_type == 'string': default = check_str(r_default, 'default field of ' + where) elif param_type == 'object': default = IpConfig._check_object(r_default, 'default field of ' + where) else: assert False, f"Unknown parameter type found: {param_type!r}" return TemplateParameter(name, desc, param_type, default)
def _parse_template_parameter(where: str, raw: object) -> TemplateParameter: rd = check_keys(raw, where, ['name', 'desc', 'type'], ['default']) name = check_str(rd['name'], 'name field of ' + where) r_desc = rd.get('desc') if r_desc is None: desc = None else: desc = check_str(r_desc, 'desc field of ' + where) r_type = rd.get('type') param_type = check_str(r_type, 'type field of ' + where) if not param_type in ('string', 'int'): raise ValueError('At {}, the {} param has an invalid type field {!r}. ' 'Allowed values are: string, int.'.format( where, name, param_type)) r_default = rd.get('default') default = check_str(r_default, 'default field of ' + where) if param_type[:3] == 'int': check_int(default, 'default field of {}, (an integer parameter)'.format(name)) return TemplateParameter(name, desc, param_type, default)
def _check_param_values(template_params: TemplateParams, param_values: Any) -> Dict[str, Union[str, int]]: """Check if parameter values are valid. Returns the parameter values in typed form if successful, and throws a ValueError otherwise. """ param_values_typed = {} for key, value in param_values.items(): if not isinstance(key, str): raise ValueError( f"The IP configuration has a key {key!r} which is not a " "string.") if key not in template_params: raise ValueError( f"The IP configuration has a key {key!r} which is a " "valid parameter.") if template_params[key].param_type == 'string': param_value_typed = check_str( value, f"the key {key} of the IP configuration") elif template_params[key].param_type == 'int': param_value_typed = check_int( value, f"the key {key} of the IP configuration") elif template_params[key].param_type == 'object': param_value_typed = IpConfig._check_object( value, f"the key {key} of the IP configuration") else: assert True, "Unexpeced parameter type found, expand this check" param_values_typed[key] = param_value_typed return param_values_typed
def _check_param_values(template_params: TemplateParams, param_values: Any) -> Dict[str, Union[str, int]]: """Check if parameter values are valid. Returns the parameter values in typed form if successful, and throws a ValueError otherwise. """ VALID_PARAM_TYPES = ('string', 'int', 'object') param_values_typed = {} for key, value in param_values.items(): if not isinstance(key, str): raise ValueError( f"The IP configuration has a key {key!r} which is not a " "string.") if key not in template_params: raise ValueError( f"The IP configuration has a key {key!r} which is a " "valid parameter.") param_type = template_params[key].param_type if param_type not in VALID_PARAM_TYPES: raise ValueError( f"Unknown template parameter type {param_type!r}. " "Allowed types: " + ', '.join(VALID_PARAM_TYPES)) if param_type == 'string': param_value_typed = check_str( value, f"the key {key} of the IP configuration") elif param_type == 'int': param_value_typed = check_int( value, f"the key {key} of the IP configuration") elif param_type == 'object': param_value_typed = IpConfig._check_object( value, f"the key {key} of the IP configuration") else: assert False, "Unexpected parameter type found, expand check" param_values_typed[key] = param_value_typed return param_values_typed