def test_legacy_export_format(self, id_pair, category_pair, target_pair, patched_load_definition_xml): """ Test that legacy export XML format can be parsed preserving field values """ xblock_xml = """<discussion url_name="82bb87a2d22240b1adac2dfcc1e7e5e4"/>""" xblock_definition_xml = """ <discussion {id_attr}="{id_value}" {category_attr}="{category_value}" {target_attr}="{target_value}" />""".format( id_attr=id_pair.name, id_value=id_pair.value, category_attr=category_pair.name, category_value=category_pair.value, target_attr=target_pair.name, target_value=target_pair.value, ) node = etree.fromstring(xblock_xml) definition_node = etree.fromstring(xblock_definition_xml) patched_load_definition_xml.return_value = (definition_node, "irrelevant") block = DiscussionXBlock.parse_xml(node, self.runtime_mock, self.keys, self.id_gen_mock) try: self.assertEqual(block.discussion_id, id_pair.value) self.assertEqual(block.discussion_category, category_pair.value) self.assertEqual(block.discussion_target, target_pair.value) except AssertionError: print(xblock_xml, xblock_definition_xml) raise
def test_legacy_export_format(self, id_pair, category_pair, target_pair, patched_load_definition_xml): """ Test that legacy export XML format can be parsed preserving field values """ xblock_xml = """<discussion url_name="82bb87a2d22240b1adac2dfcc1e7e5e4"/>""" xblock_definition_xml = u""" <discussion {id_attr}="{id_value}" {category_attr}="{category_value}" {target_attr}="{target_value}" />""".format( id_attr=id_pair.name, id_value=id_pair.value, category_attr=category_pair.name, category_value=category_pair.value, target_attr=target_pair.name, target_value=target_pair.value, ) node = etree.fromstring(xblock_xml) definition_node = etree.fromstring(xblock_definition_xml) patched_load_definition_xml.return_value = (definition_node, "irrelevant") block = DiscussionXBlock.parse_xml(node, self.runtime_mock, self.keys, self.id_gen_mock) try: self.assertEqual(block.discussion_id, id_pair.value) self.assertEqual(block.discussion_category, category_pair.value) self.assertEqual(block.discussion_target, target_pair.value) except AssertionError: print(xblock_xml, xblock_definition_xml) raise
def test_xblock_export_format(self, id_pair, category_pair, target_pair, patched_load_definition_xml): """ Test that xblock export XML format can be parsed preserving field values """ xblock_xml = """ <discussion url_name="82bb87a2d22240b1adac2dfcc1e7e5e4" xblock-family="xblock.v1" {id_attr}="{id_value}" {category_attr}="{category_value}" {target_attr}="{target_value}" /> """.format( id_attr=id_pair.name, id_value=id_pair.value, category_attr=category_pair.name, category_value=category_pair.value, target_attr=target_pair.name, target_value=target_pair.value, ) node = etree.fromstring(xblock_xml) patched_load_definition_xml.side_effect = Exception("Irrelevant") block = DiscussionXBlock.parse_xml(node, self.runtime_mock, self.keys, self.id_gen_mock) try: assert block.discussion_id == id_pair.value assert block.discussion_category == category_pair.value assert block.discussion_target == target_pair.value except AssertionError: print(xblock_xml) raise
def add_xml_to_node(self, node): """ Override default serialization to output solution field as a separate child element. """ super().add_xml_to_node(node) if 'solution' in node.attrib: # Try outputting it as an XML element if we can solution = node.attrib['solution'] wrapped = "<solution>{}</solution>".format(solution) try: child = etree.fromstring(wrapped) except: # pylint: disable=bare-except # Parsing exception, leave the solution as an attribute pass else: node.append(child) del node.attrib['solution']
def add_xml_to_node(self, node): """ Override default serialization to output solution field as a separate child element. """ super(StaffGradedAssignmentXBlock, self).add_xml_to_node(node) if 'solution' in node.attrib: # Try outputting it as an XML element if we can solution = node.attrib['solution'] wrapped = "<solution>{}</solution>".format(solution) try: child = etree.fromstring(wrapped) except: # pylint: disable=bare-except # Parsing exception, leave the solution as an attribute pass else: node.append(child) del node.attrib['solution']