Source code for attrs_strict._error

[docs]class TypeValidationError(Exception): def __repr__(self): return "<{}>".format(str(self))
[docs]class BadTypeError(TypeValidationError, ValueError): def __init__(self): self.containers = [] def add_container(self, container): self.containers.append(container) def _render(self, error): if self.containers: backtrack = " in ".join( [str(container) for container in self.containers] ) return "{} in {}".format(error, backtrack) return error
[docs]class AttributeTypeError(BadTypeError): def __init__(self, container, attribute): super(AttributeTypeError, self).__init__() self.container = container self.attribute = attribute def __str__(self): error = "{} must be {} (got {} that is a {})".format( self.attribute.name, self.attribute.type, self.container, type(self.container), ) return self._render(error)
[docs]class TupleError(BadTypeError): def __init__(self, container, attribute, tuple_types): super(TupleError, self).__init__() self.attribute = attribute self.container = container self.tuple_types = tuple_types def __str__(self): error = ( "Element {} has {} elements than types " "specified in {}. Expected {} received {}" ).format( self.container, self._more_or_less(), self.attribute, len(self.tuple_types), len(self.container), ) return self._render(error) def _more_or_less(self): return "more" if len(self.container) > len(self.tuple_types) else "less"
[docs]class UnionError(BadTypeError): def __init__(self, container, attribute, expected_type): super(UnionError, self).__init__() self.attribute = attribute self.container = container self.expected_type = expected_type def __str__(self): error = "Value of {} {} is not of type {}".format( self.attribute, self.container, self.expected_type ) return self._render(error)