Commit 17d015d4 by Usman Khalid

Merge pull request #683 from edx/usman/fix-serialization

Update assessments format when serializing.
parents 2754222e e25754e2
...@@ -83,9 +83,10 @@ def update_assessments_format(assessments): ...@@ -83,9 +83,10 @@ def update_assessments_format(assessments):
list of dict list of dict
""" """
for assessment in assessments: for assessment in assessments:
if 'examples' in assessment: if 'examples' in assessment and assessment['examples']:
for example in assessment['examples']: for example in assessment['examples']:
if isinstance(example['answer'], unicode) or isinstance(example['answer'], str): if (isinstance(example, dict) and
(isinstance(example['answer'], unicode) or isinstance(example['answer'], str))):
example['answer'] = { example['answer'] = {
'parts': [ 'parts': [
{'text': example['answer']} {'text': example['answer']}
......
...@@ -120,9 +120,8 @@ class TestSerializeContent(TestCase): ...@@ -120,9 +120,8 @@ class TestSerializeContent(TestCase):
self.oa_block.submission_start = data.get('submission_start') self.oa_block.submission_start = data.get('submission_start')
self.oa_block.submission_due = data.get('submission_due') self.oa_block.submission_due = data.get('submission_due')
self.oa_block.rubric_criteria = data.get('criteria', copy.deepcopy(self.BASIC_CRITERIA)) self.oa_block.rubric_criteria = data.get('criteria', copy.deepcopy(self.BASIC_CRITERIA))
self.oa_block.rubric_assessments = update_assessments_format( self.oa_block.rubric_assessments = data.get('assessments', copy.deepcopy(self.BASIC_ASSESSMENTS))
data.get('assessments', copy.deepcopy(self.BASIC_ASSESSMENTS))
)
self.oa_block.allow_file_upload = data.get('allow_file_upload') self.oa_block.allow_file_upload = data.get('allow_file_upload')
self.oa_block.allow_latex = data.get('allow_latex') self.oa_block.allow_latex = data.get('allow_latex')
self.oa_block.leaderboard_show = data.get('leaderboard_show', 0) self.oa_block.leaderboard_show = data.get('leaderboard_show', 0)
...@@ -231,7 +230,7 @@ class TestSerializeContent(TestCase): ...@@ -231,7 +230,7 @@ class TestSerializeContent(TestCase):
def test_mutated_assessments_dict(self): def test_mutated_assessments_dict(self):
self._configure_xblock({}) self._configure_xblock({})
for assessment_dict in update_assessments_format(self.BASIC_ASSESSMENTS): for assessment_dict in self.BASIC_ASSESSMENTS:
for mutated_dict in self._dict_mutations(assessment_dict): for mutated_dict in self._dict_mutations(assessment_dict):
self.oa_block.rubric_assessments = [mutated_dict] self.oa_block.rubric_assessments = [mutated_dict]
xml = serialize_content(self.oa_block) xml = serialize_content(self.oa_block)
......
...@@ -6,6 +6,7 @@ import lxml.etree as etree ...@@ -6,6 +6,7 @@ import lxml.etree as etree
import pytz import pytz
import dateutil.parser import dateutil.parser
import defusedxml.ElementTree as safe_etree import defusedxml.ElementTree as safe_etree
from data_conversion import update_assessments_format
from defaults import DEFAULT_RUBRIC_FEEDBACK_TEXT from defaults import DEFAULT_RUBRIC_FEEDBACK_TEXT
...@@ -630,7 +631,7 @@ def serialize_assessments(assessments_root, oa_block): ...@@ -630,7 +631,7 @@ def serialize_assessments(assessments_root, oa_block):
None None
""" """
for assessment_dict in oa_block.rubric_assessments: for assessment_dict in update_assessments_format(oa_block.rubric_assessments):
assessment = etree.SubElement(assessments_root, 'assessment') assessment = etree.SubElement(assessments_root, 'assessment')
...@@ -760,7 +761,7 @@ def serialize_examples_to_xml_str(assessment): ...@@ -760,7 +761,7 @@ def serialize_examples_to_xml_str(assessment):
A unicode string of the XML serialized examples. A unicode string of the XML serialized examples.
""" """
examples = assessment.get('examples', []) examples = update_assessments_format([assessment])[0].get('examples', [])
if not isinstance(examples, list): if not isinstance(examples, list):
examples = [] examples = []
examples_root = etree.Element('examples') examples_root = etree.Element('examples')
......
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