[TNL-5001] Import-export issues when importing legacy discussion OLX format
Observed Problems: 1. Discussion categories and targets were missing 2. When imported over existing course Discussion IDs have changed unexpectedly - all posts were missing Solutions: * Parsing legacy discussion OLX * Do not force exporting discussion ID
This commit is contained in:
committed by
Braden MacDonald
parent
bc6a0603d4
commit
1f9dfe6573
@@ -121,6 +121,9 @@ class CrossStoreXMLRoundtrip(CourseComparisonTest, PartitionTestCase):
|
||||
self.exclude_field(None, 'wiki_slug')
|
||||
self.exclude_field(None, 'xml_attributes')
|
||||
self.exclude_field(None, 'parent')
|
||||
# discussion_ids are auto-generated based on usage_id, so they should change across
|
||||
# modulestores - see TNL-5001
|
||||
self.exclude_field(None, 'discussion_id')
|
||||
self.ignore_asset_key('_id')
|
||||
self.ignore_asset_key('uploadDate')
|
||||
self.ignore_asset_key('content_son')
|
||||
|
||||
@@ -335,7 +335,7 @@ class XmlParserMixin(object):
|
||||
|
||||
"""
|
||||
# VS[compat] -- just have the url_name lookup, once translation is done
|
||||
url_name = node.get('url_name', node.get('slug'))
|
||||
url_name = cls._get_url_name(node)
|
||||
def_id = id_generator.create_definition(node.tag, url_name)
|
||||
usage_id = id_generator.create_usage(def_id)
|
||||
aside_children = []
|
||||
@@ -344,8 +344,7 @@ class XmlParserMixin(object):
|
||||
if is_pointer_tag(node):
|
||||
# new style:
|
||||
# read the actual definition file--named using url_name.replace(':','/')
|
||||
filepath = cls._format_filepath(node.tag, name_to_pathname(url_name))
|
||||
definition_xml = cls.load_file(filepath, runtime.resources_fs, def_id)
|
||||
definition_xml, filepath = cls.load_definition_xml(node, runtime, def_id)
|
||||
aside_children = runtime.parse_asides(definition_xml, def_id, usage_id, id_generator)
|
||||
else:
|
||||
filepath = None
|
||||
@@ -408,6 +407,23 @@ class XmlParserMixin(object):
|
||||
|
||||
return xblock
|
||||
|
||||
@classmethod
|
||||
def _get_url_name(cls, node):
|
||||
"""
|
||||
Reads url_name attribute from the node
|
||||
"""
|
||||
return node.get('url_name', node.get('slug'))
|
||||
|
||||
@classmethod
|
||||
def load_definition_xml(cls, node, runtime, def_id):
|
||||
"""
|
||||
Loads definition_xml stored in a dedicated file
|
||||
"""
|
||||
url_name = cls._get_url_name(node)
|
||||
filepath = cls._format_filepath(node.tag, name_to_pathname(url_name))
|
||||
definition_xml = cls.load_file(filepath, runtime.resources_fs, def_id)
|
||||
return definition_xml, filepath
|
||||
|
||||
@classmethod
|
||||
def _format_filepath(cls, category, name):
|
||||
return u'{category}/{name}.{ext}'.format(category=category,
|
||||
|
||||
Reference in New Issue
Block a user