diff --git a/common/lib/xmodule/xmodule/open_ended_module.py b/common/lib/xmodule/xmodule/open_ended_module.py index 437346828c..5eaf3f94b7 100644 --- a/common/lib/xmodule/xmodule/open_ended_module.py +++ b/common/lib/xmodule/xmodule/open_ended_module.py @@ -30,6 +30,8 @@ from xmodule.modulestore import Location from capa.util import * import openendedchild +from mitxmako.shortcuts import render_to_string + from datetime import datetime log = logging.getLogger("mitx.courseware") @@ -209,8 +211,8 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return True def _update_score(self, score_msg, queuekey, system): - score_msg = self._parse_score_msg(score_msg, system) - if not score_msg['valid']: + new_score_msg = self._parse_score_msg(score_msg) + if not new_score_msg['valid']: score_msg['feedback'] = 'Invalid grader reply. Please contact the course staff.' self.record_latest_score(score_msg['score']) @@ -317,7 +319,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return u"\n".join([feedback_list_part1,feedback_list_part2]) - def _format_feedback(self, response_items, system): + def _format_feedback(self, response_items): """ Input: Dictionary called feedback. Must contain keys seen below. @@ -331,7 +333,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return system.render_template("open_ended_error.html", {'errors' : feedback}) - feedback_template = system.render_template("open_ended_feedback.html", { + feedback_template = render_to_string("open_ended_feedback.html", { 'grader_type': response_items['grader_type'], 'score': "{0} / {1}".format(response_items['score'], self.max_score()), 'feedback': feedback, @@ -340,7 +342,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return feedback_template - def _parse_score_msg(self, score_msg, system): + def _parse_score_msg(self, score_msg): """ Grader reply is a JSON-dump of the following dict { 'correct': True/False, @@ -373,12 +375,18 @@ class OpenEndedModule(openendedchild.OpenEndedChild): .format(tag)) return fail - feedback = self._format_feedback(score_result, system) + feedback = self._format_feedback(score_result) self.submission_id=score_result['submission_id'] self.grader_id=score_result['grader_id'] return {'valid' : True, 'score' : score_result['score'], 'feedback' : feedback} + def latest_post_assessment(self): + """None if not available""" + if not self.history: + return "" + return self._parse_score_msg(self.history[-1].get('post_assessment', "")) + def is_submission_correct(self, score): correct=False if(isinstance(score,(int, long, float, complex))):