| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | import typing as _tfrom datetime import datetime_t_opt_any = _t.Optional[_t.Any]_t_opt_exc = _t.Optional[Exception]class BadData(Exception):    """Raised if bad data of any sort was encountered. This is the base    for all exceptions that ItsDangerous defines.    .. versionadded:: 0.15    """    def __init__(self, message: str):        super().__init__(message)        self.message = message    def __str__(self) -> str:        return self.messageclass BadSignature(BadData):    """Raised if a signature does not match."""    def __init__(self, message: str, payload: _t_opt_any = None):        super().__init__(message)        #: The payload that failed the signature test. In some        #: situations you might still want to inspect this, even if        #: you know it was tampered with.        #:        #: .. versionadded:: 0.14        self.payload: _t_opt_any = payloadclass BadTimeSignature(BadSignature):    """Raised if a time-based signature is invalid. This is a subclass    of :class:`BadSignature`.    """    def __init__(        self,        message: str,        payload: _t_opt_any = None,        date_signed: _t.Optional[datetime] = None,    ):        super().__init__(message, payload)        #: If the signature expired this exposes the date of when the        #: signature was created. This can be helpful in order to        #: tell the user how long a link has been gone stale.        #:        #: .. versionchanged:: 2.0        #:     The datetime value is timezone-aware rather than naive.        #:        #: .. versionadded:: 0.14        self.date_signed = date_signedclass SignatureExpired(BadTimeSignature):    """Raised if a signature timestamp is older than ``max_age``. This    is a subclass of :exc:`BadTimeSignature`.    """class BadHeader(BadSignature):    """Raised if a signed header is invalid in some form. This only    happens for serializers that have a header that goes with the    signature.    .. versionadded:: 0.24    """    def __init__(        self,        message: str,        payload: _t_opt_any = None,        header: _t_opt_any = None,        original_error: _t_opt_exc = None,    ):        super().__init__(message, payload)        #: If the header is actually available but just malformed it        #: might be stored here.        self.header: _t_opt_any = header        #: If available, the error that indicates why the payload was        #: not valid. This might be ``None``.        self.original_error: _t_opt_exc = original_errorclass BadPayload(BadData):    """Raised if a payload is invalid. This could happen if the payload    is loaded despite an invalid signature, or if there is a mismatch    between the serializer and deserializer. The original exception    that occurred during loading is stored on as :attr:`original_error`.    .. versionadded:: 0.15    """    def __init__(self, message: str, original_error: _t_opt_exc = None):        super().__init__(message)        #: If available, the error that indicates why the payload was        #: not valid. This might be ``None``.        self.original_error: _t_opt_exc = original_error
 |