Example #1
0
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,
	})
Example #2
0
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')
Example #3
0
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,
	)