diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index fafcce6991594c9d59a22127566b4d42141fc971..14a59c900474b9cbf75d3345ac8d348ce6cad471 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_module.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_module.py @@ -166,26 +166,14 @@ class CombinedOpenEndedModule(XModule): self._max_score = int(self.metadata.get('max_score', MAX_SCORE)) if self._max_score > MAX_SCORE_ALLOWED: - error_message = "Max score {0} is higher than max score allowed {1}".format(self._max_score, - MAX_SCORE_ALLOWED) + error_message = "Max score {0} is higher than max score allowed {1} for location {2}".format(self._max_score, + MAX_SCORE_ALLOWED, location) log.error(error_message) raise IncorrectMaxScoreError(error_message) rubric_renderer = CombinedOpenEndedRubric(system, True) rubric_string = stringify_children(definition['rubric']) - success, rubric_feedback = rubric_renderer.render_rubric(rubric_string) - if not success: - error_message = "Could not parse rubric : {0}".format(definition['rubric']) - log.error(error_message) - raise RubricParsingError(error_message) - - rubric_categories = rubric_renderer.extract_categories(stringify_children(definition['rubric'])) - for category in rubric_categories: - if len(category['options']) > (MAX_SCORE_ALLOWED + 1): - error_message = "Number of score points in rubric {0} higher than the max allowed, which is {1}".format( - len(category['options']), MAX_SCORE_ALLOWED) - log.error(error_message) - raise RubricParsingError(error_message) + rubric_renderer.check_if_rubric_is_parseable(rubric_string, location, MAX_SCORE_ALLOWED) #Static data is passed to the child modules to render self.static_data = { diff --git a/common/lib/xmodule/xmodule/combined_open_ended_rubric.py b/common/lib/xmodule/xmodule/combined_open_ended_rubric.py index 3e3d8e67f2cc3a8f1145299d9061c02081e0f45b..f8b23a27743780f78bb376f7b521fbba4496b736 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_rubric.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_rubric.py @@ -36,6 +36,21 @@ class CombinedOpenEndedRubric(object): raise RubricParsingError("[render_rubric] Could not parse the rubric with xml: {0}".format(rubric_xml)) return success, html + def check_if_rubric_is_parseable(self, rubric_string, location, max_score_allowed): + success, rubric_feedback = self.render_rubric(rubric_string) + if not success: + error_message = "Could not parse rubric : {0} for location {1}".format(rubric_string, location.url()) + log.error(error_message) + raise RubricParsingError(error_message) + + rubric_categories = self.extract_categories(rubric_string) + for category in rubric_categories: + if len(category['options']) > (max_score_allowed + 1): + error_message = "Number of score points in rubric {0} higher than the max allowed, which is {1}".format( + len(category['options']), max_score_allowed) + log.error(error_message) + raise RubricParsingError(error_message) + def extract_categories(self, element): ''' Contstruct a list of categories such that the structure looks like: