uapi/wwwroot/api/copy_uapi.dspy

67 lines
2.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

ns = params_kw.copy()
source_upappid = ns.get('source_upappid', '')
target_upappid = ns.get('target_upappid', '')
if not source_upappid:
return json.dumps({'widgettype':'Error','options':{'text':'缺少源上位系统ID'}}, ensure_ascii=False)
if not target_upappid:
return json.dumps({'widgettype':'Error','options':{'text':'请选择目标上位系统'}}, ensure_ascii=False)
if source_upappid == target_upappid:
return json.dumps({'widgettype':'Error','options':{'text':'源和目标上位系统不能相同'}}, ensure_ascii=False)
db = DBPools()
dbname = get_module_dbname('uapi')
async with db.sqlorContext(dbname) as sor:
# 查询源上位系统的所有API
sql = 'select * from uapi where upappid = ${upappid}$'
source_uapis = await sor.sqlExe(sql, {'upappid': source_upappid})
if not source_uapis:
return json.dumps({'widgettype':'Error','options':{'text':'源上位系统中没有API记录'}}, ensure_ascii=False)
# 查询目标上位系统已有的API名称
existing_sql = 'select name from uapi where upappid = ${upappid}$'
existing_recs = await sor.sqlExe(existing_sql, {'upappid': target_upappid})
existing_names = {r['name'] for r in existing_recs}
copied = 0
skipped = 0
for api in source_uapis:
if api['name'] in existing_names:
skipped += 1
continue
new_id = getID()
await sor.sqlExe(
'''insert into uapi (id,upappid,name,title,description,need_auth,stream,path,httpmethod,chunk_match,headers,params,data,response,ioid,callbackurl)
values (${id}$,${upappid}$,${name}$,${title}$,${description}$,${need_auth}$,${stream}$,${path}$,${httpmethod}$,${chunk_match}$,${headers}$,${params}$,${data}$,${response}$,${ioid}$,${callbackurl}$)''',
{
'id': new_id,
'upappid': target_upappid,
'name': api.get('name', ''),
'title': api.get('title', ''),
'description': api.get('description', ''),
'need_auth': api.get('need_auth', '0'),
'stream': api.get('stream', ''),
'path': api.get('path', ''),
'httpmethod': api.get('httpmethod', 'GET'),
'chunk_match': api.get('chunk_match', ''),
'headers': api.get('headers', ''),
'params': api.get('params', ''),
'data': api.get('data', ''),
'response': api.get('response', ''),
'ioid': api.get('ioid', ''),
'callbackurl': api.get('callbackurl', '')
}
)
copied += 1
msg = f'成功复制 {copied} 条API记录'
if skipped > 0:
msg += f',跳过 {skipped} 条API名称已存在'
return json.dumps({'widgettype':'Message','options':{'text':msg}}, ensure_ascii=False)