Source code for marshmallow.exceptions
"""Exception classes for marshmallow-related errors."""
from __future__ import annotations
import typing
# Key used for schema-level validation errors
SCHEMA = "_schema"
[docs]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: str | list | dict,
field_name: str = SCHEMA,
data: typing.Mapping[str, typing.Any]
| typing.Iterable[typing.Mapping[str, typing.Any]]
| None = None,
valid_data: list[dict[str, typing.Any]] | dict[str, typing.Any] | None = 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)
[docs] def normalized_messages(self):
if self.field_name == SCHEMA and isinstance(self.messages, dict):
return self.messages
return {self.field_name: self.messages}
@property
def messages_dict(self) -> dict[str, typing.Any]:
if not isinstance(self.messages, dict):
raise TypeError(
"cannot access 'messages_dict' when 'messages' is of type "
+ type(self.messages).__name__
)
return self.messages
[docs]class RegistryError(NameError):
"""Raised when an invalid operation is performed on the serializer
class registry.
"""
[docs]class StringNotCollectionError(MarshmallowError, TypeError):
"""Raised when a string is passed when a list of strings is expected."""
[docs]class FieldInstanceResolutionError(MarshmallowError, TypeError):
"""Raised when schema to instantiate is neither a Schema class nor an instance."""