Source code for yadisk.exceptions

# -*- coding: utf-8 -*-
# Copyright © 2024 Ivan Konovalov

# This file is part of a Python library yadisk.

# This library is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.

# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, see <http://www.gnu.org/licenses/>.

__all__ = [
    "YaDiskError", "RequestError", "YaDiskConnectionError",
    "TooManyRedirectsError", "RequestTimeoutError", "RetriableYaDiskError",
    "UnknownYaDiskError", "WrongResourceTypeError",
    "AsyncOperationFailedError", "AsyncOperationPollingTimeoutError",
    "BadRequestError", "UnauthorizedError", "ForbiddenError", "NotFoundError",
    "NotAcceptableError", "ConflictError", "GoneError", "PayloadTooLargeError",
    "UnsupportedMediaError", "LockedError", "UploadTrafficLimitExceededError",
    "TooManyRequestsError", "ResourceDownloadLimitExceededError",
    "InternalServerError", "BadGatewayError", "UnavailableError",
    "GatewayTimeoutError", "InsufficientStorageError", "PathNotFoundError",
    "ParentNotFoundError", "PathExistsError", "DirectoryExistsError",
    "FieldValidationError", "ResourceIsLockedError", "MD5DifferError",
    "OperationNotFoundError", "InvalidResponseError",
    "AuthorizationPendingError", "InvalidClientError", "InvalidGrantError",
    "BadVerificationCodeError", "UnsupportedTokenTypeError"
]

from .types import AnyResponse
from typing import Optional


[docs]class YaDiskError(Exception): """ Base class for all exceptions in this library. :ivar error_type: `str`, unique error code as returned by API :ivar response: an instance of :any:`Response` or :any:`AsyncResponse` :ivar disable_retry: `bool`, if set to :code:`True`, exception will not trigger a retry in :any:`utils.auto_retry()` :param error_type: `str`, unique error code as returned by API :param msg: `str`, exception message :param response: an instance of :any:`Response` or :any:`AsyncResponse` :param disable_retry: `bool`, if set to :code:`True`, exception will not trigger a retry in :any:`utils.auto_retry()` """ error_type: Optional[str] response: Optional[AnyResponse] disable_retry: bool def __init__( self, error_type: Optional[str] = None, msg: str = "", response: Optional[AnyResponse] = None, disable_retry: bool = False ) -> None: Exception.__init__(self, msg) self.error_type = error_type self.response = response self.disable_retry = disable_retry
[docs]class RequestError(YaDiskError): """ Generic exception class for cases when a request could not be sent or response could not be received. """ def __init__(self, msg: str = "", disable_retry: bool = False): YaDiskError.__init__(self, None, msg, disable_retry=disable_retry)
[docs]class YaDiskConnectionError(RequestError): """Thrown when a connection error occured.""" pass
[docs]class TooManyRedirectsError(RequestError): """Thrown when there were too many redirects.""" pass
[docs]class RequestTimeoutError(RequestError): """Thrown when a request timed out.""" pass
[docs]class WrongResourceTypeError(YaDiskError): """Thrown when the resource was expected to be of different type (e.g., file instead of directory).""" def __init__(self, msg: str = "") -> None: YaDiskError.__init__(self, None, msg, None)
[docs]class RetriableYaDiskError(YaDiskError): """Thrown when there was an error but it would make sense to retry the request.""" pass
[docs]class AsyncOperationFailedError(RetriableYaDiskError): """Raised when an asynchronous operation fails""" def __init__(self, msg: str = "") -> None: YaDiskError.__init__(self, None, msg, None)
[docs]class AsyncOperationPollingTimeoutError(YaDiskError): """Raised when a polling timeout occured while waiting for an asynchronous operation""" def __init__(self, msg: str = "") -> None: YaDiskError.__init__(self, None, msg, None)
[docs]class UnknownYaDiskError(RetriableYaDiskError): """Thrown when the request failed but the response does not contain any error info.""" def __init__( self, msg: str= "", response: Optional[AnyResponse] = None, disable_retry: bool = False ) -> None: RetriableYaDiskError.__init__(self, None, msg, response, disable_retry=disable_retry)
[docs]class BadRequestError(YaDiskError): """Thrown when the server returns code 400.""" pass
[docs]class UnauthorizedError(YaDiskError): """Thrown when the server returns code 401.""" pass
[docs]class ForbiddenError(YaDiskError): """Thrown when the server returns code 403.""" pass
[docs]class NotFoundError(YaDiskError): """Thrown when the server returns code 404.""" pass
[docs]class NotAcceptableError(YaDiskError): """Thrown when the server returns code 406.""" pass
[docs]class ConflictError(YaDiskError): """Thrown when the server returns code 409.""" pass
[docs]class GoneError(YaDiskError): """Raised when the server returns code 410.""" pass
[docs]class PayloadTooLargeError(YaDiskError): """Thrown when the server returns code 413.""" pass
[docs]class UnsupportedMediaError(YaDiskError): """Thrown when the server returns code 415.""" pass
[docs]class LockedError(YaDiskError): """Thrown when the server returns code 423.""" pass
[docs]class UploadTrafficLimitExceededError(LockedError): """Thrown when upload limit has been exceeded.""" pass
[docs]class TooManyRequestsError(YaDiskError): """Thrown when the server returns code 429.""" pass
[docs]class ResourceDownloadLimitExceededError(TooManyRequestsError): """Raised when the download limit for a resource is exceeded.""" pass
[docs]class InternalServerError(RetriableYaDiskError): """Thrown when the server returns code 500.""" pass
[docs]class BadGatewayError(RetriableYaDiskError): """Thrown when the server returns code 502""" pass
[docs]class UnavailableError(RetriableYaDiskError): """Thrown when the server returns code 503.""" pass
[docs]class GatewayTimeoutError(RetriableYaDiskError): """Thrown when the server returns code 504""" pass
[docs]class InsufficientStorageError(YaDiskError): """Thrown when the server returns code 507.""" pass
[docs]class PathNotFoundError(NotFoundError): """Thrown when the requested path does not exist.""" pass
[docs]class ParentNotFoundError(ConflictError): """Thrown by `mkdir`, `upload`, etc. when the parent directory doesn't exist.""" pass
[docs]class PathExistsError(ConflictError): """Thrown when the requested path already exists.""" pass
[docs]class DirectoryExistsError(PathExistsError): """Thrown when the directory already exists.""" pass
[docs]class FieldValidationError(BadRequestError): """Thrown when the request contains fields with invalid data.""" pass
[docs]class ResourceIsLockedError(LockedError): """Thrown when the resource is locked by another operation.""" pass
[docs]class MD5DifferError(ConflictError): """Thrown when the MD5 hash of the file to be deleted doesn't match with the actual one.""" pass
[docs]class OperationNotFoundError(NotFoundError): """Thrown by `get_operation_status()` when the operation doesn't exist.""" pass
[docs]class InvalidResponseError(YaDiskError): """Thrown when Yandex.Disk did not return a JSON response or if it's invalid.""" pass
[docs]class AuthorizationPendingError(BadRequestError): """Thrown when authorization is currently pending, the application has to wait.""" pass
[docs]class InvalidClientError(BadRequestError): """Thrown when an invalid client ID or client secret was provided""" pass
[docs]class InvalidGrantError(BadRequestError): """Thrown when a verification code is expired or invalid""" pass
[docs]class BadVerificationCodeError(BadRequestError): """Thrown when a verification code has invalid format""" pass
[docs]class UnsupportedTokenTypeError(BadRequestError): """Thrown when the specified token cannot be used in a request""" pass