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)