mirror of https://github.com/morpheus65535/bazarr
114 lines
3.5 KiB
Python
114 lines
3.5 KiB
Python
|
class BaseError(Exception):
|
||
|
"""
|
||
|
base error structure class
|
||
|
"""
|
||
|
|
||
|
def __init__(self, val, message):
|
||
|
"""
|
||
|
@param val: actual value
|
||
|
@param message: message shown to the user
|
||
|
"""
|
||
|
self.val = val
|
||
|
self.message = message
|
||
|
super().__init__()
|
||
|
|
||
|
def __str__(self):
|
||
|
return "{} --> {}".format(self.val, self.message)
|
||
|
|
||
|
|
||
|
class LanguageNotSupportedException(BaseError):
|
||
|
"""
|
||
|
exception thrown if the user uses a language that is not supported by the deep_translator
|
||
|
"""
|
||
|
|
||
|
def __init__(self, val, message="There is no support for the chosen language"):
|
||
|
super().__init__(val, message)
|
||
|
|
||
|
|
||
|
class NotValidPayload(BaseError):
|
||
|
"""
|
||
|
exception thrown if the user enters an invalid payload
|
||
|
"""
|
||
|
|
||
|
def __init__(self,
|
||
|
val,
|
||
|
message='text must be a valid text with maximum 5000 character, otherwise it cannot be translated'):
|
||
|
super(NotValidPayload, self).__init__(val, message)
|
||
|
|
||
|
|
||
|
class TranslationNotFound(BaseError):
|
||
|
"""
|
||
|
exception thrown if no translation was found for the text provided by the user
|
||
|
"""
|
||
|
|
||
|
def __init__(self,
|
||
|
val,
|
||
|
message='No translation was found using the current translator. Try another translator?'):
|
||
|
super(TranslationNotFound, self).__init__(val, message)
|
||
|
|
||
|
|
||
|
class ElementNotFoundInGetRequest(BaseError):
|
||
|
"""
|
||
|
exception thrown if the html element was not found in the body parsed by beautifulsoup
|
||
|
"""
|
||
|
|
||
|
def __init__(self,
|
||
|
val,
|
||
|
message='Required element was not found in the API response'):
|
||
|
super(ElementNotFoundInGetRequest, self).__init__(val, message)
|
||
|
|
||
|
|
||
|
class NotValidLength(BaseError):
|
||
|
"""
|
||
|
exception thrown if the provided text exceed the length limit of the translator
|
||
|
"""
|
||
|
|
||
|
def __init__(self, val, min_chars, max_chars):
|
||
|
message = "Text length need to be between {} and {} characters".format(min_chars, max_chars)
|
||
|
super(NotValidLength, self).__init__(val, message)
|
||
|
|
||
|
|
||
|
class RequestError(Exception):
|
||
|
"""
|
||
|
exception thrown if an error occured during the request call, e.g a connection problem.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, message="Request exception can happen due to an api connection error. "
|
||
|
"Please check your connection and try again"):
|
||
|
self.message = message
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.message
|
||
|
|
||
|
|
||
|
class TooManyRequests(Exception):
|
||
|
"""
|
||
|
exception thrown if an error occured during the request call, e.g a connection problem.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, message="Server Error: You made too many requests to the server. According to google, you are allowed to make 5 requests per second and up to 200k requests per day. You can wait and try again later or you can try the translate_batch function"):
|
||
|
self.message = message
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.message
|
||
|
|
||
|
|
||
|
class ServerException(Exception):
|
||
|
"""
|
||
|
Default YandexTranslate exception from the official website
|
||
|
"""
|
||
|
errors = {
|
||
|
401: "ERR_KEY_INVALID",
|
||
|
402: "ERR_KEY_BLOCKED",
|
||
|
403: "ERR_DAILY_REQ_LIMIT_EXCEEDED",
|
||
|
404: "ERR_DAILY_CHAR_LIMIT_EXCEEDED",
|
||
|
413: "ERR_TEXT_TOO_LONG",
|
||
|
422: "ERR_UNPROCESSABLE_TEXT",
|
||
|
501: "ERR_LANG_NOT_SUPPORTED",
|
||
|
503: "ERR_SERVICE_NOT_AVAIBLE",
|
||
|
}
|
||
|
|
||
|
def __init__(self, status_code, *args):
|
||
|
message = self.errors.get(status_code, "API server error")
|
||
|
super(ServerException, self).__init__(message, *args)
|