guarantee-admin-api-v0.2/Utils/ErrorUtil.py

101 lines
2.5 KiB
Python
Raw Permalink Normal View History

2022-05-24 02:25:59 +08:00
import time
import traceback
from flask import request
from werkzeug.exceptions import BadRequest
from DBHelper.MongoHelperInstance import DB_GUA
def get_req_detail(req, param_type):
"""
获取请求参数信息
若异常请求则返回空字符串
"""
try:
if param_type == 'args':
return req.args.__str__()
elif param_type == 'json':
return req.json.__str__()
else:
return ''
except BadRequest:
return ''
class JustThrowError(RuntimeError):
"""自定义抛出异常信息"""
def __init__(self, error_info):
self.error_info = error_info
def __str__(self):
return self.error_info
class APIReturnError(RuntimeError):
"""接口返回异常信息"""
def __init__(self, error_info, status_code):
self.error_info = error_info # 异常信息
self.status_code = status_code # 状态码
def __str__(self):
return self.error_info
2022-05-25 14:41:58 +08:00
class AttrCheckError(RuntimeError):
"""属性检查异常"""
def __init__(self, error_info):
self.error_info = error_info
def __str__(self):
return self.error_info
2022-05-24 02:25:59 +08:00
class CheckFailed(RuntimeError):
"""检查异常"""
def __init__(self, failed_info, status_code):
self.failed_info = failed_info # 失败信息
self.status_code = status_code # 状态码
def __str__(self):
return self.failed_info
def log_error(self):
info = {
"ip": request.remote_addr,
"request_info": {
"path": request.path,
"method": request.method,
"headers": request.headers.__str__(),
"args": get_req_detail(request, 'args'),
"json": get_req_detail(request, 'json')
},
"traceback": traceback.format_exc(),
"exception": type(self).__name__,
"is_solved": "no",
"time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
}
DB_GUA.insert_single_data(
"日志",
"异常日志",
info
)
class LogConditionCheckFailed(CheckFailed):
"""直接记录检查异常"""
def __init__(self, failed_info, status_code):
self.failed_info = failed_info # 失败信息
self.status_code = status_code # 状态码
self.log_error()
class ReturnConditionCheckFailed(CheckFailed):
"""条件检查失败 抛出异常 接口返回失败原因和状态码"""