From 6d61bd469a096eef5eca94cb88dbc3a5f13e9e2e Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Fri, 4 Jan 2013 11:47:49 -0500 Subject: [PATCH] initial setup for open ended xmodule --- common/lib/xmodule/open_ended_module.py | 59 +++++++++++++++++-- .../xmodule/xmodule/self_assessment_module.py | 5 -- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/common/lib/xmodule/open_ended_module.py b/common/lib/xmodule/open_ended_module.py index e728a8dba3..62310f1e18 100644 --- a/common/lib/xmodule/open_ended_module.py +++ b/common/lib/xmodule/open_ended_module.py @@ -64,7 +64,7 @@ class OpenEndedModule(): # states INITIAL = 'initial' ASSESSING = 'assessing' - REQUEST_HINT = 'post_assessment' + POST_ASSESSMENT = 'post_assessment' DONE = 'done' def __init__(self, system, location, definition, descriptor, @@ -122,7 +122,56 @@ class OpenEndedModule(): # completion (doesn't matter if you self-assessed correct/incorrect). self._max_score = int(instance_state.get('max_score', MAX_SCORE)) - self.rubric = definition['rubric'] - self.prompt = definition['prompt'] - self.submit_message = definition['submitmessage'] - self.hint_prompt = definition['hintprompt'] \ No newline at end of file + oeparam = definition['openendedparam'] + prompt = definition['prompt'] + rubric = definition['rubric'] + + self.url = definition.get('url', None) + self.queue_name = definition.get('queuename', self.DEFAULT_QUEUE) + self.message_queue_name = definition.get('message-queuename', self.DEFAULT_MESSAGE_QUEUE) + + #This is needed to attach feedback to specific responses later + self.submission_id=None + self.grader_id=None + + if oeparam is None: + raise ValueError("No oeparam found in problem xml.") + if prompt is None: + raise ValueError("No prompt found in problem xml.") + if rubric is None: + raise ValueError("No rubric found in problem xml.") + + self._parse(oeparam, prompt, rubric) + + + def handle_ajax(self, dispatch, get): + ''' + This is called by courseware.module_render, to handle an AJAX call. + "get" is request.POST. + + Returns a json dictionary: + { 'progress_changed' : True/False, + 'progress' : 'none'/'in_progress'/'done', + } + ''' + handlers = { + 'problem_get': self.get_problem, + 'problem_check': self.check_problem, + 'problem_reset': self.reset_problem, + 'problem_save': self.save_problem, + 'problem_show': self.get_answer, + 'score_update': self.update_score, + 'message_post' : self.message_post, + } + + if dispatch not in handlers: + return 'Error' + + before = self.get_progress() + d = handlers[dispatch](get) + after = self.get_progress() + d.update({ + 'progress_changed': after != before, + 'progress_status': Progress.to_js_status_str(after), + }) + return json.dumps(d, cls=ComplexEncoder) diff --git a/common/lib/xmodule/xmodule/self_assessment_module.py b/common/lib/xmodule/xmodule/self_assessment_module.py index 0b7cc90994..1b10fab9ac 100644 --- a/common/lib/xmodule/xmodule/self_assessment_module.py +++ b/common/lib/xmodule/xmodule/self_assessment_module.py @@ -93,11 +93,6 @@ class SelfAssessmentModule(): """ - self.xml = xml - self.inputfields = inputfields - self.context = context - self.system = system - # Load instance state if instance_state is not None: instance_state = json.loads(instance_state)