diff options
Diffstat (limited to 'pyc/grader/views.py')
-rw-r--r-- | pyc/grader/views.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/pyc/grader/views.py b/pyc/grader/views.py index 4f81309..df7e0b9 100644 --- a/pyc/grader/views.py +++ b/pyc/grader/views.py @@ -21,20 +21,38 @@ from django.contrib.auth.decorators import login_required @login_required def submit(request, lab_id): from django.http import HttpResponseRedirect + from django.db import IntegrityError if request.method == 'POST': form = SubmissionForm(request.POST, request.FILES) if form.is_valid(): labobj = Lab.objects.get(pk=lab_id) rfile = request.FILES['file'] submission = Submission(lab=labobj, user=request.user, file=rfile) - submission.save() - return HttpResponseRedirect("/lab/%s/" % lab_id) + try: + submission.save() + except IntegrityError: + pass + score, err = grade(submission.file.name, lab_id) + return render_to_response('submit.html', { + 'err' : err, + 'score' : score, + 'form' : form, + }, context_instance=RequestContext(request)) else: form = SubmissionForm() return render_to_response('submit.html', { 'form' : form, }, context_instance=RequestContext(request)) +def grade(file, id): + import subprocess + from os import path + graderfile = "lab%s.py" % id + graderdir = path.dirname(__file__) + '/../../graders/' + grader = graderdir + graderfile + p = subprocess.Popen([grader, file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return p.communicate() + from django import forms class SubmissionForm(forms.Form): file = forms.FileField() |