Commit c140fe87 by Calen Pennington

Get problem execution working with problems read from keystore

parent 20118614
...@@ -7,6 +7,9 @@ from xmodule.x_module import XModuleDescriptor, XMLParsingSystem ...@@ -7,6 +7,9 @@ from xmodule.x_module import XModuleDescriptor, XMLParsingSystem
from . import ModuleStore, Location from . import ModuleStore, Location
from .exceptions import ItemNotFoundError from .exceptions import ItemNotFoundError
etree.set_default_parser(etree.XMLParser(dtd_validation=False, load_dtd=False,
remove_comments=True))
class XMLModuleStore(ModuleStore): class XMLModuleStore(ModuleStore):
""" """
......
...@@ -247,7 +247,7 @@ class CapaModule(XModule): ...@@ -247,7 +247,7 @@ class CapaModule(XModule):
else: else:
raise raise
try: try:
self.lcp = LoncapaProblem(fp, self.id, instance_state, seed=seed, system=self.system) self.lcp = LoncapaProblem(fp, self.location.html_id(), instance_state, seed=seed, system=self.system)
except Exception: except Exception:
msg = 'cannot create LoncapaProblem %s' % self.filename msg = 'cannot create LoncapaProblem %s' % self.filename
log.exception(msg) log.exception(msg)
...@@ -257,7 +257,7 @@ class CapaModule(XModule): ...@@ -257,7 +257,7 @@ class CapaModule(XModule):
# create a dummy problem with error message instead of failing # create a dummy problem with error message instead of failing
fp = StringIO.StringIO('<problem><text><font color="red" size="+2">Problem file %s has an error:</font>%s</text></problem>' % (self.filename, msg)) fp = StringIO.StringIO('<problem><text><font color="red" size="+2">Problem file %s has an error:</font>%s</text></problem>' % (self.filename, msg))
fp.name = "StringIO" fp.name = "StringIO"
self.lcp = LoncapaProblem(fp, self.id, instance_state, seed=seed, system=self.system) self.lcp = LoncapaProblem(fp, self.location.html_id(), instance_state, seed=seed, system=self.system)
else: else:
raise raise
...@@ -378,7 +378,7 @@ class CapaModule(XModule): ...@@ -378,7 +378,7 @@ class CapaModule(XModule):
# Too late. Cannot submit # Too late. Cannot submit
if self.closed(): if self.closed():
event_info['failure'] = 'closed' event_info['failure'] = 'closed'
self.tracker('save_problem_check_fail', event_info) self.system.track_function('save_problem_check_fail', event_info)
# TODO (vshnayder): probably not 404? # TODO (vshnayder): probably not 404?
raise self.system.exception404 raise self.system.exception404
...@@ -386,7 +386,7 @@ class CapaModule(XModule): ...@@ -386,7 +386,7 @@ class CapaModule(XModule):
# again. # again.
if self.lcp.done and self.rerandomize == "always": if self.lcp.done and self.rerandomize == "always":
event_info['failure'] = 'unreset' event_info['failure'] = 'unreset'
self.tracker('save_problem_check_fail', event_info) self.system.track_function('save_problem_check_fail', event_info)
raise self.system.exception404 raise self.system.exception404
try: try:
...@@ -415,10 +415,10 @@ class CapaModule(XModule): ...@@ -415,10 +415,10 @@ class CapaModule(XModule):
if not correct_map.is_correct(answer_id): if not correct_map.is_correct(answer_id):
success = 'incorrect' success = 'incorrect'
# log this in the tracker # log this in the track_function
event_info['correct_map'] = correct_map.get_dict() event_info['correct_map'] = correct_map.get_dict()
event_info['success'] = success event_info['success'] = success
self.tracker('save_problem_check', event_info) self.system.track_function('save_problem_check', event_info)
# render problem into HTML # render problem into HTML
html = self.get_problem_html(encapsulate=False) html = self.get_problem_html(encapsulate=False)
...@@ -443,7 +443,7 @@ class CapaModule(XModule): ...@@ -443,7 +443,7 @@ class CapaModule(XModule):
# Too late. Cannot submit # Too late. Cannot submit
if self.closed(): if self.closed():
event_info['failure'] = 'closed' event_info['failure'] = 'closed'
self.tracker('save_problem_fail', event_info) self.system.track_function('save_problem_fail', event_info)
return {'success': False, return {'success': False,
'error': "Problem is closed"} 'error': "Problem is closed"}
...@@ -451,14 +451,14 @@ class CapaModule(XModule): ...@@ -451,14 +451,14 @@ class CapaModule(XModule):
# again. # again.
if self.lcp.done and self.rerandomize == "always": if self.lcp.done and self.rerandomize == "always":
event_info['failure'] = 'done' event_info['failure'] = 'done'
self.tracker('save_problem_fail', event_info) self.system.track_function('save_problem_fail', event_info)
return {'success': False, return {'success': False,
'error': "Problem needs to be reset prior to save."} 'error': "Problem needs to be reset prior to save."}
self.lcp.student_answers = answers self.lcp.student_answers = answers
# TODO: should this be save_problem_fail? Looks like success to me... # TODO: should this be save_problem_fail? Looks like success to me...
self.tracker('save_problem_fail', event_info) self.system.track_function('save_problem_fail', event_info)
return {'success': True} return {'success': True}
def reset_problem(self, get): def reset_problem(self, get):
...@@ -473,12 +473,12 @@ class CapaModule(XModule): ...@@ -473,12 +473,12 @@ class CapaModule(XModule):
if self.closed(): if self.closed():
event_info['failure'] = 'closed' event_info['failure'] = 'closed'
self.tracker('reset_problem_fail', event_info) self.system.track_function('reset_problem_fail', event_info)
return "Problem is closed" return "Problem is closed"
if not self.lcp.done: if not self.lcp.done:
event_info['failure'] = 'not_done' event_info['failure'] = 'not_done'
self.tracker('reset_problem_fail', event_info) self.system.track_function('reset_problem_fail', event_info)
return "Refresh the page and make an attempt before resetting." return "Refresh the page and make an attempt before resetting."
self.lcp.do_reset() self.lcp.do_reset()
...@@ -487,10 +487,10 @@ class CapaModule(XModule): ...@@ -487,10 +487,10 @@ class CapaModule(XModule):
self.lcp.seed = None self.lcp.seed = None
self.lcp = LoncapaProblem(self.system.filestore.open(self.filename), self.lcp = LoncapaProblem(self.system.filestore.open(self.filename),
self.id, self.lcp.get_state(), system=self.system) self.location.html_id(), self.lcp.get_state(), system=self.system)
event_info['new_state'] = self.lcp.get_state() event_info['new_state'] = self.lcp.get_state()
self.tracker('reset_problem', event_info) self.system.track_function('reset_problem', event_info)
return {'html': self.get_problem_html(encapsulate=False)} return {'html': self.get_problem_html(encapsulate=False)}
......
...@@ -94,4 +94,4 @@ class @Problem ...@@ -94,4 +94,4 @@ class @Problem
element.schematic.update_value() element.schematic.update_value()
@$(".CodeMirror").each (index, element) -> @$(".CodeMirror").each (index, element) ->
element.CodeMirror.save() if element.CodeMirror.save element.CodeMirror.save() if element.CodeMirror.save
@answers = @$("[id^=input_#{@element_id}_]").serialize() @answers = @$("[id^=input_#{@element_id.replace(/problem_/, '')}_]").serialize()
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