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
评论列表
文章目录