diff --git a/djangoapps/courseware/capa/capa_problem.py b/djangoapps/courseware/capa/capa_problem.py index c5a81e8100..9835b598b2 100644 --- a/djangoapps/courseware/capa/capa_problem.py +++ b/djangoapps/courseware/capa/capa_problem.py @@ -53,13 +53,12 @@ html_special_response = {"textline":textline.render, "schematic":schematic.render} class LoncapaProblem(object): - def __init__(self, filename, id=None, state=None, seed=None): + def __init__(self, fileobject, id=None, state=None, seed=None): ## Initialize class variables from state self.seed = None self.student_answers = dict() self.correct_map = dict() self.done = False - self.filename = filename if seed != None: self.seed = seed @@ -69,7 +68,6 @@ class LoncapaProblem(object): else: print "NO ID" raise Exception("This should never happen (183)") - #self.problem_id = filename if state: if 'seed' in state: @@ -81,17 +79,12 @@ class LoncapaProblem(object): if 'done' in state: self.done = state['done'] -# print self.seed - # TODO: Does this deplete the Linux entropy pool? Is this fast enough? if not self.seed: self.seed=struct.unpack('i', os.urandom(4))[0] -# print filename, self.seed, seed - ## Parse XML file - #log.debug(u"LoncapaProblem() opening file {0}".format(filename)) - file_text = open(filename).read() + file_text = fileobject.read() # Convert startouttext and endouttext to proper # TODO: Do with XML operations file_text = re.sub("startouttext\s*/","text",file_text) diff --git a/djangoapps/courseware/module_render.py b/djangoapps/courseware/module_render.py index 134bff8501..8ce4294f8e 100644 --- a/djangoapps/courseware/module_render.py +++ b/djangoapps/courseware/module_render.py @@ -40,6 +40,7 @@ class I4xSystem(object): self.track_function = args['track_function'] self.filestore = OSFS(settings.DATA_DIR) self.render_function = args['render_function'] + self.exception404 = Http404 def object_cache(cache, user, module_type, module_id): # We don't look up on user -- all queries include user diff --git a/djangoapps/courseware/modules/capa_module.py b/djangoapps/courseware/modules/capa_module.py index c6deca64f6..8865038021 100644 --- a/djangoapps/courseware/modules/capa_module.py +++ b/djangoapps/courseware/modules/capa_module.py @@ -92,7 +92,6 @@ class Module(XModule): # User submitted a problem, and hasn't reset. We don't want # more submissions. if self.lcp.done and self.rerandomize == "always": - #print "!" check_button = False save_button = False @@ -193,7 +192,7 @@ class Module(XModule): seed = 1 else: seed = None - self.lcp=LoncapaProblem(filename, self.item_id, state, seed = seed) + self.lcp=LoncapaProblem(open(filename), self.item_id, state, seed = seed) def handle_ajax(self, dispatch, get): if dispatch=='problem_get': @@ -242,7 +241,7 @@ class Module(XModule): if self.show_answer == 'closed' and not self.closed(): return False print "aa", self.show_answer - raise Http404 + raise Http404 #TODO: Not 404 def get_answer(self, get): if not self.answer_available(): @@ -270,15 +269,12 @@ class Module(XModule): for key in get: answers['_'.join(key.split('_')[1:])]=get[key] -# print "XXX", answers, get - event_info['answers']=answers # Too late. Cannot submit if self.closed(): event_info['failure']='closed' self.tracker('save_problem_check_fail', event_info) - print "cp" raise Http404 # Problem submitted. Student should reset before checking @@ -286,7 +282,6 @@ class Module(XModule): if self.lcp.done and self.rerandomize == "always": event_info['failure']='unreset' self.tracker('save_problem_check_fail', event_info) - print "cpdr" raise Http404 try: @@ -295,15 +290,11 @@ class Module(XModule): filename = self.lcp.filename correct_map = self.lcp.grade_answers(answers) except StudentInputError as inst: - self.lcp = LoncapaProblem(filename, id=lcp_id, state=old_state) + self.lcp = LoncapaProblem(open(filename), id=lcp_id, state=old_state) traceback.print_exc() -# print {'error':sys.exc_info(), -# 'answers':answers, -# 'seed':self.lcp.seed, -# 'filename':self.lcp.filename} return json.dumps({'success':inst.message}) except: - self.lcp = LoncapaProblem(filename, id=lcp_id, state=old_state) + self.lcp = LoncapaProblem(open(filename), id=lcp_id, state=old_state) traceback.print_exc() return json.dumps({'success':'Unknown Error'}) @@ -383,7 +374,7 @@ class Module(XModule): self.lcp.seed=None filename=settings.DATA_DIR+"problems/"+self.filename+".xml" - self.lcp=LoncapaProblem(filename, self.item_id, self.lcp.get_state()) + self.lcp=LoncapaProblem(open(filename), self.item_id, self.lcp.get_state()) event_info['new_state']=self.lcp.get_state() self.tracker('reset_problem', event_info) diff --git a/djangoapps/courseware/modules/html_module.py b/djangoapps/courseware/modules/html_module.py index 08a7b268a9..77bcbb4bbc 100644 --- a/djangoapps/courseware/modules/html_module.py +++ b/djangoapps/courseware/modules/html_module.py @@ -1,7 +1,5 @@ import json -## TODO: Abstract out from Django -from django.conf import settings from mitxmako.shortcuts import render_to_response, render_to_string from x_module import XModule diff --git a/djangoapps/courseware/modules/seq_module.py b/djangoapps/courseware/modules/seq_module.py index 276931d9f3..161c95b604 100644 --- a/djangoapps/courseware/modules/seq_module.py +++ b/djangoapps/courseware/modules/seq_module.py @@ -2,9 +2,6 @@ import json from lxml import etree -## TODO: Abstract out from Django -from django.http import Http404 -from django.conf import settings from mitxmako.shortcuts import render_to_response, render_to_string from x_module import XModule @@ -38,12 +35,10 @@ class Module(XModule): return self.destroy_js def handle_ajax(self, dispatch, get): - print "GET", get - print "DISPATCH", dispatch if dispatch=='goto_position': self.position = int(get['position']) return json.dumps({'success':True}) - raise Http404() + raise self.system.exception404 def render(self): if self.rendered: diff --git a/djangoapps/courseware/modules/template_module.py b/djangoapps/courseware/modules/template_module.py index 07e920b5a3..41556eb9d4 100644 --- a/djangoapps/courseware/modules/template_module.py +++ b/djangoapps/courseware/modules/template_module.py @@ -14,6 +14,7 @@ class Module(XModule): @classmethod def get_xml_tags(c): + ## TODO: Abstract out from filesystem tags = os.listdir(settings.DATA_DIR+'/custom_tags') return tags diff --git a/djangoapps/courseware/modules/vertical_module.py b/djangoapps/courseware/modules/vertical_module.py index 0867460e95..f64e45fe7f 100644 --- a/djangoapps/courseware/modules/vertical_module.py +++ b/djangoapps/courseware/modules/vertical_module.py @@ -1,7 +1,5 @@ import json -## TODO: Abstract out from Django -from django.conf import settings from mitxmako.shortcuts import render_to_response, render_to_string from x_module import XModule diff --git a/djangoapps/courseware/modules/video_module.py b/djangoapps/courseware/modules/video_module.py index aa44bd0ab2..c678838f2b 100644 --- a/djangoapps/courseware/modules/video_module.py +++ b/djangoapps/courseware/modules/video_module.py @@ -3,8 +3,6 @@ import logging from lxml import etree -## TODO: Abstract out from Django -from django.conf import settings from mitxmako.shortcuts import render_to_response, render_to_string from x_module import XModule diff --git a/djangoapps/courseware/modules/x_module.py b/djangoapps/courseware/modules/x_module.py index df96763d26..b21894b36b 100644 --- a/djangoapps/courseware/modules/x_module.py +++ b/djangoapps/courseware/modules/x_module.py @@ -55,3 +55,4 @@ class XModule(object): self.tracker = system.track_function self.filestore = system.filestore self.render_function = system.render_function + self.system = system