import sys from apistar import App, exceptions from apistar.http import Response, HTMLResponse from apistar.server.components import ReturnValue from .http import MetaJSONResponse class MetaApp(App): """ A WSGI App subclass with a MetaJSONResponse default response type """ def render_response(self, return_value: ReturnValue) -> Response: if isinstance(return_value, Response): return return_value elif isinstance(return_value, str): return HTMLResponse(return_value) return MetaJSONResponse(return_value) def exception_handler(self, exc: Exception) -> Response: if isinstance(exc, exceptions.HTTPException): return MetaJSONResponse(exc.detail, status_code=exc.status_code, headers=exc.get_headers()) raise def error_handler(self) -> Response: return MetaJSONResponse('Server error', status_code=500, exc_info=sys.exc_info())