diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index ee69d925d0..659590b5b4 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_module.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_module.py @@ -4,9 +4,8 @@ from lxml import etree from pkg_resources import resource_string -from .editing_module import EditingDescriptor +from xmodule.raw_module import RawDescriptor from .x_module import XModule -from .xml_module import XmlDescriptor from xmodule.open_ended_grading_classes.combined_open_ended_modulev1 import CombinedOpenEndedV1Module, CombinedOpenEndedV1Descriptor log = logging.getLogger("mitx.courseware") @@ -134,7 +133,7 @@ class CombinedOpenEndedModule(XModule): } self.child_descriptor = descriptors[version_index](self.system) - self.child_definition = descriptors[version_index].definition_from_xml(etree.fromstring(definition['xml_string']), self.system) + self.child_definition = descriptors[version_index].definition_from_xml(etree.fromstring(definition['data']), self.system) self.child_module = modules[version_index](self.system, location, self.child_definition, self.child_descriptor, instance_state = json.dumps(instance_state), metadata = self.metadata, static_data= static_data) @@ -165,11 +164,11 @@ class CombinedOpenEndedModule(XModule): return self.child_module.display_name -class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor): +class CombinedOpenEndedDescriptor(RawDescriptor): """ Module for adding combined open ended questions """ - mako_template = "widgets/html-edit.html" + mako_template = "widgets/raw-edit.html" module_class = CombinedOpenEndedModule filename_extension = "xml" @@ -177,35 +176,3 @@ class CombinedOpenEndedDescriptor(XmlDescriptor, EditingDescriptor): has_score = True template_dir_name = "combinedopenended" - js = {'coffee': [resource_string(__name__, 'js/src/html/edit.coffee')]} - js_module_name = "HTMLEditingDescriptor" - - @classmethod - def definition_from_xml(cls, xml_object, system): - """ - Pull out the individual tasks, the rubric, and the prompt, and parse - - Returns: - { - 'rubric': 'some-html', - 'prompt': 'some-html', - 'task_xml': dictionary of xml strings, - } - """ - - return {'xml_string' : etree.tostring(xml_object), 'metadata' : xml_object.attrib} - - - def definition_to_xml(self, resource_fs): - '''Return an xml element representing this definition.''' - elt = etree.Element('combinedopenended') - - def add_child(k): - child_str = '<{tag}>{body}'.format(tag=k, body=self.definition[k]) - child_node = etree.fromstring(child_str) - elt.append(child_node) - - for child in ['task']: - add_child(child) - - return elt diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py index 50f9534717..31d26fd3c3 100644 --- a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py @@ -22,7 +22,7 @@ from xmodule.stringify import stringify_children from xmodule.xml_module import XmlDescriptor from xmodule.modulestore import Location from capa.util import * -from peer_grading_service import PeerGradingService +from peer_grading_service import PeerGradingService, MockPeerGradingService import controller_query_service from datetime import datetime @@ -106,8 +106,14 @@ class OpenEndedChild(object): # Used for progress / grading. Currently get credit just for # completion (doesn't matter if you self-assessed correct/incorrect). self._max_score = static_data['max_score'] - self.peer_gs = PeerGradingService(system.open_ended_grading_interface, system) - self.controller_qs = controller_query_service.ControllerQueryService(system.open_ended_grading_interface,system) + if system.open_ended_grading_interface: + self.peer_gs = PeerGradingService(system.open_ended_grading_interface, system) + self.controller_qs = controller_query_service.ControllerQueryService(system.open_ended_grading_interface,system) + else: + self.peer_gs = MockPeerGradingService() + self.controller_qs = None + + self.system = system @@ -461,11 +467,14 @@ class OpenEndedChild(object): return success, allowed_to_submit, error_message def get_eta(self): - response = self.controller_qs.check_for_eta(self.location_string) - try: - response = json.loads(response) - except: - pass + if self.controller_qs: + response = self.controller_qs.check_for_eta(self.location_string) + try: + response = json.loads(response) + except: + pass + else: + return "" success = response['success'] if isinstance(success, basestring): diff --git a/common/lib/xmodule/xmodule/peer_grading_module.py b/common/lib/xmodule/xmodule/peer_grading_module.py index e262db5615..16c118a434 100644 --- a/common/lib/xmodule/xmodule/peer_grading_module.py +++ b/common/lib/xmodule/xmodule/peer_grading_module.py @@ -14,7 +14,7 @@ from xmodule.modulestore import Location from xmodule.modulestore.django import modulestore from timeinfo import TimeInfo -from xmodule.open_ended_grading_classes.peer_grading_service import PeerGradingService, GradingServiceError +from xmodule.open_ended_grading_classes.peer_grading_service import PeerGradingService, GradingServiceError, MockPeerGradingService log = logging.getLogger(__name__) @@ -53,13 +53,28 @@ class PeerGradingModule(XModule): #We need to set the location here so the child modules can use it system.set('location', location) self.system = system - self.peer_gs = PeerGradingService(self.system.open_ended_grading_interface, self.system) + if(self.system.open_ended_grading_interface): + self.peer_gs = PeerGradingService(self.system.open_ended_grading_interface, self.system) + else: + self.peer_gs = MockPeerGradingService() self.use_for_single_location = self.metadata.get('use_for_single_location', USE_FOR_SINGLE_LOCATION) if isinstance(self.use_for_single_location, basestring): self.use_for_single_location = (self.use_for_single_location in TRUE_DICT) + self.link_to_location = self.metadata.get('link_to_location', USE_FOR_SINGLE_LOCATION) + if self.use_for_single_location == True: + try: + self.linked_problem = modulestore().get_instance(self.system.course_id, self.link_to_location) + except: + log.error("Linked location {0} for peer grading module {1} does not exist".format( + self.link_to_location, self.location)) + raise + due_date = self.linked_problem.metadata.get('peer_grading_due', None) + if due_date: + self.metadata['due'] = due_date + self.is_graded = self.metadata.get('is_graded', IS_GRADED) if isinstance(self.is_graded, basestring): self.is_graded = (self.is_graded in TRUE_DICT) @@ -75,17 +90,6 @@ class PeerGradingModule(XModule): self.display_due_date = self.timeinfo.display_due_date - self.link_to_location = self.metadata.get('link_to_location', USE_FOR_SINGLE_LOCATION) - if self.use_for_single_location == True: - try: - self.linked_problem = modulestore().get_instance(self.system.course_id, self.link_to_location) - except: - log.error("Linked location {0} for peer grading module {1} does not exist".format( - self.link_to_location, self.location)) - raise - due_date = self.linked_problem.metadata.get('peer_grading_due', None) - if due_date: - self.metadata['due'] = due_date self.ajax_url = self.system.ajax_url if not self.ajax_url.endswith("/"): @@ -562,7 +566,7 @@ class PeerGradingDescriptor(XmlDescriptor, EditingDescriptor): """ Module for adding combined open ended questions """ - mako_template = "widgets/html-edit.html" + mako_template = "widgets/raw-edit.html" module_class = PeerGradingModule filename_extension = "xml" @@ -606,13 +610,4 @@ class PeerGradingDescriptor(XmlDescriptor, EditingDescriptor): def definition_to_xml(self, resource_fs): '''Return an xml element representing this definition.''' elt = etree.Element('peergrading') - - def add_child(k): - child_str = '<{tag}>{body}'.format(tag=k, body=self.definition[k]) - child_node = etree.fromstring(child_str) - elt.append(child_node) - - for child in ['task']: - add_child(child) - return elt