Source code for marshmallow.exceptions
"""Exception classes for marshmallow-related errors."""
import typing
# Key used for schema-level validation errors
SCHEMA = "_schema"
class MarshmallowError(Exception):
"""Base class for all marshmallow-related errors."""
[docs]class ValidationError(MarshmallowError):
"""Raised when validation fails on a field or schema.
Validators and custom fields should raise this exception.
:param message: An error message, list of error messages, or dict of
error messages. If a dict, the keys are subitems and the values are error messages.
:param field_name: Field name to store the error on.
If `None`, the error is stored as schema-level error.
:param data: Raw input data.
:param valid_data: Valid (de)serialized data.
"""
def __init__(
self,
message: typing.Union[str, typing.List, typing.Dict],
field_name: str = SCHEMA,
data: typing.Union[
typing.Mapping[str, typing.Any],
typing.Iterable[typing.Mapping[str, typing.Any]],
] = None,
valid_data: typing.Union[
typing.List[typing.Dict[str, typing.Any]], typing.Dict[str, typing.Any]
] = None,
**kwargs
):
self.messages = [message] if isinstance(message, (str, bytes)) else message
self.field_name = field_name
self.data = data
self.valid_data = valid_data
self.kwargs = kwargs
super().__init__(message)
def normalized_messages(self):
if self.field_name == SCHEMA and isinstance(self.messages, dict):
return self.messages
return {self.field_name: self.messages}
class RegistryError(NameError):
"""Raised when an invalid operation is performed on the serializer
class registry.
"""
class StringNotCollectionError(MarshmallowError, TypeError):
"""Raised when a string is passed when a list of strings is expected."""
class FieldInstanceResolutionError(MarshmallowError, TypeError):
"""Raised when schema to instantiate is neither a Schema class nor an instance."""