from typing import Dict from typing import Optional from typing import Union from flask import Response from flask import jsonify from flask_api import status class MonsunError(Exception): status_code = status.HTTP_501_NOT_IMPLEMENTED data: Dict message: Optional[str] def __init__( self, content: Union[str, Dict], ): if isinstance(content, str): self.message = content self.data = {"message": self.message} elif isinstance(content, Dict): self.data = content else: raise ValueError("'content' must be either a string or an dict") @property def response(self) -> Response: response: Response = jsonify(self.data) response.status_code = self.status_code return response class BadRequest(MonsunError): status_code = status.HTTP_400_BAD_REQUEST class Unauthorized(MonsunError): status_code = status.HTTP_401_UNAUTHORIZED class Forbidden(MonsunError): status_code = status.HTTP_403_FORBIDDEN class InternalServerError(MonsunError): status_code = status.HTTP_500_INTERNAL_SERVER_ERROR class ConfigurationError(InternalServerError): """raised in case of invalid configuration"""