first commit
This commit is contained in:
65
ExceptionHandler.py
Normal file
65
ExceptionHandler.py
Normal file
@ -0,0 +1,65 @@
|
||||
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)
|
Reference in New Issue
Block a user