From c140fe87662844ed6fa01f921d72afede53be4e8 Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Wed, 27 Jun 2012 16:29:49 -0400 Subject: [PATCH] Get problem execution working with problems read from keystore --- common/lib/keystore/xml.py | 3 +++ common/lib/xmodule/capa_module.py | 26 ++++++++++---------- lms/static/coffee/src/modules/problem.coffee | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/common/lib/keystore/xml.py b/common/lib/keystore/xml.py index d5baefd787..988916ed39 100644 --- a/common/lib/keystore/xml.py +++ b/common/lib/keystore/xml.py @@ -7,6 +7,9 @@ from xmodule.x_module import XModuleDescriptor, XMLParsingSystem from . import ModuleStore, Location from .exceptions import ItemNotFoundError +etree.set_default_parser(etree.XMLParser(dtd_validation=False, load_dtd=False, + remove_comments=True)) + class XMLModuleStore(ModuleStore): """ diff --git a/common/lib/xmodule/capa_module.py b/common/lib/xmodule/capa_module.py index 0563017ff2..4e40bffb48 100644 --- a/common/lib/xmodule/capa_module.py +++ b/common/lib/xmodule/capa_module.py @@ -247,7 +247,7 @@ class CapaModule(XModule): else: raise 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: msg = 'cannot create LoncapaProblem %s' % self.filename log.exception(msg) @@ -257,7 +257,7 @@ class CapaModule(XModule): # create a dummy problem with error message instead of failing fp = StringIO.StringIO('Problem file %s has an error:%s' % (self.filename, msg)) 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: raise @@ -378,7 +378,7 @@ class CapaModule(XModule): # Too late. Cannot submit if self.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? raise self.system.exception404 @@ -386,7 +386,7 @@ class CapaModule(XModule): # again. if self.lcp.done and self.rerandomize == "always": 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 try: @@ -415,10 +415,10 @@ class CapaModule(XModule): if not correct_map.is_correct(answer_id): success = 'incorrect' - # log this in the tracker + # log this in the track_function event_info['correct_map'] = correct_map.get_dict() event_info['success'] = success - self.tracker('save_problem_check', event_info) + self.system.track_function('save_problem_check', event_info) # render problem into HTML html = self.get_problem_html(encapsulate=False) @@ -443,7 +443,7 @@ class CapaModule(XModule): # Too late. Cannot submit if self.closed(): event_info['failure'] = 'closed' - self.tracker('save_problem_fail', event_info) + self.system.track_function('save_problem_fail', event_info) return {'success': False, 'error': "Problem is closed"} @@ -451,14 +451,14 @@ class CapaModule(XModule): # again. if self.lcp.done and self.rerandomize == "always": event_info['failure'] = 'done' - self.tracker('save_problem_fail', event_info) + self.system.track_function('save_problem_fail', event_info) return {'success': False, 'error': "Problem needs to be reset prior to save."} self.lcp.student_answers = answers # 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} def reset_problem(self, get): @@ -473,12 +473,12 @@ class CapaModule(XModule): if self.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" if not self.lcp.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." self.lcp.do_reset() @@ -487,10 +487,10 @@ class CapaModule(XModule): self.lcp.seed = None 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() - self.tracker('reset_problem', event_info) + self.system.track_function('reset_problem', event_info) return {'html': self.get_problem_html(encapsulate=False)} diff --git a/lms/static/coffee/src/modules/problem.coffee b/lms/static/coffee/src/modules/problem.coffee index eb2c057bef..85186a2903 100644 --- a/lms/static/coffee/src/modules/problem.coffee +++ b/lms/static/coffee/src/modules/problem.coffee @@ -94,4 +94,4 @@ class @Problem element.schematic.update_value() @$(".CodeMirror").each (index, element) -> element.CodeMirror.save() if element.CodeMirror.save - @answers = @$("[id^=input_#{@element_id}_]").serialize() + @answers = @$("[id^=input_#{@element_id.replace(/problem_/, '')}_]").serialize()