# encoding: utf8 import os import shutil import time from flask import Flask, request, json import judgement import logging app = Flask(__name__) logging.basicConfig(level=logging.DEBUG) @app.route('/') def hello_world(): return 'Hello World!' ''' code: string 源代码 language: string 编程语言{cpp,java,c,python} timeLimit: int 时间限制 memoryLimit: int 内存限制 inputOutputMapping: hashmap 输入输出对 ''' @app.route('/api/judge', methods=['POST']) def judge(): start = time.time() requestData = request.get_data(as_text=True) data = json.loads(requestData) code = data['code'] language = data['language'] cid = str(data['commitId']) time_limit = int(data['timeLimit']) memory_limit = int(data['memoryLimit']) input_list = data['inputList'] output_list = data['outputList'] if len(input_list) != len(output_list): return {"result_list": [{'result': "System Error"}], 'message': 'test data incompleted'} td_total = len(input_list) # save_test_cases(input_list, output_list, td_total) # src_file = save_code(language, code) save_test_cases_by_cid(cid, input_list, output_list, td_total) src_file = save_code_by_cid(cid, language, code) rst = judgement.judge(src_file, 'testcases-'+cid, td_total, time_limit, memory_limit, language) os.remove(src_file) shutil.rmtree('main-'+cid) shutil.rmtree('testcases-'+cid) app.logger.info(time.time() - start) return rst def save_test_cases_by_cid(cid, input_list, output_list, td_total): dir_name = 'testcases-' + cid if os.path.exists(dir_name): shutil.rmtree(dir_name) os.mkdir(dir_name) for i in range(0, td_total): in_file = open(dir_name + '/' + str(i) + '.in', 'w') in_file.write(input_list[i]) out_file = open(dir_name + '/' + str(i) + '.out', 'w') out_file.write(output_list[i]) def save_code_by_cid(cid, language, code): dir_name = 'main-' + cid if os.path.exists(dir_name): shutil.rmtree(dir_name) os.mkdir(dir_name) src_file = None if language == 'c': src_file = open(dir_name+'/'+'main.c', 'w') elif language == 'cpp': src_file = open(dir_name+'/'+'main.cpp', 'w') elif language == 'java': src_file = open(dir_name+'/'+'Main.java', 'w') elif language == 'python': src_file = open(dir_name+'/'+'main.py', 'w') app.logger.info(src_file.name) src_file.write(code) return src_file.name def save_test_cases(input_list, output_list, td_total): if os.path.exists('testcases'): shutil.rmtree('testcases') os.mkdir('testcases') for i in range(0, td_total): in_file = open('testcases/' + str(i) + '.in', 'w') in_file.write(input_list[i]) out_file = open('testcases/' + str(i) + '.out', 'w') out_file.write(output_list[i]) def save_code(language, code): src_file = None if language == 'c': src_file = open('main.c', 'w') elif language == 'cpp': src_file = open('main.cpp', 'w') elif language == 'java': src_file = open('Main.java', 'w') elif language == 'python': src_file = open('main.py', 'w') print(src_file.name) src_file.write(code) return src_file.name if __name__ == '__main__': app.run()