commit 024d332bc58897cc8ba0335eef7fa5d966e146f9 Author: P3ngSaM <61768364+P3ngSaM@users.noreply.github.com> Date: Thu Jun 23 16:43:41 2022 +0800 update 初始化项目 diff --git a/Modules/Functions/FinIndex/__init__.py b/Modules/Functions/FinIndex/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Functions/__init__.py b/Modules/Functions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Indicators/IndicatorObj.py b/Modules/Indicators/IndicatorObj.py new file mode 100644 index 0000000..e7c340e --- /dev/null +++ b/Modules/Indicators/IndicatorObj.py @@ -0,0 +1,75 @@ +from Utils.ObjUtil import SpecObject +from Utils.ValidateUtil import ValidateAttr + + +class IndexObj(SpecObject): + """指标""" + + class Parameter(SpecObject): + """传入参数""" + + class DataDind(SpecObject): + """数据绑定""" + + class Path(SpecObject): + """路径""" + database = ValidateAttr(field="", type=str) + sheet = ValidateAttr(field="sheet", type=str) + field = ValidateAttr(field="field", type=str) + + fields_map = { + "database": "库", + "sheet": "表", + "field": "字段" + } + + class Site(SpecObject): + """设置""" + type = ValidateAttr(field="type", type=str) + transform = ValidateAttr(field="transform", type=str) + + fields_map = { + "type": "类型", + "transform": "转换", + } + + path = ValidateAttr(field="path", type=Path) + site = ValidateAttr(field="site", instance_list=Site) + + fields_map = { + "path": "路径", + "site": "设置" + } + + param = ValidateAttr(field="param", type=str) + data_bind = ValidateAttr(field="data_bind", type=DataDind) + describe = ValidateAttr(field="describe", type=str) + + fields_map = { + "param": "参数", + "data_bind": "数据绑定", + "describe": "说明" + } + + index_id = ValidateAttr(field='index_id', type=str) + index_field = ValidateAttr(field='index_field', type=str) + func_field = ValidateAttr(field='func_field', type=str) + parameter = ValidateAttr(field='parameter', instance_list=Parameter) + + fields_map = { + "index_id": "指标ID", + "index_field": "指标名称", + "func_field": "绑定函数", + "parameter": "传入参数" + } + + +class TagObj(SpecObject): + """标签""" + tag_id = ValidateAttr(field='tag_id', type=str) + tag_field = ValidateAttr(field='tag_field', type=str) + + fields_map = { + "tag_id": "标签ID", + "tag_field": "标签名称" + } diff --git a/Modules/Indicators/__init__.py b/Modules/Indicators/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Models/SModels/__init__.py b/Modules/Models/SModels/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Models/__init__.py b/Modules/Models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Modules/__init__.py b/Modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Utils/ErrorUtil.py b/Utils/ErrorUtil.py new file mode 100644 index 0000000..7b1ef71 --- /dev/null +++ b/Utils/ErrorUtil.py @@ -0,0 +1,100 @@ +import time +import traceback + +from flask import request +from werkzeug.exceptions import BadRequest + +from DBHelper.MongoHelperInstance import DB_TEST + + +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 + + +class AttrCheckError(RuntimeError): + """属性检查异常""" + + def __init__(self, error_info): + self.error_info = error_info + + def __str__(self): + return self.error_info + + +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_TEST.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): + """条件检查失败 抛出异常 接口返回失败原因和状态码"""