Server : LiteSpeed System : Linux in-mum-web1112.main-hosting.eu 4.18.0-553.34.1.lve.el8.x86_64 #1 SMP Thu Jan 9 16:30:32 UTC 2025 x86_64 User : u451330669 ( 451330669) PHP Version : 8.2.27 Disable Function : NONE Directory : /opt/alt/python311/lib/python3.11/site-packages/jsons/ |
"""
Contains the classes that may be raised by jsons.
"""
from json import JSONDecodeError
from typing import Optional
class JsonsError(Exception):
"""
Base class for all `jsons` errors.
"""
def __init__(self, message: str):
"""
Constructor.
:param message: the message describing the problem.
"""
Exception.__init__(self, message)
self._message = message
@property
def message(self):
return self._message
class ValidationError(JsonsError):
"""
Raised when the validation of an object failed.
"""
class ArgumentError(JsonsError, ValueError):
"""
Raised when serialization or deserialization went wrong caused by a wrong
argument when serializing or deserializing.
"""
def __init__(self, message: str, argument: str):
"""
Constructor.
:param message: the message describing the problem.
:param argument: the name of the argument in question.
"""
JsonsError.__init__(self, message)
ValueError.__init__(self, message)
self._argument = argument
@property
def argument(self) -> str:
"""
The argument in question.
:return: the name of the argument.
"""
return self._argument
class DeserializationError(JsonsError):
"""
Raised when deserialization failed for some reason.
"""
def __init__(self, message: str, source: object, target: Optional[type]):
"""
Constructor.
:param message: the message describing the problem.
:param source: the object that was to be deserialized.
:param target: the type to which `source` was to be deserialized.
"""
JsonsError.__init__(self, message)
self._source = source
self._target = target
@property
def source(self) -> object:
"""
The object that was to be deserialized.
:return: the object that was to be deserialized.
"""
return self._source
@property
def target(self) -> Optional[type]:
"""
The target type to which `source` was to be deserialized.
:return: the type to which `source` was to be deserialized.
"""
return self._target
class SerializationError(JsonsError):
"""
Raised when serialization failed for some reason.
"""
class DecodeError(DeserializationError, JSONDecodeError):
"""
Raised when decoding a string or bytes to Python types failed. This error
is actually a wrapper around `json.JSONDecodeError`.
"""
def __init__(self, message: str, source: object, target: type,
error: JSONDecodeError):
"""
Constructor.
:param message: the message of this error.
:param source: the object that was to be deserialized.
:param target: the type to which `source` was to be deserialized.
:param error: the wrapped `JSONDecodeError`.
"""
DeserializationError.__init__(self, message, source, target)
JSONDecodeError.__init__(self, message, error.doc, error.pos)
class UnfulfilledArgumentError(DeserializationError, ArgumentError):
"""
Raised on a deserialization failure when an argument could not be fulfilled
by the given object attr_getter.
"""
def __init__(self,
message: str,
argument: str,
source: object,
target: type):
"""
Constructor.
:param message: the message of this error.
:param argument: the argument that was unfulfilled.
:param source: the object that was to be deserialized.
:param target: the type to which `source` was to be deserialized.
"""
DeserializationError.__init__(self, message, source, target)
ArgumentError.__init__(self, message, argument)
class SignatureMismatchError(DeserializationError, ArgumentError):
"""
Raised when the source could not be deserialized into the target type due
to a mismatch between the source's attributes and the target's accepted
parameters. This error is raised in "strict-mode" only.
"""
def __init__(self,
message: str,
argument: str,
source: object,
target: type):
"""
Constructor.
:param message: the message of this error.
:param argument: the argument that caused the problem.
:param source: the object that was to be deserialized.
:param target: the type to which `source` was to be deserialized.
"""
DeserializationError.__init__(self, message, source, target)
ArgumentError.__init__(self, message, argument)
class UnknownClassError(DeserializationError):
"""
Raised when jsons failed to find a type instance to deserialize to. If this
error occurs, consider using ``jsons.announce_class``.
"""
def __init__(self, message: str, source: object, target_name: str):
"""
Constructor.
:param message: the message of this error.
:param source: the object that was to be deserialized.
:param target_name: the name of the type that was the target type.
"""
DeserializationError.__init__(self, message, source, None)
self._target_name = target_name
@property
def target_name(self) -> str:
"""
The name of the type that was unsuccessfully attempted to deserialize
into.
:return: the name of the type that was to be the target type.
"""
return self._target_name
class InvalidDecorationError(JsonsError):
"""
Raised when a jsons decorator was wrongly used.
"""
def __init__(self, message: str):
"""
Constructor.
:param message: the message of this error.
"""
JsonsError.__init__(self, message)