Commit ef220715 by Will Daly

Merge pull request #58 from edx/will/fix-preview-errors

Will/fix preview errors
parents be916197 74d0e168
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
import datetime import datetime
import pkg_resources import pkg_resources
import dateutil.parser
from django.template.context import Context from django.template.context import Context
from django.template.loader import get_template from django.template.loader import get_template
from webob import Response from webob import Response
...@@ -155,9 +157,6 @@ DEFAULT_ASSESSMENT_MODULES = [ ...@@ -155,9 +157,6 @@ DEFAULT_ASSESSMENT_MODULES = [
DEFAULT_PEER_ASSESSMENT, DEFAULT_PEER_ASSESSMENT,
] ]
# Used to parse datetime strings from the XML configuration.
TIME_PARSE_FORMAT = "%Y-%m-%dT%H:%M:%S"
def load(path): def load(path):
"""Handy helper for getting resources from our kit.""" """Handy helper for getting resources from our kit."""
...@@ -384,11 +383,11 @@ class OpenAssessmentBlock(XBlock, SubmissionMixin, PeerAssessmentMixin, SelfAsse ...@@ -384,11 +383,11 @@ class OpenAssessmentBlock(XBlock, SubmissionMixin, PeerAssessmentMixin, SelfAsse
context_dict["xblock_trace"] = self.get_xblock_trace() context_dict["xblock_trace"] = self.get_xblock_trace()
if self.start_datetime: if self.start_datetime:
start = datetime.datetime.strptime(self.start_datetime, TIME_PARSE_FORMAT) start = dateutil.parser.parse(self.start_datetime)
context_dict["formatted_start_date"] = start.strftime("%A, %B %d, %Y") context_dict["formatted_start_date"] = start.strftime("%A, %B %d, %Y")
context_dict["formatted_start_datetime"] = start.strftime("%A, %B %d, %Y %X") context_dict["formatted_start_datetime"] = start.strftime("%A, %B %d, %Y %X")
if self.due_datetime: if self.due_datetime:
due = datetime.datetime.strptime(self.due_datetime, TIME_PARSE_FORMAT) due = dateutil.parser.parse(self.due_datetime)
context_dict["formatted_due_date"] = due.strftime("%A, %B %d, %Y") context_dict["formatted_due_date"] = due.strftime("%A, %B %d, %Y")
context_dict["formatted_due_datetime"] = due.strftime("%A, %B %d, %Y %X") context_dict["formatted_due_datetime"] = due.strftime("%A, %B %d, %Y %X")
...@@ -414,11 +413,11 @@ class OpenAssessmentBlock(XBlock, SubmissionMixin, PeerAssessmentMixin, SelfAsse ...@@ -414,11 +413,11 @@ class OpenAssessmentBlock(XBlock, SubmissionMixin, PeerAssessmentMixin, SelfAsse
""" """
# Is the question closed? # Is the question closed?
if self.start_datetime: if self.start_datetime:
start = datetime.datetime.strptime(self.start_datetime, TIME_PARSE_FORMAT) start = dateutil.parser.parse(self.start_datetime)
if start > datetime.datetime.utcnow(): if start > datetime.datetime.utcnow():
return False, "start" return False, "start"
if self.due_datetime: if self.due_datetime:
due = datetime.datetime.strptime(self.due_datetime, TIME_PARSE_FORMAT) due = dateutil.parser.parse(self.due_datetime)
if due < datetime.datetime.utcnow(): if due < datetime.datetime.utcnow():
return False, "due" return False, "due"
return True, None return True, None
...@@ -21,6 +21,7 @@ function OpenAssessmentBlock(runtime, element) { ...@@ -21,6 +21,7 @@ function OpenAssessmentBlock(runtime, element) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: renderPeerUrl, url: renderPeerUrl,
dataType: "html",
success: function(data) { success: function(data) {
render_peer_assessment(data); render_peer_assessment(data);
} }
...@@ -28,6 +29,7 @@ function OpenAssessmentBlock(runtime, element) { ...@@ -28,6 +29,7 @@ function OpenAssessmentBlock(runtime, element) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: renderSubmissionUrl, url: renderSubmissionUrl,
dataType: "html",
success: function(data) { success: function(data) {
render_submissions(data); render_submissions(data);
} }
...@@ -69,6 +71,7 @@ function OpenAssessmentBlock(runtime, element) { ...@@ -69,6 +71,7 @@ function OpenAssessmentBlock(runtime, element) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: renderSelfUrl, url: renderSelfUrl,
dataType: "html",
success: function(data) { success: function(data) {
$('#openassessment__self-assessment', element).replaceWith(data); $('#openassessment__self-assessment', element).replaceWith(data);
} }
...@@ -76,6 +79,7 @@ function OpenAssessmentBlock(runtime, element) { ...@@ -76,6 +79,7 @@ function OpenAssessmentBlock(runtime, element) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: renderPeerUrl, url: renderPeerUrl,
dataType: "html",
success: function(data) { success: function(data) {
render_peer_assessment(data) render_peer_assessment(data)
} }
...@@ -90,6 +94,7 @@ function OpenAssessmentBlock(runtime, element) { ...@@ -90,6 +94,7 @@ function OpenAssessmentBlock(runtime, element) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: renderSubmissionUrl, url: renderSubmissionUrl,
dataType: "html",
success: function(data) { success: function(data) {
render_submissions(data); render_submissions(data);
} }
......
...@@ -8,7 +8,6 @@ from django.test import TestCase ...@@ -8,7 +8,6 @@ from django.test import TestCase
from mock import patch from mock import patch
from workbench.runtime import WorkbenchRuntime from workbench.runtime import WorkbenchRuntime
import webob import webob
from openassessment.xblock.openassessmentblock import TIME_PARSE_FORMAT
from openassessment.xblock.submission_mixin import SubmissionMixin from openassessment.xblock.submission_mixin import SubmissionMixin
from submissions import api as sub_api from submissions import api as sub_api
...@@ -154,20 +153,20 @@ class TestOpenAssessment(TestCase): ...@@ -154,20 +153,20 @@ class TestOpenAssessment(TestCase):
past = now - datetime.timedelta(minutes = 10) past = now - datetime.timedelta(minutes = 10)
future = now + datetime.timedelta(minutes = 10) future = now + datetime.timedelta(minutes = 10)
way_future = now + datetime.timedelta(minutes = 20) way_future = now + datetime.timedelta(minutes = 20)
self.assessment.start_datetime = past.strftime(TIME_PARSE_FORMAT) self.assessment.start_datetime = past.isoformat()
self.assessment.due_datetime = past.strftime(TIME_PARSE_FORMAT) self.assessment.due_datetime = past.isoformat()
problem_open, reason = self.assessment.is_open() problem_open, reason = self.assessment.is_open()
self.assertFalse(problem_open) self.assertFalse(problem_open)
self.assertEqual("due", reason) self.assertEqual("due", reason)
self.assessment.start_datetime = past.strftime(TIME_PARSE_FORMAT) self.assessment.start_datetime = past.isoformat()
self.assessment.due_datetime = future.strftime(TIME_PARSE_FORMAT) self.assessment.due_datetime = future.isoformat()
problem_open, reason = self.assessment.is_open() problem_open, reason = self.assessment.is_open()
self.assertTrue(problem_open) self.assertTrue(problem_open)
self.assertEqual(None, reason) self.assertEqual(None, reason)
self.assessment.start_datetime = future.strftime(TIME_PARSE_FORMAT) self.assessment.start_datetime = future.isoformat()
self.assessment.due_datetime = way_future.strftime(TIME_PARSE_FORMAT) self.assessment.due_datetime = way_future.isoformat()
problem_open, reason = self.assessment.is_open() problem_open, reason = self.assessment.is_open()
self.assertFalse(problem_open) self.assertFalse(problem_open)
self.assertEqual("start", reason) self.assertEqual("start", reason)
...@@ -252,8 +252,13 @@ def get_score(student_item): ...@@ -252,8 +252,13 @@ def get_score(student_item):
}] }]
""" """
student_item_model = StudentItem.objects.get(**student_item) try:
scores = Score.objects.filter(student_item=student_item_model) student_item_model = StudentItem.objects.get(**student_item)
scores = Score.objects.filter(student_item=student_item_model)
except StudentItem.DoesNotExist:
return None
return ScoreSerializer(scores, many=True).data return ScoreSerializer(scores, many=True).data
......
import datetime import datetime
import copy
from ddt import ddt, file_data from ddt import ddt, file_data
from django.db import DatabaseError from django.db import DatabaseError
...@@ -134,6 +135,11 @@ class TestApi(TestCase): ...@@ -134,6 +135,11 @@ class TestApi(TestCase):
scores = api.get_score(STUDENT_ITEM) scores = api.get_score(STUDENT_ITEM)
self._assert_score(scores[0], 11, 12) self._assert_score(scores[0], 11, 12)
def test_get_score_no_student_id(self):
student_item = copy.deepcopy(STUDENT_ITEM)
student_item['student_id'] = None
self.assertIs(api.get_score(student_item), None)
def _assert_score( def _assert_score(
self, self,
score, score,
...@@ -141,4 +147,4 @@ class TestApi(TestCase): ...@@ -141,4 +147,4 @@ class TestApi(TestCase):
expected_points_possible): expected_points_possible):
self.assertIsNotNone(score) self.assertIsNotNone(score)
self.assertEqual(score["points_earned"], expected_points_earned) self.assertEqual(score["points_earned"], expected_points_earned)
self.assertEqual(score["points_possible"], expected_points_possible) self.assertEqual(score["points_possible"], expected_points_possible)
\ No newline at end of file
...@@ -7,4 +7,5 @@ django==1.4.8 ...@@ -7,4 +7,5 @@ django==1.4.8
django-extensions==1.2.5 django-extensions==1.2.5
djangorestframework==2.3.5 djangorestframework==2.3.5
Mako==0.9.1 Mako==0.9.1
python-dateutil==2.1
pytz==2012h pytz==2012h
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment