From d6f8def73321daddcdab035d8ffd760996ae2925 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri <vik@edx.org> Date: Thu, 31 Jan 2013 17:18:32 -0500 Subject: [PATCH] Move over rubric parsing logic to rubric module --- .../xmodule/combined_open_ended_module.py | 18 +++--------------- .../xmodule/combined_open_ended_rubric.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index fafcce69915..14a59c90047 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 3e3d8e67f2c..f8b23a27743 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: -- GitLab