From 030d2d2d47482bee7aa07cbc40dcde0214a7da56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AD=A6=E6=9E=97=E9=BE=99?= <10182100242@stu.ecnu.edu.cn>
Date: Thu, 28 Jan 2021 16:30:50 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?=
=?UTF-8?q?=20'be'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
be/app.py | 85 ++++++++++++++++-------------
be/my_check_logic_error.py | 42 +++++++++++++++
be/mysubmit.py | 127 ++++++++++++++++++++++++++++++++++++++++++++
be/testcase.py | 129 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 345 insertions(+), 38 deletions(-)
create mode 100644 be/my_check_logic_error.py
create mode 100644 be/mysubmit.py
create mode 100644 be/testcase.py
diff --git a/be/app.py b/be/app.py
index fee36df..2abf249 100644
--- a/be/app.py
+++ b/be/app.py
@@ -4,16 +4,19 @@ from flask import request
import json
import pymysql
import sys
+import mysubmit
+import testcase
+import my_check_logic_error
sys.path.append('../')
from PIPE.main import PIPEModel
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
-db = pymysql.connect(host='127.0.0.1',
+db = pymysql.connect(host='192.168.0.89',
port=3306,
- user='shuishan',
- password='Shuishan@2020',
+ user='root',
+ password='2020yunjisuan!',
db='shuishan',
charset='utf8')
@@ -41,54 +44,58 @@ def get_problem_description(_id: str):
"from problem where id = %d" % int(_id))
des = cursor.fetchone()
# print(des)
- title = '
%s. %s
' % (_id, des[0])
- description = 'Description
%s
' % des[1]
- input_description = 'Input Description
%s
' \
+ title = '%s. %s
' % (_id, des[0])
+ description = 'Description
%s
' % des[1]
+ input_description = 'Input Description
%s
' \
% des[2]
- output_description = 'Output Description
%s
' \
+ output_description = 'Output Description
%s
' \
% des[3]
samples = json.loads(des[-1].replace("\n", "\\n"))
samples_html = ''
for s in samples:
- _input = s["input"].strip().replace(" ", " ").replace("\n", "
")
- _output = s["output"].strip().replace(" ", " ").replace("\n", "
")
- # _input = s["input"].strip().replace(" ", " ")
- # _output = s["output"].strip().replace(" ", " ")
- stra = ''
- strb = '
'
- strc = '
Input
'
- strd = '
'
- stre = '
Output
'
- strf = '
'
- strg = '
'
- strh = '
' + _input + '
'
- stri = '
'
- strj = '
' + _output + '
'
- strk = '
'
- strl = '
'
- samples_html = samples_html + stra + strb + strc + strd + stre + strf + strg + strh + stri + strj + strk + strl
- return title + description + input_description + output_description + samples_html, 200
+ _input = s["input"].strip().replace(" ", " ").replace("\n", "
")
+ _output = s["output"].strip().replace(" ", " ").replace("\n", "
")
+ str1 = ''
+ str2 = '
'
+ str3 = '
Input
'
+ str4 = '
' + _input + '
'
+ str5 = '
'
+ str6 = '
'
+ str7 = '
Output
'
+ str8 = '
' + _output + '
'
+ str9 = '
'
+ str0 = '
'
+ samples_html = samples_html + str1 + str2 + str3 + str4 + str5 + str6 + str7 + str8 + str9 + str0
+ return title + description + input_description + output_description + samples_html, 200
@app.route('/case_test/', methods=['POST'])
def case_test_():
pid: str = request.json.get("pid")
code: str = request.json.get("code")
- print(pid)
- print(code)
- return 'pass', 200
+ with open('wulin.txt', 'w', encoding='utf-8', newline='') as f:
+ f.write(pid)
+ f.close()
+ results = testcase.submit_handler(code, pid, 'C')
+
+
+
+ return results, 200
@app.route('/check-logic-error/', methods=['POST'])
def check_logic_error():
pid: str = request.json.get("pid")
code: str = request.json.get("code")
- print(pid)
- print(code)
- model = PIPEModel()
- model.load_savedModel()
- answer = model.predict_code(code=code)
- del model
+ # print(type(code))
+ # model = PIPEModel()
+ # model.load_savedModel('./PIPE/training/C2AE_model/cp-0015.ckpt')
+ # answer = model.predict_code(code=code)
+ # del model
+ # with open('wulin3.txt', 'w', encoding='utf-8', newline='') as f: # 设置文件对象
+ # f.write(answer) # 将字符串写入文件中
+ # f.close()
+ answer = my_check_logic_error.check_logic_error()
# results = 'check_logic_error'
return answer, 200
@@ -97,12 +104,14 @@ def check_logic_error():
def submit():
pid: str = request.json.get("pid")
code: str = request.json.get("code")
- print(pid)
- print(code)
+ with open('wulin2.txt', 'w', encoding='utf-8', newline='') as f:
+ f.write(pid)
+ f.close()
+ results = mysubmit.submit_handler(code, pid, 'C')
+
# results = check_logic_error(pid, code)
- results = 'submit'
return results, 200
if __name__ == '__main__':
- app.run()
+ app.run(host='0.0.0.0')
diff --git a/be/my_check_logic_error.py b/be/my_check_logic_error.py
new file mode 100644
index 0000000..60bccbd
--- /dev/null
+++ b/be/my_check_logic_error.py
@@ -0,0 +1,42 @@
+from urllib import parse
+import requests
+# 必须submit/test之后才能checklogic error (test即一次submit)
+# 从submit_id.txt中找到submit_id,填入referer
+# 从data.c找到代码,编码之后,填入url
+# get请求
+# 获得返回结果
+def check_logic_error() :
+ file = open('data.c', mode='r', encoding='utf-8', newline='')
+ code = file.read()
+ file.close()
+
+ code = parse.quote(code)
+ print(code)
+ url = "http://jf.shuishan.net.cn/api/code2vec?code=" + code
+ print(url)
+ file = open('submit_id.txt', mode='r', encoding='utf-8', newline='')
+ submit_id = file.read()
+ file.close()
+
+ payload={}
+ headers = {
+ 'Host': 'jf.shuishan.net.cn',
+ 'Connection': 'keep-alive',
+ 'Accept': 'application/json, text/plain, */*',
+ 'X-CSRFToken': '6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
+ 'Content-Type': 'application/json;charset=utf-8',
+ 'Referer': 'http://jf.shuishan.net.cn/status/'+ submit_id,
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Cookie': '_ga=GA1.3.1580759526.1611565238; _gid=GA1.3.412268444.1611565238; csrftoken=6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml'
+ }
+
+ response = requests.request("GET", url, headers=headers, data=payload)
+
+ print(response.text)
+ with open('check_logic_error.txt', 'w', encoding='utf-8', newline='') as f: # 设置文件对象
+ f.write(response.text) # 将字符串写入文件中
+ f.close()
+ return response.text
+
diff --git a/be/mysubmit.py b/be/mysubmit.py
new file mode 100644
index 0000000..f599a5c
--- /dev/null
+++ b/be/mysubmit.py
@@ -0,0 +1,127 @@
+import requests
+import re
+import time
+def submit(payload) :
+
+ url = "http://jf.shuishan.net.cn/api/submission"
+ payload = payload
+ headers = {
+ 'Host': 'jf.shuishan.net.cn',
+ 'Connection': 'keep-alive',
+ 'Content-Length': '101',
+ 'Accept': 'application/json, text/plain, */*',
+ 'X-CSRFToken': '6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
+ 'Chrome/88.0.4324.104 Safari/537.36',
+ 'Content-Type': 'application/json;charset=UTF-8',
+ 'Origin': 'http://jf.shuishan.net.cn',
+ 'Referer': 'http://jf.shuishan.net.cn/problem/1-1',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Cookie': '_ga=GA1.3.1580759526.1611565238; _gid=GA1.3.412268444.1611565238; csrftoken=6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml; _gat=1; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml'
+ }
+
+ response = requests.request("POST", url, headers=headers, data=payload)
+
+ ## print(response.text)
+
+ res = response.text
+
+ submit_id = re.findall(r'"submission_id": "([^"]+)"',res)
+ submit_id = submit_id[0]
+ with open('submit_id.txt', 'w', encoding='utf-8', newline='') as f: # 设置文件对象
+ f.write(submit_id) # 将字符串写入文件中
+ f.close()
+
+ #获取judge信息
+ url = "http://jf.shuishan.net.cn/api/submission?id="+str(submit_id)
+ #url = "http://jf.shuishan.net.cn/api/submission?id=2610feac243108d927e8760f24b808c6"
+ payload={}
+ headers = {
+ 'Host': 'jf.shuishan.net.cn',
+ 'Connection': 'keep-alive',
+ 'Accept': 'application/json, text/plain, */*',
+ 'X-CSRFToken': '6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
+ 'Content-Type': 'application/json;charset=utf-8',
+ 'Referer': 'http://jf.shuishan.net.cn/problem/1-1',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Cookie': '_ga=GA1.3.1580759526.1611565238; _gid=GA1.3.412268444.1611565238; csrftoken=6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml; _gat=1; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml'
+ }
+ #等待judgeserver出结果
+ time.sleep(0.5)
+ response = requests.request("GET", url, headers=headers, data=payload)
+
+ ## print(response.text)
+ res = response.text
+ result_code = re.findall(r'"result": ([^"]+),',res)
+ error_code = re.findall(r'"error": ([^"]+),',res)
+ result_code = result_code[0]
+ error_code = error_code[0]
+ ## print(result_code)
+ ## print(error_code)
+
+ if(error_code != '0' and error_code != "null"):
+ print("ERROR_CODE")
+ return "ERROR_CODE"
+
+ elif(result_code == '0'):
+ print("ACCEPTED")
+ return "ACCEPTED"
+ elif(result_code == '1'):
+ print("CPU_TIME_LIMIT_EXCEEDED")
+ return "CPU_TIME_LIMIT_EXCEEDED"
+ elif(result_code == '2'):
+ print("REAL_TIME_LIMIT_EXCEEDED")
+ return "REAL_TIME_LIMIT_EXCEEDED"
+ elif(result_code == '3'):
+ print("MEMORY_LIMIT_EXCEEDED")
+ return "MEMORY_LIMIT_EXCEEDED"
+ elif(result_code == '4'):
+ print("RUNTIME_ERROR")
+ return "RUNTIME_ERROR"
+ elif (result_code == '5'):
+ print("SYSTEM_ERROR")
+ return "SYSTEM_ERROR"
+ else:
+ print("WRONG_ANSWER")
+ return "WRONG_ANSWER"
+ #写入一个输出文件
+
+
+def submit_handler(code, problem_id, language_type):
+
+ with open('data.c', 'w', encoding='utf-8', newline='') as f:
+ f.write(code)
+ f.close()
+ file = open('data.c', mode='r', encoding='utf-8', newline='')
+ code = file.readlines()
+ file.close()
+ code = ''.join([i.replace(' ', r'\t').replace('"', r'\"').rstrip() + r'\n' for i in code])
+ ## print(code)
+ # payload="{\"problem_id\":1,\"language\":\"C\",\"code\":\"# include \\nint main()\\n{\\n\\tint a;\\n\\treturn 0;\\n}\"}"
+ # print(payload)
+ payload = "{\"problem_id\":" + problem_id + ",\"language\":\"" + language_type + "\",\"code\":\"" + code + "\"}"
+ ## print(payload)
+
+ results = submit(payload)
+ return results
+
+# 输入文件名,题号,语言种类
+# results = submit_handler('1.c','1','C')
+# print(results)
+
+
+ #获取逻辑错误信息
+
+
+
+
+
+
+
+
+
+
+
diff --git a/be/testcase.py b/be/testcase.py
new file mode 100644
index 0000000..a69a477
--- /dev/null
+++ b/be/testcase.py
@@ -0,0 +1,129 @@
+import requests
+import re
+import time
+def submit(payload) :
+
+ url = "http://jf.shuishan.net.cn/api/submission"
+ payload = payload
+ headers = {
+ 'Host': 'jf.shuishan.net.cn',
+ 'Connection': 'keep-alive',
+ 'Content-Length': '101',
+ 'Accept': 'application/json, text/plain, */*',
+ 'X-CSRFToken': '6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
+ 'Chrome/88.0.4324.104 Safari/537.36',
+ 'Content-Type': 'application/json;charset=UTF-8',
+ 'Origin': 'http://jf.shuishan.net.cn',
+ 'Referer': 'http://jf.shuishan.net.cn/problem/1-1',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Cookie': '_ga=GA1.3.1580759526.1611565238; _gid=GA1.3.412268444.1611565238; csrftoken=6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml; _gat=1; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml'
+ }
+
+ response = requests.request("POST", url, headers=headers, data=payload)
+
+ ## print(response.text)
+
+ res = response.text
+
+ submit_id = re.findall(r'"submission_id": "([^"]+)"',res)
+ submit_id = submit_id[0]
+ with open('submit_id.txt', 'w', encoding='utf-8', newline='') as f: # 设置文件对象
+ f.write(submit_id) # 将字符串写入文件中
+ f.close()
+ ## print(submit_id)
+
+ #获取judge信息
+ url = "http://jf.shuishan.net.cn/api/submission?id="+str(submit_id)
+ #url = "http://jf.shuishan.net.cn/api/submission?id=2610feac243108d927e8760f24b808c6"
+ payload={}
+ headers = {
+ 'Host': 'jf.shuishan.net.cn',
+ 'Connection': 'keep-alive',
+ 'Accept': 'application/json, text/plain, */*',
+ 'X-CSRFToken': '6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
+ 'Content-Type': 'application/json;charset=utf-8',
+ 'Referer': 'http://jf.shuishan.net.cn/problem/1-1',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Cookie': '_ga=GA1.3.1580759526.1611565238; _gid=GA1.3.412268444.1611565238; csrftoken=6eM4EeOzqLJFt6xfkbSMQD1e89qF28Lgg5aPIbB1k7Hvu6UFVzzb2d1u5lQG37p6; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml; _gat=1; sessionid=0e47tlihcjyqr3oynpx5pq9xpf7jtqml'
+ }
+ #等待judgeserver出结果
+ time.sleep(0.5)
+ response = requests.request("GET", url, headers=headers, data=payload)
+
+ print(response.text)
+ res = response.text
+ result_code = re.findall(r'"result": ([^"]+),',res)
+ error_code = re.findall(r'"error": ([^"]+),',res)
+ result_code = result_code[1]
+ error_code = error_code[0]
+ print(result_code)
+ print(error_code)
+
+ if(error_code != '0' and error_code != "null"):
+ print("ERROR_CODE")
+ return "ERROR_CODE"
+
+ elif(result_code == '0'):
+ print("SUCCESS")
+ return "SUCCESS"
+ elif(result_code == '1'):
+ print("CPU_TIME_LIMIT_EXCEEDED")
+ return "CPU_TIME_LIMIT_EXCEEDED"
+ elif(result_code == '2'):
+ print("REAL_TIME_LIMIT_EXCEEDED")
+ return "REAL_TIME_LIMIT_EXCEEDED"
+ elif(result_code == '3'):
+ print("MEMORY_LIMIT_EXCEEDED")
+ return "MEMORY_LIMIT_EXCEEDED"
+ elif(result_code == '4'):
+ print("RUNTIME_ERROR")
+ return "RUNTIME_ERROR"
+ elif (result_code == '5'):
+ print("SYSTEM_ERROR")
+ return "SYSTEM_ERROR"
+ else:
+ print("WRONG_ANSWER")
+ return "WRONG_ANSWER"
+ #写入一个输出文件
+
+
+def submit_handler(code, problem_id, language_type):
+
+ with open('data.c', 'w', encoding='utf-8', newline='') as f:
+ f.write(code)
+ f.close()
+ file = open('data.c', mode='r', encoding='utf-8', newline='')
+ code = file.readlines()
+ file.close()
+ code = ''.join([i.replace(' ', r'\t').replace('"', r'\"').rstrip() + r'\n' for i in code])
+ ## print(code)
+ # payload="{\"problem_id\":1,\"language\":\"C\",\"code\":\"# include \\nint main()\\n{\\n\\tint a;\\n\\treturn 0;\\n}\"}"
+ # print(payload)
+ payload = "{\"problem_id\":" + problem_id + ",\"language\":\"" + language_type + "\",\"code\":\"" + code + "\"}"
+ ## print(payload)
+
+ results = submit(payload)
+ return results
+
+# 输入文件名,题号,语言种类
+#results = submit_handler('22.c','22','C')
+#print(results)
+
+
+
+ #获取逻辑错误信息
+
+
+
+
+
+
+
+
+
+
+