Commit 9e14e22c by Vik Paruchuri

Move prompt and rubric to combined open ended instead of defining them in each task

parent 3bf532e1
...@@ -98,6 +98,8 @@ class CombinedOpenEndedModule(XModule): ...@@ -98,6 +98,8 @@ class CombinedOpenEndedModule(XModule):
self.static_data = { self.static_data = {
'max_score' : self._max_score, 'max_score' : self._max_score,
'max_attempts' : self.max_attempts, 'max_attempts' : self.max_attempts,
'prompt' : definition['prompt'],
'rubric' : definition['rubric']
} }
self.task_xml=definition['task_xml'] self.task_xml=definition['task_xml']
...@@ -371,16 +373,20 @@ class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -371,16 +373,20 @@ class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
'hintprompt': 'some-html' 'hintprompt': 'some-html'
} }
""" """
expected_children = ['task'] expected_children = ['task', 'rubric', 'prompt']
for child in expected_children: for child in expected_children:
if len(xml_object.xpath(child)) == 0 : if len(xml_object.xpath(child)) == 0 :
raise ValueError("Combined Open Ended definition must include at least one '{0}' tag".format(child)) raise ValueError("Combined Open Ended definition must include at least one '{0}' tag".format(child))
def parse(k): def parse_task(k):
"""Assumes that xml_object has child k""" """Assumes that xml_object has child k"""
return [stringify_children(xml_object.xpath(k)[i]) for i in xrange(0,len(xml_object.xpath(k)))] return [stringify_children(xml_object.xpath(k)[i]) for i in xrange(0,len(xml_object.xpath(k)))]
return {'task_xml': parse('task')} def parse(k):
"""Assumes that xml_object has child k"""
return xml_object.xpath(k)[0]
return {'task_xml': parse_task('task'), 'prompt' : parse('prompt'), 'rubric' : parse('rubric')}
def definition_to_xml(self, resource_fs): def definition_to_xml(self, resource_fs):
......
...@@ -40,8 +40,6 @@ class OpenEndedModule(openendedchild.OpenEndedChild): ...@@ -40,8 +40,6 @@ class OpenEndedModule(openendedchild.OpenEndedChild):
def setup_response(self, system, location, definition, descriptor): def setup_response(self, system, location, definition, descriptor):
oeparam = definition['oeparam'] oeparam = definition['oeparam']
prompt = definition['prompt']
rubric = definition['rubric']
self.url = definition.get('url', None) self.url = definition.get('url', None)
self.queue_name = definition.get('queuename', self.DEFAULT_QUEUE) self.queue_name = definition.get('queuename', self.DEFAULT_QUEUE)
...@@ -53,12 +51,12 @@ class OpenEndedModule(openendedchild.OpenEndedChild): ...@@ -53,12 +51,12 @@ class OpenEndedModule(openendedchild.OpenEndedChild):
if oeparam is None: if oeparam is None:
raise ValueError("No oeparam found in problem xml.") raise ValueError("No oeparam found in problem xml.")
if prompt is None: if self.prompt is None:
raise ValueError("No prompt found in problem xml.") raise ValueError("No prompt found in problem xml.")
if rubric is None: if self.rubric is None:
raise ValueError("No rubric found in problem xml.") raise ValueError("No rubric found in problem xml.")
self._parse(oeparam, prompt, rubric, system) self._parse(oeparam, self.prompt, self.rubric, system)
if self.created=="True" and self.state == self.ASSESSING: if self.created=="True" and self.state == self.ASSESSING:
self.created="False" self.created="False"
...@@ -530,7 +528,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -530,7 +528,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
} }
""" """
for child in ['openendedrubric', 'prompt', 'openendedparam']: for child in ['openendedparam']:
if len(xml_object.xpath(child)) != 1: if len(xml_object.xpath(child)) != 1:
raise ValueError("Open Ended definition must include exactly one '{0}' tag".format(child)) raise ValueError("Open Ended definition must include exactly one '{0}' tag".format(child))
...@@ -538,10 +536,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -538,10 +536,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
"""Assumes that xml_object has child k""" """Assumes that xml_object has child k"""
return xml_object.xpath(k)[0] return xml_object.xpath(k)[0]
return {'rubric': parse('openendedrubric'), return {'oeparam': parse('openendedparam'),}
'prompt': parse('prompt'),
'oeparam': parse('openendedparam'),
}
def definition_to_xml(self, resource_fs): def definition_to_xml(self, resource_fs):
...@@ -553,7 +548,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -553,7 +548,7 @@ class OpenEndedDescriptor(XmlDescriptor, EditingDescriptor):
child_node = etree.fromstring(child_str) child_node = etree.fromstring(child_str)
elt.append(child_node) elt.append(child_node)
for child in ['openendedrubric', 'prompt', 'openendedparam']: for child in ['openendedparam']:
add_child(child) add_child(child)
return elt return elt
......
...@@ -127,6 +127,9 @@ class OpenEndedChild(): ...@@ -127,6 +127,9 @@ class OpenEndedChild():
self.attempts = instance_state.get('attempts', 0) self.attempts = instance_state.get('attempts', 0)
self.max_attempts = static_data['max_attempts'] self.max_attempts = static_data['max_attempts']
self.prompt = static_data['prompt']
self.rubric = static_data['rubric']
# Used for progress / grading. Currently get credit just for # Used for progress / grading. Currently get credit just for
# completion (doesn't matter if you self-assessed correct/incorrect). # completion (doesn't matter if you self-assessed correct/incorrect).
self._max_score = static_data['max_score'] self._max_score = static_data['max_score']
......
...@@ -33,8 +33,6 @@ log = logging.getLogger("mitx.courseware") ...@@ -33,8 +33,6 @@ log = logging.getLogger("mitx.courseware")
class SelfAssessmentModule(openendedchild.OpenEndedChild): class SelfAssessmentModule(openendedchild.OpenEndedChild):
def setup_response(self, system, location, definition, descriptor): def setup_response(self, system, location, definition, descriptor):
self.rubric = definition['rubric']
self.prompt = definition['prompt']
self.submit_message = definition['submitmessage'] self.submit_message = definition['submitmessage']
self.hint_prompt = definition['hintprompt'] self.hint_prompt = definition['hintprompt']
......
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