diff --git a/be/app.py b/be/app.py index fee36df..eb9e897 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') @@ -74,21 +77,29 @@ def get_problem_description(_id: str): 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,10 +108,12 @@ 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 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) + + + + #获取逻辑错误信息 + + + + + + + + + + +