app.py 1.9 KB

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