diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index 9b0cc44ab4..c1606aeeb3 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -34,6 +34,7 @@ class StringyInteger(Integer): return None +# TODO: move to fields.py and remove duplicated code. class StringyFloat(Float): """ A model type that converts from string to floats when reading from json @@ -95,7 +96,7 @@ class CapaFields(object): input_state = Object(help="Dictionary for maintaining the state of inputtypes", scope=Scope.user_state) student_answers = Object(help="Dictionary with the current student responses", scope=Scope.user_state) done = Boolean(help="Whether the student has answered the problem", scope=Scope.user_state) - display_name = String(help="Display name for this module", scope=Scope.settings) + display_name = XModule.display_name seed = StringyInteger(help="Random seed for this student", scope=Scope.user_state) weight = StringyFloat(help="How much to weight this problem by", scope=Scope.settings) markdown = String(help="Markdown source of this module", scope=Scope.settings) diff --git a/common/lib/xmodule/xmodule/mako_module.py b/common/lib/xmodule/xmodule/mako_module.py index 84db6ad779..75dd655d41 100644 --- a/common/lib/xmodule/xmodule/mako_module.py +++ b/common/lib/xmodule/xmodule/mako_module.py @@ -1,5 +1,7 @@ from .x_module import XModuleDescriptor, DescriptorSystem from .modulestore.inheritance import own_metadata +from xblock.core import Scope + class MakoDescriptorSystem(DescriptorSystem): @@ -44,10 +46,26 @@ class MakoModuleDescriptor(XModuleDescriptor): # cdodge: encapsulate a means to expose "editable" metadata fields (i.e. not internal system metadata) @property def editable_metadata_fields(self): - fields = {} - for field, value in own_metadata(self).items(): - if field in self.system_metadata_fields: +# fields = {} +# for field, value in own_metadata(self).items(): +# if field in self.system_metadata_fields: +# continue +# +# fields[field] = value +# return fields + inherited_metadata = getattr(self, '_inherited_metadata', {}) + metadata = {} + for field in self.fields: + # Only save metadata that wasn't inherited + if field.scope != Scope.settings or field.name in self.system_metadata_fields: continue - fields[field] = value - return fields + if field.name in self._model_data: + metadata[field.name] = self._model_data[field.name] + if field.name in inherited_metadata and self._model_data.get(field.name) == inherited_metadata.get( + field.name): + metadata[field.name] = str(metadata[field.name]) + ' INHERITED' + else: + metadata[field.name] = str(getattr(self, field.name)) + ' DEFAULT' + + return metadata diff --git a/common/lib/xmodule/xmodule/xml_module.py b/common/lib/xmodule/xmodule/xml_module.py index f9de929c05..5846b4c18a 100644 --- a/common/lib/xmodule/xmodule/xml_module.py +++ b/common/lib/xmodule/xmodule/xml_module.py @@ -155,6 +155,7 @@ class XmlDescriptor(XModuleDescriptor): Remove any attribute named in cls.metadata_attributes from the supplied xml_object """ + # TODO: change to use Fields definitions for attr in cls.metadata_attributes: if xml_object.get(attr) is not None: del xml_object.attrib[attr]