Make a clear distinction between serialized and deserialized setting values.

This commit is contained in:
Roberto Rosario
2015-07-08 03:31:45 -04:00
parent ead8ba9a12
commit 6a13e2adc8
2 changed files with 19 additions and 8 deletions

View File

@@ -23,7 +23,7 @@ class SmartSettingsApp(MayanAppConfig):
SourceColumn(source=Namespace, label=_('Setting count'), attribute=encapsulate(lambda instance: len(instance.settings)))
SourceColumn(source=Setting, label=_('Name'), attribute=encapsulate(lambda instance: setting_widget(instance)))
SourceColumn(source=Setting, label=_('Value'), attribute='value')
SourceColumn(source=Setting, label=_('Value'), attribute='serialized_value')
SourceColumn(source=Setting, label=_('Found in path'), attribute=encapsulate(lambda instance: exists_widget(instance.value) if instance.is_path else _('n/a')))
menu_object.bind_links(links=(link_namespace_detail,), sources=(Namespace,))

View File

@@ -37,19 +37,30 @@ class Setting(object):
self.default = default
self.help_text = help_text
self.is_path = is_path
self._value = None
self.yaml = None
namespace.settings.append(self)
def __unicode__(self):
return unicode(self.global_name)
@property
def value(self):
if not self._value:
self._value = yaml.safe_load(getattr(settings, self.global_name, yaml.safe_dump(self.default)))
def serialized_value(self):
if not self.yaml:
self.yaml = yaml.safe_dump(getattr(settings, self.global_name, self.default), allow_unicode=True)
return self._value
return self.yaml
@serialized_value.setter
def serialized_value(self, value):
self.yaml = value
@property
def value(self):
if not self.yaml:
self.yaml = yaml.safe_dump(getattr(settings, self.global_name, self.default), allow_unicode=True)
return yaml.safe_load(self.yaml)
@value.setter
def value(self, new_value):
self._value = new_value
def value(self, value):
self.yaml = yaml.safe_dump(self.python_value, allow_unicode=True)