Source code for glQiwiApi.utils.exceptions

import json
from typing import Optional, Union, Dict, Any

from aiohttp import RequestInfo
from pydantic import BaseModel


[docs]class NoUrlFound(Exception): """Данная ошибка возникает при неправильной авторизации yoomoney"""
[docs]class RequestProxyError(Exception): """Возникает, если были переданы неправильные параметры запроса"""
ProxyError = Exception()
[docs]class InvalidCardNumber(Exception): """ Ошибка, при передаче номера карты в неправильном формате """
[docs]class RequestAuthError(Exception): """ Ошибка при неправильной аутентификации POST or GET data """
[docs]class InvalidToken(Exception): """ Ошибка, возникающая, если был передан неверный токен """
[docs]class InvalidData(TypeError): """ Ошибка возникает если были переданы или получены невалидные данные """
[docs]class NoUpdatesToExecute(Exception): """ Ошибка возбуждается если при полинге нет транзакций, чтобы обрабатывать """
class RequestInfoModel(BaseModel): method: str url: str real_url: str class ExceptionTraceback(BaseModel): status_code: int msg: Optional[str] = None additional_info: Optional[str] = None request_info: Optional[RequestInfoModel] = None
[docs]class RequestError(Exception): """ Возникает при ошибках сервиса или неправильной передаче параметров """ def __init__( self, message: Optional[str], status_code: Union[str, int], additional_info: Optional[str] = None, traceback_info: Optional[Union[RequestInfo, str, bytes, dict]] = None ) -> None: super(RequestError, self).__init__() self.message = message self.status_code = status_code self.additional_info = additional_info self.traceback_info = traceback_info def __str__(self) -> str: resp = "code={sc} doc={msg}, additional_info={info}""" return resp.format( sc=self.status_code, msg=self.message, info=self.additional_info ) def __repr__(self) -> str: return self.__str__()
[docs] def to_model(self) -> ExceptionTraceback: """ Convert exception to :class:`ExceptionTraceback` """ if not isinstance(self.traceback_info, RequestInfo): raise TypeError("Cannot convert exception to `ExceptionTraceback`, because " "this method require `RequestInfo` object") return ExceptionTraceback( status_code=self.status_code, msg=self.message, additional_info=self.additional_info, request_info=RequestInfoModel( method=self.traceback_info.method, url=self.traceback_info.url.__str__(), real_url=self.traceback_info.real_url.__str__() ) )
def _make_json_without_request_info(self) -> Dict[str, Any]: return { "code": self.status_code, "msg": self.message, "additional_info": self.additional_info, "traceback_info": self.traceback_info }
[docs] def json(self, indent: int = 4, **dump_kw) -> str: """ Method, that makes json format from traceback :param indent: :param dump_kw: """ if isinstance(self.traceback_info, RequestInfo): info = self.to_model().dict(exclude_none=True) else: info = self._make_json_without_request_info() return json.dumps(info, indent=indent, ensure_ascii=False, **dump_kw)
__all__ = ( 'InvalidData', 'NoUrlFound', 'RequestAuthError', 'RequestProxyError', 'ProxyError', 'InvalidCardNumber', 'InvalidToken', 'RequestError', 'NoUpdatesToExecute' )