def message(self): custom_error = self.schema.get('error_%s' % self.validator, self.schema.get('error')) if custom_error: return template.render(custom_error, self.__dict__) elif hasattr(self, 'message_%s' % self.validator): return getattr(self, 'message_%s' % self.validator)() return self._message
def set_error_message(error): """ Create user facing error message from a :class:`jsonschema.ValidationError` `error` """ # First, replace default error messages with our custom ones if error.validator == 'type': if isinstance(error.validator_value, basestring): valid_types = [error.validator_value] else: valid_types = list(error.validator_value) # Replace some types with more pythony ones replace = {'object': 'dict', 'array': 'list'} valid_types = [replace.get(t, t) for t in valid_types] # Make valid_types into an english list, with commas and 'or' valid_types = ', '.join(valid_types[:-2] + ['']) + ' or '.join( valid_types[-2:]) if isinstance(error.instance, dict): error.message = 'Got a dict, expected: %s' % valid_types if isinstance(error.instance, list): error.message = 'Got a list, expected: %s' % valid_types error.message = 'Got `%s`, expected: %s' % (error.instance, valid_types) elif error.validator == 'format': if error.cause: error.message = unicode(error.cause) elif error.validator == 'enum': error.message = 'Must be one of the following: %s' % ', '.join( map(unicode, error.validator_value)) elif error.validator == 'additionalProperties': if error.validator_value is False: extras = set( jsonschema._utils.find_additional_properties( error.instance, error.schema)) if len(extras) == 1: error.message = 'The key `%s` is not valid here.' % extras.pop( ) else: error.message = 'The keys %s are not valid here.' % ', '.join( '`%s`' % e for e in extras) else: # Remove u'' string representation from jsonschema error messages error.message = re.sub('u\'(.*?)\'', '`\\1`', error.message) # Then update with any custom error message supplied from the schema custom_error = error.schema.get('error_%s' % error.validator, error.schema.get('error')) if custom_error: error.message = template.render(custom_error, error.__dict__)
def get_error_message(error): """ Create user facing error message from a :class:`jsonschema.ValidationError` `error` """ custom_error = error.schema.get('error_%s' % error.validator, error.schema.get('error')) if custom_error: return template.render(custom_error, error.__dict__) if error.validator == 'type': if isinstance(error.validator_value, basestring): valid_types = [error.validator_value] else: valid_types = list(error.validator_value) # Replace some types with more pythony ones replace = {'object': 'dict', 'array': 'list'} valid_types = [replace.get(t, t) for t in valid_types] # Make valid_types into an english list, with commas and 'or' valid_types = ', '.join(valid_types[:-2] + ['']) + ' or '.join( valid_types[-2:]) if isinstance(error.instance, dict): return 'Got a dict, expected: %s' % valid_types if isinstance(error.instance, list): return 'Got a list, expected: %s' % valid_types return 'Got `%s`, expected: %s' % (error.instance, valid_types) if error.validator == 'format': if error.cause: return unicode(error.cause) return error._message if error.validator == 'enum': return 'Must be one of the following: %s' % ', '.join( map(unicode, error.validator_value)) if error.validator == 'additionalProperties': if error.validator_value is False: extras = set( jsonschema._utils.find_additional_properties( error.instance, error.schema)) if len(extras) == 1: return 'The key `%s` is not valid here.' % extras.pop() else: return 'The keys %s are not valid here.' % ', '.join( '`%s`' % e for e in extras) return error._message
def get_error_message(error): """ Create user facing error message from a :class:`jsonschema.ValidationError` `error` """ custom_error = error.schema.get('error_%s' % error.validator, error.schema.get('error')) if custom_error: return template.render(custom_error, error.__dict__) if error.validator == 'type': if isinstance(error.validator_value, basestring): valid_types = [error.validator_value] else: valid_types = list(error.validator_value) # Replace some types with more pythony ones replace = {'object': 'dict', 'array': 'list'} valid_types = [replace.get(t, t) for t in valid_types] # Make valid_types into an english list, with commas and 'or' valid_types = ', '.join(valid_types[:-2] + ['']) + ' or '.join(valid_types[-2:]) if isinstance(error.instance, dict): return 'Got a dict, expected: %s' % valid_types if isinstance(error.instance, list): return 'Got a list, expected: %s' % valid_types return 'Got `%s`, expected: %s' % (error.instance, valid_types) if error.validator == 'format': if error.cause: return unicode(error.cause) if error.validator == 'enum': return 'Must be one of the following: %s' % ', '.join(map(unicode, error.validator_value)) if error.validator == 'additionalProperties': if error.validator_value is False: extras = set(jsonschema._utils.find_additional_properties(error.instance, error.schema)) if len(extras) == 1: return 'The key `%s` is not valid here.' % extras.pop() else: return 'The keys %s are not valid here.' % ', '.join('`%s`' % e for e in extras) # Remove u'' string representation from jsonschema error messages message = re.sub('u\'(.*?)\'', '`\\1`', error.message) return message
def set_error_message(error): """ Create user facing error message from a :class:`jsonschema.ValidationError` `error` """ # First, replace default error messages with our custom ones if error.validator == "type": if isinstance(error.validator_value, basestring): valid_types = [error.validator_value] else: valid_types = list(error.validator_value) # Replace some types with more pythony ones replace = {"object": "dict", "array": "list"} valid_types = [replace.get(t, t) for t in valid_types] # Make valid_types into an english list, with commas and 'or' valid_types = ", ".join(valid_types[:-2] + [""]) + " or ".join(valid_types[-2:]) if isinstance(error.instance, dict): error.message = "Got a dict, expected: %s" % valid_types if isinstance(error.instance, list): error.message = "Got a list, expected: %s" % valid_types error.message = "Got `%s`, expected: %s" % (error.instance, valid_types) elif error.validator == "format": if error.cause: error.message = unicode(error.cause) elif error.validator == "enum": error.message = "Must be one of the following: %s" % ", ".join(map(unicode, error.validator_value)) elif error.validator == "additionalProperties": if error.validator_value is False: extras = set(jsonschema._utils.find_additional_properties(error.instance, error.schema)) if len(extras) == 1: error.message = "The key `%s` is not valid here." % extras.pop() else: error.message = "The keys %s are not valid here." % ", ".join("`%s`" % e for e in extras) else: # Remove u'' string representation from jsonschema error messages error.message = re.sub("u'(.*?)'", "`\\1`", error.message) # Then update with any custom error message supplied from the schema custom_error = error.schema.get("error_%s" % error.validator, error.schema.get("error")) if custom_error: error.message = template.render(custom_error, error.__dict__)