import os from quart import jsonify, request,session,flash,redirect from . import api from web.common.utils import login_required from core.DBManager import mDBM from core.Upload_file import allowed_file,check_file,updata_model from myutils.ConfigManager import myCongif from werkzeug.utils import secure_filename @api.route('/model/list',methods=['GET']) @login_required async def model_list(): #获取算法列表 strsql = "select ID,model_name,version,duration_time,proportion from model;" datas = mDBM.do_select(strsql) reMsg = [{"ID":data[0],"name":data[1],"version":data[2],"duration_time":data[3], "proportion":data[4]} for data in datas] return jsonify(reMsg) @api.route('/model/upload',methods=['POST']) @login_required async def model_upload(): #上传算法文件--需要进行文件校验 form = await request.form model_name = form['model_name'] files = await request.files if 'file' not in files: flash('参数错误') return redirect(request.url) file = files['file'] if file.filename == '': flash('没有选择文件') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file_path = os.path.join(myCongif.get_data('UPLOAD_FOLDER'), filename) await file.save(file_path) if check_file(file_path,2): #itype--2 是算法模型升级 strsql = (f"insert into upgrade (itype,filepath,model_name) values (2,'{file_path}','{model_name}')" f" on conflict(itype,model_name) do update set filepath=excluded.filepath;") ret = mDBM.do_sql(strsql) # session['model'] = file_path if ret: strsql = f"select id from upgrade where itype=2 and model_name='{model_name}';" data=mDBM.do_select(strsql,1) reStatus = data[0] reMsg = "升级包上传成功" else: reStatus = 0 reMsg = "升级包上传失败" return jsonify({'status': reStatus, 'msg': reMsg}) else: flash('升级包不合法,请重新上传') # return redirect(url_for('main.get_html', html='系统管理.html')) return redirect(request.url) else: flash('只允许上传zip文件') return redirect(request.url) @api.route('/model/add',methods=['POST']) @login_required async def model_add(): #新增算法,需要先上传算法文件 model_name = (await request.form)['model_name'] upgrade_id = (await request.form)['upgrade_id'] #升级文件ID ###---需要根据升级包获取模型文件路径,算法版本号等信息,若根据upgrade_id获取不了对应的信息,则返回报错 ### strsql = f"select ID from model where model_name='{model_name}';" data = mDBM.do_select(strsql,1) if data: reStatus = 0 reMsg = "算法名称重复,请修改!" else: strsql = f"insert into model (model_name) values ('{model_name}');" #还有参数未写全 ret = mDBM.do_sql(strsql) if ret: reStatus = 1 reMsg = "新增算法成功!" else: reStatus = 0 reMsg = "新增算法失败,请联系技术支持!" return jsonify({'status': reStatus, 'msg': reMsg}) @api.route('/model/upgrade',methods=['POST']) @login_required async def model_upgrade(): #升级算法,需要先上传算法文件 return jsonify(1) @api.route('/model/config',methods=['GET']) @login_required async def model_config(): #获取算法的配置信息 --- list已经获取 ID = request.args.get('ID') strsql = f"select model_name,version,duration_time,proportion from model where ID={ID};" data = mDBM.do_select(strsql,1) reMsg = {"model_name":data[0],"version":data[1],"duration_time":data[2],"proportion":data[3]} return jsonify(reMsg) @api.route('/model/changecnf',methods=['POST']) @login_required async def model_config_change(): #修改算法的配置信息 ID = (await request.form)['ID'] duration_time = (await request.form)['duration_time'] proportion = float((await request.form)['proportion']) if proportion>0 and proportion < 1: strsql = f"update model set duration_time='{duration_time}',proportion='{proportion}' where ID={ID};" ret = mDBM.do_sql(strsql) if ret: reStatus = 1 reMsg = "修复算法配置成功" else: reStatus = 0 reMsg = "修复算法配置失败" else: reStatus = 0 reMsg = "占比需要为大于0,小于1的值" return jsonify({'status': reStatus, 'msg': reMsg})