services.py 文件源码

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

项目:trellio 作者: artificilabs 项目源码 文件源码
def _enable_http_middleware(func):  # pre and post http, processing
    @wraps(func)
    async def f(self, *args, **kwargs):
        if hasattr(self, 'middlewares'):
            for i in self.middlewares:
                if hasattr(i, 'pre_request'):
                    pre_request = getattr(i, 'pre_request')
                    if callable(pre_request):
                        try:
                            res = await pre_request(self, *args, **kwargs)  # passing service as first argument
                            if res:
                                return res
                        except Exception as e:
                            return Response(status=400, content_type='application/json',
                                            body=json.dumps(
                                                {'error': str(e), 'sector': getattr(i, 'middleware_info')}).encode())
        _func = coroutine(func)  # func is a generator object
        result = await _func(self, *args, **kwargs)
        if hasattr(self, 'middlewares'):
            for i in self.middlewares:
                if hasattr(i, 'post_request'):
                    post_request = getattr(i, 'post_request')
                    if callable(post_request):
                        try:
                            res = await post_request(self, result, *args, **kwargs)
                            if res:
                                return res
                        except Exception as e:
                            return Response(status=400, content_type='application/json',
                                            body=json.dumps(
                                                {'error': str(e), 'sector': getattr(i, 'middleware_info')}).encode())

        return result

    return f
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号