Make things more robust, ensure that a rubric is specified properly before combined open ended module will render
This commit is contained in:
@@ -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.")
|
||||
html = etree.tostring(rubric_xml, pretty_print=True)
|
||||
return html
|
||||
try:
|
||||
html = etree.tostring(rubric_xml, pretty_print=True)
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user