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)