frappe/env/lib/python3.12/site-packages/pyyoutube/error.py

65 lines
2.1 KiB
Python
Raw Permalink Normal View History

from dataclasses import dataclass
from typing import Optional, Union
from requests import Response
__all__ = ["ErrorCode", "ErrorMessage", "PyYouTubeException"]
class ErrorCode:
HTTP_ERROR = 10000
MISSING_PARAMS = 10001
INVALID_PARAMS = 10002
NEED_AUTHORIZATION = 10003
AUTHORIZE_URL_FIRST = 10004
@dataclass
class ErrorMessage:
status_code: Optional[int] = None
message: Optional[str] = None
class PyYouTubeException(Exception):
"""
This is a return demo:
{'error': {'errors': [{'domain': 'youtube.parameter',
'reason': 'missingRequiredParameter',
'message': 'No filter selected. Expected one of: forUsername, managedByMe, categoryId, mine, mySubscribers, id, idParam',
'locationType': 'parameter',
'location': ''}],
'code': 400,
'message': 'No filter selected. Expected one of: forUsername, managedByMe, categoryId, mine, mySubscribers, id, idParam'}}
"""
def __init__(self, response: Optional[Union[ErrorMessage, Response]]):
self.status_code: Optional[int] = None
self.error_type: Optional[str] = None
self.message: Optional[str] = None
self.response: Optional[Union[ErrorMessage, Response]] = response
self.error_handler()
def error_handler(self):
"""
Error has two big type(but not the error type.): This module's error, Api return error.
So This will change two error to one format
"""
if isinstance(self.response, ErrorMessage):
self.status_code = self.response.status_code
self.message = self.response.message
self.error_type = "PyYouTubeException"
elif isinstance(self.response, Response):
res_data = self.response.json()
if "error" in res_data:
self.status_code = res_data["error"]["code"]
self.message = res_data["error"]["message"]
self.error_type = "YouTubeException"
def __repr__(self):
return (
f"{self.error_type}(status_code={self.status_code},message={self.message})"
)
def __str__(self):
return self.__repr__()