def error_handler_middleware_factory(app: web.Application, handler: Any) -> Callable:
"""Error handling middle.
Catch errors raised in web views and try to return a corresponding
HTTP error code.
"""
async def middleware_handler(request: web.Request) -> web.Response:
errcode = None
errmsg = None
ret = None
try:
ret = await handler(request)
except errors.NotFound as e:
errcode = 404
errmsg = str(e) or 'not found'
except errors.PermissionDenied as e:
errcode = 401
errmsg = str(e) or 'permission denied'
except errors.InvalidData as e:
errcode = 400
errmsg = str(e) or 'invalid data'
except errors.WebAPIError as e:
errcode = 400
errmsg = str(e) or 'api error'
except IrisettError as e:
errcode = 400
errmsg = str(e) or 'irisett error'
if errcode:
log.msg('Request returning error(%d/%s): %s' % (errcode, errmsg, request), 'WEBAPI')
ret = web.Response(status=errcode, text=errmsg)
return ret
return middleware_handler
评论列表
文章目录