示例#1
0
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)
示例#2
0
文件: rest.py 项目: isv1nd/book_store
    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)