def inner_error_handler(exc): """ Serialize exceptions in rest response. :param exc: raised exception :return: exception response """ mimetype = serializers.get_mimetype(request) if isinstance(exc, exceptions.Base): data = {"exception": { "status_code": exc.status_code, "slug": exc.slug, "message": exc.message, "errors": exc.errors }} elif isinstance(exc, wz_exceptions.HTTPException): data = {"exception": { "status_code": exc.code, "slug": exc.name.lower().replace(' ', '_'), "message": exc.description, "errors": {} }} else: logger.error(traceback.format_exc()) data = {"exception": { "status_code": 500, "slug": "unknown_error", "message": exc.message, "errors": {} }} return serializers.encode_response(data, data["exception"]["status_code"], mimetype)
def _generate_response(result, status_code, settings, mimetype): """Encode response for current mime-type and set response cache settings :param result: result dict :param status_code: status code for response :param settings: result additional settings :param mimetype: mime-type to encode :return: encoded response """ etag = settings.get("etag") cache_no_store = settings.get("cache_no_store", False) cache_private = settings.get("cache_private", True) cache_max_age = settings.get("cache_max_age", None) if etag and etag in flask.request.if_none_match: return flask.Response(status=304) return serializers.encode_response(result, status_code, mimetype, etag=etag, cache_no_store=cache_no_store, cache_private=cache_private, cache_max_age=cache_max_age)