def test_type_prefixing(self): validators.add_validator('type:prefixed_type', dummy_validator) validators.add_validator('unprefixed_type', dummy_validator) self.assertEqual(dummy_validator, validators.get_validator('type:prefixed_type')) self.assertEqual(dummy_validator, validators.get_validator('prefixed_type')) self.assertEqual(dummy_validator, validators.get_validator('type:unprefixed_type')) self.assertEqual(dummy_validator, validators.get_validator('unprefixed_type'))
def is_rule_supported(self, rule): supported_parameters = self.supported_rules.get(rule.rule_type) if not supported_parameters: LOG.debug("Rule type %(rule_type)s is not supported by " "%(driver_name)s", {'rule_type': rule.rule_type, 'driver_name': self.name}) return False for parameter, validators in supported_parameters.items(): parameter_value = rule.get(parameter) for validator_type, validator_data in validators.items(): validator_function = lib_validators.get_validator( validator_type) validate_result = validator_function(parameter_value, validator_data) # NOTE(slaweq): validator functions returns None if data is # valid or string with reason why data is not valid if validate_result: LOG.debug("Parameter %(parameter)s=%(value)s in " "rule type %(rule_type)s is not " "supported by %(driver_name)s. " "Validate result: %(validate_result)s", {'parameter': parameter, 'value': parameter_value, 'rule_type': rule.rule_type, 'driver_name': self.name, 'validate_result': validate_result}) return False return True
def convert_values( self, res_dict, exc_cls=lambda m: exceptions.InvalidInput(error_message=m)): """Convert and validate attribute values for a request. :param res_dict: The resource attributes from the request. :param exc_cls: Exception to be raised on error that must take a single error message as it's only constructor arg. :raises: exc_cls If any errors occur converting/validating the res_dict. """ for attr, attr_vals in self.attributes.items(): if (attr not in res_dict or res_dict[attr] is constants.ATTR_NOT_SPECIFIED): continue # Convert values if necessary if 'convert_to' in attr_vals: res_dict[attr] = attr_vals['convert_to'](res_dict[attr]) # Check that configured values are correct if 'validate' not in attr_vals: continue for rule in attr_vals['validate']: validator = validators.get_validator(rule) res = validator(res_dict[attr], attr_vals['validate'][rule]) if res: msg_dict = dict(attr=attr, reason=res) msg = _("Invalid input for %(attr)s. " "Reason: %(reason)s.") % msg_dict raise exc_cls(msg)
def is_rule_supported(self, rule): supported_parameters = self.supported_rules.get(rule.rule_type) if not supported_parameters: LOG.debug( "Rule type %(rule_type)s is not supported by " "%(driver_name)s", { 'rule_type': rule.rule_type, 'driver_name': self.name }) return False for parameter, validators in supported_parameters.items(): parameter_value = rule.get(parameter) for validator_type, validator_data in validators.items(): validator_function = lib_validators.get_validator( validator_type) validate_result = validator_function(parameter_value, validator_data) # NOTE(slaweq): validator functions returns None if data is # valid or string with reason why data is not valid if validate_result: LOG.debug( "Parameter %(parameter)s=%(value)s in " "rule type %(rule_type)s is not " "supported by %(driver_name)s. " "Validate result: %(validate_result)s", { 'parameter': parameter, 'value': parameter_value, 'rule_type': rule.rule_type, 'driver_name': self.name, 'validate_result': validate_result }) return False return True
def convert_value(attr_info, res_dict, exc_cls=ValueError): for attr, attr_vals in six.iteritems(attr_info): if (attr not in res_dict or res_dict[attr] is constants.ATTR_NOT_SPECIFIED): continue # Convert values if necessary if 'convert_to' in attr_vals: res_dict[attr] = attr_vals['convert_to'](res_dict[attr]) # Check that configured values are correct if 'validate' not in attr_vals: continue for rule in attr_vals['validate']: validator = lib_validators.get_validator(rule) res = validator(res_dict[attr], attr_vals['validate'][rule]) if res: msg_dict = dict(attr=attr, reason=res) msg = _("Invalid input for %(attr)s. " "Reason: %(reason)s.") % msg_dict raise exc_cls(msg)
def test_success_adding_duplicate_validator(self): validators.add_validator('dummy', dummy_validator) validators.add_validator('dummy', dummy_validator) self.assertEqual(dummy_validator, validators.get_validator('dummy'))
def test_get_validator_default(self): self.assertEqual( dummy_validator, validators.get_validator('nope', default=dummy_validator))
def test_get_validator_default(self): self.assertEqual(dummy_validator, validators.get_validator('nope', default=dummy_validator))