summaryrefslogtreecommitdiffstats
path: root/pyc/grader/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyc/grader/views.py')
-rw-r--r--pyc/grader/views.py22
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()