Commit f5600c2b by Vik Paruchuri

Make things more robust, ensure that a rubric is specified properly before…

Make things more robust, ensure that a rubric is specified properly before combined open ended module will render
parent 79c8efcb
......@@ -21,6 +21,7 @@ from .xml_module import XmlDescriptor
from xmodule.modulestore import Location
import self_assessment_module
import open_ended_module
from combined_open_ended_rubric import CombinedOpenEndedRubric
from mitxmako.shortcuts import render_to_string
......@@ -140,6 +141,12 @@ class CombinedOpenEndedModule(XModule):
# completion (doesn't matter if you self-assessed correct/incorrect).
self._max_score = int(self.metadata.get('max_score', MAX_SCORE))
rubric_renderer = CombinedOpenEndedRubric(True)
success, rubric_feedback = rubric_renderer.render_rubric(True, definition['rubric'])
if not success:
error_message="Could not parse rubric : {0}".format(definition['rubric'])
log.exception(error_message)
raise Exception(error_message)
#Static data is passed to the child modules to render
self.static_data = {
'max_score': self._max_score,
......
......@@ -20,16 +20,26 @@ class CombinedOpenEndedRubric:
html: the html that corresponds to the xml given
'''
def render_rubric(self, rubric_xml):
success = False
try:
rubric_xml = rubric_xml.encode('ascii', 'ignore')
rubric_categories = self.extract_categories(rubric_xml)
html = render_to_string('open_ended_rubric.html',
{'categories' : rubric_categories,
'has_score': self.has_score,
'view_only': self.view_only})
success = True
except:
log.exception("Could not parse the rubric.")
try:
html = etree.tostring(rubric_xml, pretty_print=True)
return html
except:
log.exception("Rubric XML is a string, not an XML object : {0}".format(rubric_xml))
if isinstance(rubric_xml, basestring):
html = rubric_xml
else:
html = "Invalid rubric. Please contact course staff."
return success, html
def extract_categories(self, element):
'''
......
......@@ -383,7 +383,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild):
feedback = self._convert_longform_feedback_to_html(response_items)
if response_items['rubric_scores_complete']==True:
rubric_renderer = CombinedOpenEndedRubric(True)
rubric_feedback = rubric_renderer.render_rubric(response_items['rubric_xml'])
success, rubric_feedback = rubric_renderer.render_rubric(response_items['rubric_xml'])
if not response_items['success']:
return system.render_template("open_ended_error.html",
......
......@@ -124,7 +124,7 @@ class SelfAssessmentModule(openendedchild.OpenEndedChild):
rubric_renderer = CombinedOpenEndedRubric(True)
rubric_html = rubric_renderer.render_rubric(self.rubric)
success, rubric_html = rubric_renderer.render_rubric(self.rubric)
# we'll render it
context = {'rubric': rubric_html,
......
......@@ -264,7 +264,12 @@ def _get_next(course_id, grader_id, location):
response_json = json.loads(response)
rubric = response_json['rubric']
rubric_renderer = CombinedOpenEndedRubric(False)
rubric_html = rubric_renderer.render_rubric(rubric)
success, rubric_html = rubric_renderer.render_rubric(rubric)
if not success:
error_message = "Could not render rubric: {0}".format(rubric)
log.exception(error_message)
return json.dumps({'success': False,
'error': error_message})
response_json['rubric'] = rubric_html
return json.dumps(response_json)
except GradingServiceError:
......
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