app.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # encoding: utf8
  2. import os
  3. import shutil
  4. import time
  5. from flask import Flask, request, json
  6. import judgement
  7. import logging
  8. app = Flask(__name__)
  9. logging.basicConfig(level=logging.DEBUG)
  10. @app.route('/')
  11. def hello_world():
  12. return 'Hello World!'
  13. '''
  14. code: string 源代码
  15. language: string 编程语言{cpp,java,c,python}
  16. timeLimit: int 时间限制
  17. memoryLimit: int 内存限制
  18. inputOutputMapping: hashmap 输入输出对
  19. '''
  20. @app.route('/api/judge', methods=['POST'])
  21. def judge():
  22. start = time.time()
  23. data = json.loads(request.get_data(as_text=True))
  24. code = data['code']
  25. language = data['language']
  26. time_limit = int(data['timeLimit'])
  27. memory_limit = int(data['memoryLimit'])
  28. input_list = data['inputList']
  29. output_list = data['outputList']
  30. if len(input_list) != len(output_list):
  31. return {"result_list": [{'result': "System Error"}],
  32. 'message': 'test data incompleted'}
  33. td_total = len(input_list)
  34. save_test_cases(input_list, output_list, td_total)
  35. src_file = save_code(language, code)
  36. rst = judgement.judge(src_file, 'testcases', td_total, time_limit, memory_limit, language)
  37. os.remove(src_file)
  38. shutil.rmtree('testcases')
  39. app.logger.info(time.time()-start)
  40. return rst
  41. def save_test_cases(input_list,output_list, td_total):
  42. if os.path.exists('testcases'):
  43. shutil.rmtree('testcases')
  44. os.mkdir('testcases')
  45. for i in range(0, td_total):
  46. in_file = open('testcases/' + str(i) + '.in', 'w')
  47. in_file.write(input_list[i])
  48. out_file = open('testcases/' + str(i) + '.out', 'w')
  49. out_file.write(output_list[i])
  50. def save_code(language, code):
  51. src_file = None
  52. if language == 'c':
  53. src_file = open('main.c', 'w')
  54. elif language == 'cpp':
  55. src_file = open('main.cpp', 'w')
  56. elif language == 'java':
  57. src_file = open('Main.java', 'w')
  58. elif language == 'python':
  59. src_file = open('main.py', 'w')
  60. print(src_file.name)
  61. src_file.write(code)
  62. return src_file.name
  63. if __name__ == '__main__':
  64. app.run()