validators.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:Metis 作者: gusibi 项目源码 文件源码
def response_filter(view):

    @wraps(view)
    async def wrapper(*args, **kwargs):
        request = args[1]
        resp = view(*args, **kwargs)

        from inspect import isawaitable
        if isawaitable(resp):
            resp = await resp
        if isinstance(resp, HTTPResponse):
            return resp

        endpoint = _path_to_endpoint(request.uri_template)
        method = request.method
        if method == 'HEAD':
            method = 'GET'
        filter = filters.get((endpoint, method), None)
        if not filter:
            return resp

        headers = None
        status = None
        if isinstance(resp, tuple):
            resp, status, headers = unpack(resp)

        if len(filter) == 1:
            if six.PY3:
                status = list(filter.keys())[0]
            else:
                status = filter.keys()[0]

        schemas = filter.get(status)
        if not schemas:
            # return resp, status, headers
            raise ServerError('undefined', message='`%d` is not a defined status code.' % status)

        resp, errors = normalize(schemas['schema'], resp)
        if schemas['headers']:
            headers, header_errors = normalize(
                {'properties': schemas['headers']}, headers)
            errors.extend(header_errors)
        if errors:
            error_code = errors[0].get('name', 'ExpectationFailed')
            raise ServerError(error_code, errors=errors)

        return response.json(
            resp,
            status=status,
            headers=headers,
        )

    return wrapper
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号