67 lines
2.8 KiB
Plaintext
67 lines
2.8 KiB
Plaintext
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)
|