diff options
author | Tushar Makkar <tushar@codenation.co.in> | 2016-04-15 01:28:24 +0530 |
---|---|---|
committer | Tushar Makkar <tushar@codenation.co.in> | 2016-04-15 01:28:24 +0530 |
commit | fafc7204d7121645fc0fa18dc9df521431d000be (patch) | |
tree | 0ec2c9d10d1249d108be78cf1b25fc327e0987fc /voluptuous/error.py | |
parent | 7ab03c32910e4a594b8f7be5be1c1b758c2187ad (diff) | |
download | voluptuous-fafc7204d7121645fc0fa18dc9df521431d000be.tar.gz |
Squashing commits into 1
Diffstat (limited to 'voluptuous/error.py')
-rw-r--r-- | voluptuous/error.py | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/voluptuous/error.py b/voluptuous/error.py new file mode 100644 index 0000000..b768b9d --- /dev/null +++ b/voluptuous/error.py @@ -0,0 +1,177 @@ + +class Error(Exception): + """Base validation exception.""" + + +class SchemaError(Error): + """An error was encountered in the schema.""" + + +class Invalid(Error): + """The data was invalid. + + :attr msg: The error message. + :attr path: The path to the error, as a list of keys in the source data. + :attr error_message: The actual error message that was raised, as a + string. + + """ + + def __init__(self, message, path=None, error_message=None, error_type=None): + Error.__init__(self, message) + self.path = path or [] + self.error_message = error_message or message + self.error_type = error_type + + @property + def msg(self): + return self.args[0] + + def __str__(self): + path = ' @ data[%s]' % ']['.join(map(repr, self.path)) \ + if self.path else '' + output = Exception.__str__(self) + if self.error_type: + output += ' for ' + self.error_type + return output + path + + def prepend(self, path): + self.path = path + self.path + + +class MultipleInvalid(Invalid): + def __init__(self, errors=None): + self.errors = errors[:] if errors else [] + + def __repr__(self): + return 'MultipleInvalid(%r)' % self.errors + + @property + def msg(self): + return self.errors[0].msg + + @property + def path(self): + return self.errors[0].path + + @property + def error_message(self): + return self.errors[0].error_message + + def add(self, error): + self.errors.append(error) + + def __str__(self): + return str(self.errors[0]) + + def prepend(self, path): + for error in self.errors: + error.prepend(path) + + +class RequiredFieldInvalid(Invalid): + """Required field was missing.""" + + +class ObjectInvalid(Invalid): + """The value we found was not an object.""" + + +class DictInvalid(Invalid): + """The value found was not a dict.""" + + +class ExclusiveInvalid(Invalid): + """More than one value found in exclusion group.""" + + +class InclusiveInvalid(Invalid): + """Not all values found in inclusion group.""" + + +class SequenceTypeInvalid(Invalid): + """The type found is not a sequence type.""" + + +class TypeInvalid(Invalid): + """The value was not of required type.""" + + +class ValueInvalid(Invalid): + """The value was found invalid by evaluation function.""" + + +class ScalarInvalid(Invalid): + """Scalars did not match.""" + + +class CoerceInvalid(Invalid): + """Impossible to coerce value to type.""" + + +class AnyInvalid(Invalid): + """The value did not pass any validator.""" + + +class AllInvalid(Invalid): + """The value did not pass all validators.""" + + +class MatchInvalid(Invalid): + """The value does not match the given regular expression.""" + + +class RangeInvalid(Invalid): + """The value is not in given range.""" + + +class TrueInvalid(Invalid): + """The value is not True.""" + + +class FalseInvalid(Invalid): + """The value is not False.""" + + +class BooleanInvalid(Invalid): + """The value is not a boolean.""" + + +class UrlInvalid(Invalid): + """The value is not a url.""" + + +class FileInvalid(Invalid): + """The value is not a file.""" + + +class DirInvalid(Invalid): + """The value is not a directory.""" + + +class PathInvalid(Invalid): + """The value is not a path.""" + + +class LiteralInvalid(Invalid): + """The literal values do not match.""" + + +class LengthInvalid(Invalid): + pass + + +class DatetimeInvalid(Invalid): + """The value is not a formatted datetime string.""" + + +class InInvalid(Invalid): + pass + + +class NotInInvalid(Invalid): + pass + + +class ExactSequenceInvalid(Invalid): + pass |