dupPRdetect/app.py

123 lines
3.5 KiB
Python

from flask import Flask, render_template, request
import detect_gitee, detect_trustie
import re
import operator
import redis
app = Flask(__name__)
@app.route('/')
def input():
return render_template('input.html')
def parse_gitee(src_url, dst_url, error):
src_pr_url = src_url.replace("https://gitee.com/", "https://gitee.com/api/v5/repos/")
dst_pr_url = dst_url.replace("https://gitee.com/", "https://gitee.com/api/v5/repos/")
pattern = re.compile('https://gitee.com/.*/.*/pulls/[0-9]*')
if pattern.search(src_url) is None or pattern.search(dst_url) is None:
error = 1
return locals()
src_w = src_pr_url.split("/")
dst_w = dst_pr_url.split("/")
src_short_url = src_w[6] + "/" + src_w[7] + "/" + src_w[9]
dst_short_url = dst_w[6] + "/" + dst_w[7] + "/" + dst_w[9]
txt_score, file_score = detect_gitee.main(src_pr_url, dst_pr_url)
if txt_score is None:
error = 1
return locals()
else:
error = 0
result, final_score = detect_gitee.final_decision(txt_score, file_score)
txt_score = '%.1f' % (txt_score * 100)
file_score = '%.1f' % (file_score * 100)
final_score_1 = '%.1f' % (final_score * 100)
final_score_p = int(final_score * 100)
src_pr_name = src_w[7] + "/" + src_w[9]
dst_pr_name = dst_w[7] + "/" + dst_w[9]
return locals()
def url_2_api_tru(url):
l = url.split("/")
l[3] = "api"
l[7] = l[7] + ".json"
api = "/".join(l[:8])
return api
def url_2_repo(url):
l = url.split("/")
return l[3]+"/"+l[4], l[6]
def parse_trustie(PR_url, error):
url_head = PR_url.split("/")
pattern = re.compile(url_head[0]+'//'+url_head[2]+'/.*/.*/pulls/[0-9]*')
result_s = re.search(pattern, PR_url)
# result_d = re.search(pattern, dst_url)
if result_s == None:
error = 1
return locals()
repo_info, pr_num = url_2_repo(PR_url)
scores = detect_trustie.main(repo_info, pr_num, url_head)
scores = sorted(scores, key=operator.itemgetter("avg_score"), reverse=True)
if scores is None:
error = 1
return locals()
else:
pass
return locals()
@app.route('/result',methods = ['POST', 'GET'])
def output():
if request.method == "GET":
result = request
PR_url = request.args["SrcPR"]
error = 0
if PR_url.split("/")[2] == "forgeplus.trustie.net" or \
PR_url.split("/")[2] == "120.132.31.109:8080" or \
PR_url.split("/")[2] == "code.mulanos.cn":
print("trustie")
re = parse_trustie(PR_url, error)
if re["error"] == 1:
return render_template("error.html", result=locals())
else:
return render_template("result_table.html", result=locals())
if request.method == 'POST':
result = request.form
PR_url = result['SrcPR']
# dst_url = result['DstPR']
error = 0
if PR_url.split("/")[2] == "forgeplus.trustie.net" or\
PR_url.split("/")[2] == "120.132.31.109:8080" or \
PR_url.split("/")[2] == "code.mulanos.cn" :
print("trustie")
re = parse_trustie(PR_url, error)
if re["error"] == 1:
return render_template("error.html", result=locals())
else:
return render_template("result_table.html", result=locals())
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)