aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/marshmallow/exceptions.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/marshmallow/exceptions.py')
-rw-r--r--.venv/lib/python3.12/site-packages/marshmallow/exceptions.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/marshmallow/exceptions.py b/.venv/lib/python3.12/site-packages/marshmallow/exceptions.py
new file mode 100644
index 00000000..096b6bd0
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/marshmallow/exceptions.py
@@ -0,0 +1,71 @@
+"""Exception classes for marshmallow-related errors."""
+
+from __future__ import annotations
+
+import typing
+
+# Key used for schema-level validation errors
+SCHEMA = "_schema"
+
+
+class MarshmallowError(Exception):
+ """Base class for all marshmallow-related errors."""
+
+
+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)
+
+ 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
+
+
+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."""