| from typing import Optional | |
| class MemeGeneratorException(Exception): | |
| status_code: int = 520 | |
| def __init__(self, message: str): | |
| self.message = message | |
| def __str__(self) -> str: | |
| return self.__repr__() | |
| def __repr__(self) -> str: | |
| return f"Error in meme_generator: {self.message}" | |
| class NoSuchMeme(MemeGeneratorException): | |
| status_code: int = 531 | |
| def __init__(self, meme_key: str): | |
| self.meme_key = meme_key | |
| message = f'No such meme with key="{self.meme_key}"' | |
| super().__init__(message) | |
| class TextOverLength(MemeGeneratorException): | |
| status_code: int = 532 | |
| def __init__(self, text: str): | |
| self.text = text | |
| message = f'Text "{self.text}" is too long!' | |
| super().__init__(message) | |
| class OpenImageFailed(MemeGeneratorException): | |
| status_code: int = 533 | |
| def __init__(self, error_message: str): | |
| self.error_message = error_message | |
| message = f'Error opening images: "{self.error_message}"' | |
| super().__init__(message) | |
| class ParserExit(MemeGeneratorException): | |
| status_code: int = 534 | |
| def __init__(self, status: int = 0, error_message: Optional[str] = None): | |
| self.status = status | |
| self.error_message = error_message or "" | |
| message = ( | |
| f"Argument parser failed to parse. (status={self.status}" | |
| + (f", message={self.error_message!r}" if self.error_message else "") | |
| + ")" | |
| ) | |
| super().__init__(message) | |
| class ParamsMismatch(MemeGeneratorException): | |
| status_code: int = 540 | |
| def __init__(self, meme_key: str, message: str): | |
| self.meme_key = meme_key | |
| self.message = message | |
| def __repr__(self) -> str: | |
| return f'ParamsMismatch(key="{self.meme_key}", message="{self.message}")' | |
| class ImageNumberMismatch(ParamsMismatch): | |
| status_code: int = 541 | |
| def __init__(self, meme_key: str, min_images: int = 0, max_images: int = 0): | |
| message = ( | |
| "The number of images is incorrect, " | |
| f"it should be no less than {min_images} and no more than {max_images}" | |
| ) | |
| super().__init__(meme_key, message) | |
| class TextNumberMismatch(ParamsMismatch): | |
| status_code: int = 542 | |
| def __init__(self, meme_key: str, min_texts: int = 0, max_texts: int = 0): | |
| message = ( | |
| "The number of texts is incorrect, " | |
| f"it should be no less than {min_texts} and no more than {max_texts}" | |
| ) | |
| super().__init__(meme_key, message) | |
| class TextOrNameNotEnough(ParamsMismatch): | |
| status_code: int = 543 | |
| def __init__(self, meme_key: str, message: Optional[str] = None): | |
| message = message or "The number of texts or user names is not enough" | |
| super().__init__(meme_key, message) | |
| class ArgMismatch(ParamsMismatch): | |
| status_code: int = 550 | |
| pass | |
| class ArgParserExit(ArgMismatch): | |
| status_code: int = 551 | |
| def __init__(self, meme_key: str, error_message: str): | |
| self.error_message = error_message | |
| message = f"Argument parser failed to parse: {self.error_message}" | |
| super().__init__(meme_key, message) | |
| class ArgModelMismatch(ArgMismatch): | |
| status_code: int = 552 | |
| def __init__(self, meme_key: str, error_message: str): | |
| self.error_message = error_message | |
| message = f"Argument model validation failed: {self.error_message}" | |
| super().__init__(meme_key, message) | |