update 接口管理

This commit is contained in:
P3ngSaM 2022-06-29 17:24:33 +08:00
parent 9fc6da3b01
commit 4715b0e95f
8 changed files with 330 additions and 1 deletions

View File

@ -121,6 +121,7 @@ class FinanceIndexImpl(object):
@staticmethod
def lock_calculate_func(**kwargs):
"""锁定函数"""
fid = kwargs['fid']
func = FinIndexObj()
func.status = 'lock'
@ -141,7 +142,7 @@ class FinanceIndexImpl(object):
'模型数据',
'计算函数',
{'函数ID': fid},
['函数名称', '说明', '函数说明', '方法', '参数', '标签', '状态']
['函数名称', '说明', '方法', '参数', '标签', '状态']
)
return record

View File

@ -0,0 +1,183 @@
import json
import time
from DBHelper.MongoHelperInstance import DB_TEST
from Modules.Interface.InterfaceObj import InterfaceObj
from Utils.CommonUtil import CommonUtils
import requests
class InterfaceImpl(object):
@staticmethod
def make_new_cid():
new_cid = CommonUtils.random_code(8)
case = DB_TEST.find_single_column(
"模型数据",
"计算接口",
{"接口ID": new_cid},
"接口ID"
) is not None
while case:
new_cid = CommonUtils.random_code(8)
return new_cid
def new_calculate_api(self, **kwargs):
"""新建指标计算接口"""
data = kwargs['data']
api = InterfaceObj()
api.api_id = self.make_new_cid()
api.api_name = data['api_name']
api.describe = data['describe']
api.address = data['address']
api.params = list()
for item in data['params']:
param = api.Param()
param.name = item['name']
param.mark = item['mark']
api.tags = data['tags']
api.edit_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
api.status = 'normal'
DB_TEST.insert_single_data(
'模型数据',
'计算接口',
api.fields_toggle()
)
return '新建成功'
@staticmethod
def check_calculate_api(**kwargs):
"""校验计算函数"""
address = kwargs['data']['address']
params = kwargs['data']['params']
param_dict = dict()
for param in params:
param_dict[param['name']] = param['input']
res = requests.get(url=address, params=param_dict)
if res.status_code == 200:
return json.loads(res.text)
else:
return '校验失败'
@staticmethod
def search_calculate_api(**kwargs):
"""查询指标接口"""
def make_search_body(param):
body = dict()
search_keys = list(param.keys())
if 'name' in search_keys:
body['接口名称'] = {"$regex": param['name']}
if 'tags' in search_keys:
body['标签'] = {"$in": param['tags']}
return body
def make_sort_body(param):
if param == 'asc':
body = {"编辑时间": 1}
else:
body = {"编辑时间": -1}
return body
data = kwargs['data']
sort = data['sort']
page_size = int(data['page_size'])
page_no = int(data['page_no'])
search_body = make_search_body(data)
sort_body = make_sort_body(sort)
page_size = 10 if page_size > 10 else page_size
total = DB_TEST.find_all_data_with_count(
'模型数据',
'计算接口',
search_body
)
records = DB_TEST.find_data_by_page_with_sort(
'模型数据',
'计算接口',
search_body,
['接口ID', '接口名称', '说明', '标签', '编辑时间'],
sort_body,
page_size,
page_no
)
result = {
"total": total,
"records": records
}
return result
@staticmethod
def lock_calculate_api(**kwargs):
"""锁定接口"""
aid = kwargs['aid']
api = InterfaceObj()
api.status = 'lock'
DB_TEST.update_single_data(
'模型数据',
'计算接口',
{'接口ID': aid},
api.fields_toggle()
)
return '锁定成功'
@staticmethod
def view_calculate_api(**kwargs):
aid = kwargs['aid']
record = DB_TEST.find_single_data(
'模型数据',
'计算接口',
{'接口ID': aid},
['接口名称', '说明', '地址', '参数', '标签', '状态']
)
return record
@staticmethod
def edit_calculate_api(**kwargs):
data = kwargs['data']
aid = data['api_id']
status = DB_TEST.find_single_column(
'模型数据',
'计算接口',
{'接口ID': aid},
'状态'
)
if status == 'lock':
return '函数已锁定'
api = InterfaceObj()
api.api_name = data['api_name']
api.describe = data['describe']
api.address = data['address']
api.params = list()
for params in data['params']:
param = api.Param()
param.name = params['name']
param.mark = params['mark']
api.params.append(param)
api.tags = data['tags']
api.edit_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
update_data = api.fields_toggle()
DB_TEST.update_single_data(
'模型数据',
'计算接口',
{'接口ID': aid},
update_data
)
return '修改成功'

View File

