def problem_view(request, problem_id): problem = get_object_or_404(Problem, pk=problem_id) user = utils.get_user(request) if not user: return HttpResponse('you need to be web_authd') submission = user.get_latest_submission(problem) return render_to_response('problem/view.html', { 'user': utils.get_user(request), 'problem': problem, 'submission': submission, })
def generate(request, problem_id): problem = get_object_or_404(Problem, pk=problem_id) user = utils.get_user(request) if not user: return HttpResponse('you need to be web_authd') # TODO make sure user is staff p_cpp_s = render_to_string('cpp/pre-soln.cpp', {'problem': problem}) print p_cpp_s p_dir = cppbat.core.settings.PROBLEM_ROOT_DIR + '/' + problem_id if not os.path.exists(p_dir): os.mkdir(p_dir) os.chdir(p_dir) # write to .cpp p_file_name = 'pre-soln.cpp' p_file = open(p_file_name, 'w') p_file.write(p_cpp_s) p_file.close() # compile to .o proc = popen2.Popen4(['g++', '-c', p_file_name, '-I', cppbat.core.settings.INCLUDE_DIR]) ret = proc.wait() if ret != 0: return HttpResponse('compile error!' + proc.fromchild.read()) # TODO mark problem as ready return HttpResponse('hi')
def go(request, problem_id): problem = get_object_or_404(Problem, pk=problem_id) user = utils.get_user(request) if not user: return HttpResponse('you need to be web_authd') last_sub = user.get_latest_submission(problem) try: variant = request.POST['variant'] code = request.POST['code'] except (KeyError): return HttpResponse('Not correct stuff in post') # TODO if not last_sub or code != last_sub.code: sub = Submission( user = user, problem = problem, code = code, ) sub.save() else: sub = last_sub # try to compile the code cr = Compiler.compile(problem, code) if len(cr['errors']) != 0: return utils.render_to_variant(request, variant, html_template = 'problem/compile.html', html_obj_name = 'compile_result', obj = cr, ) # try to execute the code # TODO delete file? # TODO save execute result? # if so, trim result to 512 or whatever limit chars er = Executor.execute(cr['file'], problem.test_cases()) return utils.render_to_variant(request, variant, html_template = 'problem/execute.html', html_obj_name = 'execute_result', obj = er, )