app.py 2.5 KB

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