@ -0,0 +1,36 @@
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr, Validate
class InterfaceObj(SpecObject):
"""计算接口"""
class Param(SpecObject):
"""参数"""
name = ValidateAttr(field="name", type=str)
mark = ValidateAttr(field="mark", type=str)
fields_map = {
"name": "参数名",
"mark": "备注"
}
api_id = ValidateAttr(field="api_id", type=str)
api_name = ValidateAttr(field="api_name", type=str)
describe = ValidateAttr(field="describe", type=str)
address = ValidateAttr(field="address", type=str)
params = ValidateAttr(field="params", instance_list=Param)
tags = ValidateAttr(field="tags", type=list)
edit_date = ValidateAttr(field="edit_date", func=Validate.date_format)
status = ValidateAttr(field="status", type=str, in_list=['normal', 'lock'])
fields_map = {
"api_id": "接口ID",
"api_name": "接口名称",
"describe": "说明",
"address": "地址",
"params": "参数",
"tags": "标签",
"edit_date": "编辑时间",
"status": "状态"
}

View File

@ -0,0 +1,82 @@
from flask import Blueprint, request
from Modules.Interface.InterfaceImpl import InterfaceImpl
from Utils.ErrorUtil import APIReturnError
from Utils.RouteUtil import RouteParamsCheck
interface_route = Blueprint('interface', __name__)
@interface_route.route('/new_calculate_api', methods=['POST'])
def new_calculate_api_route():
"""新建指标计算接口"""
try:
RouteParamsCheck(req=request.json, params=[
"api_name", "describe", "address", "params", "tags"
]).required()
data = request.json
impl = InterfaceImpl()
result = impl.new_calculate_api(data=data)
return {"info": "新增指标计算接口", "result": result}, 200
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code
@interface_route.route('/check_calculate_api', methods=['POST'])
def check_calculate_api_route():
"""校验指标计算接口"""
try:
RouteParamsCheck(req=request.json, params=["address", "params"]).required()
data = request.json
impl = InterfaceImpl()
result = impl.check_calculate_api(data=data)
return {"info": "校验指标计算接口", "result": result}, 200
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code
@interface_route.route('/search_calculate_api', methods=['POST'])
def search_indicators_api_route():
"""查询指标计算接口"""
try:
RouteParamsCheck(req=request.json, params=["sort", "page_no", "page_size"]).required()
data = request.json
impl = InterfaceImpl()
result = impl.search_calculate_api(data=data)
return {"info": "查询指标计算接口", "result": result}, 200
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code
@interface_route.route('/lock_calculate_api', methods=['GET'])
def lock_calculate_api_route():
"""锁定指标计算接口"""
try:
RouteParamsCheck(request.args, ["aid"]).required()
aid = request.args["aid"]
impl = InterfaceImpl()
result = impl.lock_calculate_api(aid=aid)
return {"info": "锁定指标计算接口", "result": result}, 200
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code
@interface_route.route('/operate_calculate_api', methods=['GET', 'POST'])
def operate_calculate_api_route():
"""查看/编辑接口"""
try:
if request.method == 'GET':
RouteParamsCheck(request.args, ["aid"]).required()
aid = request.args["aid"]
impl = InterfaceImpl()
result = impl.view_calculate_api(aid=aid)
return {"info": "查看指标计算接口", "result": result}, 200
if request.method == 'POST':
RouteParamsCheck(request.json, ["api_id", "api_name", "describe", "address", "params", "tags"]).required()
data = request.json
impl = InterfaceImpl()
result = impl.edit_calculate_api(data=data)
return {"info": "编辑指标计算接口", "result": result}, 200
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code

View File

@ -0,0 +1,21 @@
from flask import Blueprint, request
from Utils.ErrorUtil import APIReturnError
from Utils.RouteUtil import RouteParamsCheck
apiset_route = Blueprint('apiset', __name__)
@apiset_route.route('/interface_test', methods=['GET'])
def interface_test_route():
"""测试调用接口"""
try:
RouteParamsCheck(req=request.args, params=["param1", "param2", "param3"]).required()
args = request.args
param1 = float(args['param1'])
param2 = float(args['param2'])
param3 = float(args['param3'])
answer = (param1 + param2) / param3
return str(answer)
except APIReturnError as e:
return {"info": e.__str__()}, e.status_code

View File

4
app.py
View File

@ -3,6 +3,8 @@ from flask_cors import *
from Modules.Functions.FinIndex.FinIndexRoutes import finance_route
from Modules.Indicators.Tags.TagsRoutes import tags_route
from Modules.Interface.InterfaceRoutes import interface_route
from Modules.Interface.InterfaceSetRoutes import apiset_route
app = Flask(__name__)
CORS(app, supports_credentials=True)
@ -11,6 +13,8 @@ app.config['JSON_SORT_KEYS'] = False
app.register_blueprint(finance_route, url_prefix='/rating/functions/finance')
app.register_blueprint(tags_route, url_prefix='/rating/indicator/tags')
app.register_blueprint(interface_route, url_prefix='/rating/interface')
app.register_blueprint(apiset_route, url_prefix='/rating/interface/apiset')
@app.route('/admin/version')

View File

@ -3,3 +3,5 @@ flask_cors
gevent
pymongo~=3.11.0
Werkzeug~=2.1.2
PyYAML~=6.0
requests~=2.28.0