summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyc/grader/views.py19
-rw-r--r--pyc/templates/lab.html8
-rw-r--r--pyc/templates/submission.html6
-rw-r--r--pyc/urls.py1
4 files changed, 30 insertions, 4 deletions
diff --git a/pyc/grader/views.py b/pyc/grader/views.py
index 02d5ce4..8718c5e 100644
--- a/pyc/grader/views.py
+++ b/pyc/grader/views.py
@@ -1,8 +1,12 @@
from django.shortcuts import render_to_response
from django.template import RequestContext
+from django.contrib.auth.decorators import login_required, user_passes_test
+from django.conf import settings
from grader.models import Lab, Submission
+import os
+
def index(request):
return render_to_response('index.html', {
'labs' : Lab.objects.all(),
@@ -25,15 +29,13 @@ def lab(request, lab_id):
return render_to_response('lab.html', {
'lab' : lab,
'submissions' : submissions,
+ 'staff' : request.user.is_staff
})
-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
- from django.conf import settings
- import os
from datetime import datetime
if request.method == 'POST':
@@ -74,6 +76,17 @@ def submit(request, lab_id):
'lab_id' : lab_id,
}, context_instance=RequestContext(request))
+@user_passes_test(lambda u: u.is_staff)
+def submission(request, lab_id, user_id):
+ submission = Submission.objects.get(lab__exact=lab_id, user__exact=user_id)
+ filepath = os.path.join(settings.MEDIA_ROOT, submission.file.name)
+ f = open(filepath, 'r')
+ code = f.read()
+ f.close()
+ return render_to_response('submission.html', {
+ 'code' : code,
+ })
+
def grade(file, id):
import subprocess
from os import path
diff --git a/pyc/templates/lab.html b/pyc/templates/lab.html
index 916f95f..9586558 100644
--- a/pyc/templates/lab.html
+++ b/pyc/templates/lab.html
@@ -13,7 +13,13 @@ Lab {{ lab.id }} due {{ lab.due }} at 11:59:59 PDT (UTC-7):
{% for s in submissions %}
<tr>
<td>{{ s.user }}</td>
- <td>{{ s.grade }}</td>
+ <td>
+ {% if staff %}
+ <a href="/submission/{{ lab.id }}/{{ s.user.id }}/">{{ s.grade }}</a>
+ {% else %}
+ {{ s.grade }}
+ {% endif %}
+ </td>
<td>{{ s.time }}</td>
</tr>
{% endfor %}
diff --git a/pyc/templates/submission.html b/pyc/templates/submission.html
new file mode 100644
index 0000000..66ce94a
--- /dev/null
+++ b/pyc/templates/submission.html
@@ -0,0 +1,6 @@
+{% extends 'base.html' %}
+{% block body %}
+<pre>
+{{ code }}
+</pre>
+{% endblock %}
diff --git a/pyc/urls.py b/pyc/urls.py
index eaa5026..899689b 100644
--- a/pyc/urls.py
+++ b/pyc/urls.py
@@ -7,6 +7,7 @@ urlpatterns = patterns('',
url(r'^$', 'grader.views.index', name='index'),
url(r'^lab/(?P<lab_id>\d+)/$', 'grader.views.lab'),
url(r'^submit/(?P<lab_id>\d+)/$', 'grader.views.submit'),
+ url(r'^submission/(?P<lab_id>\d+)/(?P<user_id>\d+)/$', 'grader.views.submission'),
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),