Commit c8f261ef by Piotr Mitros

Work-around for not finding XML for sections in section files. Note: Requires data push

parent f8e70639
...@@ -3,6 +3,7 @@ import json ...@@ -3,6 +3,7 @@ import json
import logging import logging
import os import os
import re import re
import sys
from datetime import timedelta from datetime import timedelta
from lxml import etree from lxml import etree
...@@ -22,6 +23,9 @@ course XML file and the rest of the system. ...@@ -22,6 +23,9 @@ course XML file and the rest of the system.
TODO: Shift everything from xml.dom.minidom to XPath (or XQuery) TODO: Shift everything from xml.dom.minidom to XPath (or XQuery)
''' '''
class ContentException(Exception):
pass
log = logging.getLogger("mitx.courseware") log = logging.getLogger("mitx.courseware")
...@@ -207,21 +211,34 @@ def section_file(user, section): ...@@ -207,21 +211,34 @@ def section_file(user, section):
return tree return tree
def module_xml(coursefile, module, id_tag, module_id): def module_xml(user, module, id_tag, module_id):
''' Get XML for a module based on module and module_id. Assumes ''' Get XML for a module based on module and module_id. Assumes
module occurs once in courseware XML file.. ''' module occurs once in courseware XML file or hidden section. '''
doc = coursefile
# Sanitize input # Sanitize input
if not module.isalnum(): if not module.isalnum():
raise Exception("Module is not alphanumeric") raise Exception("Module is not alphanumeric")
if not module_id.isalnum(): if not module_id.isalnum():
raise Exception("Module ID is not alphanumeric") raise Exception("Module ID is not alphanumeric")
xpath_search='//*/{module}[(@{id_tag} = "{id}") or (@id = "{id}")]'.format(module=module, # Generate search
id_tag=id_tag, xpath_search='//{module}[(@{id_tag} = "{id}") or (@id = "{id}")]'.format(module=module,
id=module_id) id_tag=id_tag,
id=module_id)
#result_set=doc.xpathEval(xpath_search) #result_set=doc.xpathEval(xpath_search)
doc = course_file(user)
section_list = (s[:-4] for s in os.listdir(settings.DATA_DIR+'/sections') if s[-4:]=='.xml')
result_set=doc.xpath(xpath_search) result_set=doc.xpath(xpath_search)
if len(result_set)<1:
for section in section_list:
try:
s = section_file(user, section)
except etree.XMLSyntaxError:
ex= sys.exc_info()
raise ContentException("Malformed XML in " + section+ "("+str(ex[1].msg)+")")
result_set = s.xpath(xpath_search)
if len(result_set) != 0:
break
if len(result_set)>1: if len(result_set)>1:
print "WARNING: Potentially malformed course file", module, module_id print "WARNING: Potentially malformed course file", module, module_id
if len(result_set)==0: if len(result_set)==0:
......
...@@ -67,7 +67,7 @@ def modx_dispatch(request, module=None, dispatch=None, id=None): ...@@ -67,7 +67,7 @@ def modx_dispatch(request, module=None, dispatch=None, id=None):
ajax_url = '/modx/'+module+'/'+id+'/' ajax_url = '/modx/'+module+'/'+id+'/'
# Grab the XML corresponding to the request from course.xml # Grab the XML corresponding to the request from course.xml
xml = content_parser.module_xml(content_parser.course_file(request.user), module, 'id', id) xml = content_parser.module_xml(request.user, module, 'id', id)
# Create the module # Create the module
instance=courseware.modules.get_module_class(module)(xml, instance=courseware.modules.get_module_class(module)(xml,
......
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