Files
middle-server/ExceptionHandler.py
2023-02-04 00:14:50 +08:00

65 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging as logger
class ExceptionHandler(object):
"""异常处理器,可以自行实现错误的捕获、熔断、服务降级等"""
def __init__(self, decorator=None):
if not decorator:
return
# 使用自定义装饰器覆盖
self.decorator = decorator
def handle(self, e, *args, **kwargs):
"""异常处理
:param e:
:param args: request args
:param kwargs: request kwargs
:return: tuple(content, status, headers)
:rtype: tuple
"""
raise NotImplementedError
def decorator(self, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logger.debug("Exception handle")
return self.handle(e, *args, **kwargs)
return wrapper
class InboundHandler(object):
"""输入处理管道,可自定义一系列拦截器处理请求信息,如验证、鉴权、数据解码、参数包装等"""
#__metaclass__ = 'ABCMeta'
def handle(self, request, *args, **kwargs):
"""
:param dict request: 请求信息 (初始url, parameters, data, method),可根据需要添加
:return: (request, args, kwargs)
"""
raise NotImplementedError
def __call__(self, request, *args, **kwargs):
return self.handle(request, *args, **kwargs)
class OutboundHandler(object):
"""输出处理管道,可自定义一系列拦截器处理返回信息,如返回码处理、数据编码等"""
# __metaclass__ = 'ABCMeta'
def handle(self, response, headers, status, content, *args, **kwargs):
"""
:param requests.Response response: origin http response
:param dict headers: the response headers which will be responded
:param int status: the status code which will be responded
:param str content: the content which will be responded
:return: tuple(headers, status, content)
"""
raise NotImplementedError
def __call__(self, response, headers, status, content, *args, **kwargs):
return self.handle(response, headers, status, content, *args, **kwargs)