From 6a13e2adc84e41cc8dd214abbf94b3b8f9741b3b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 8 Jul 2015 03:31:45 -0400 Subject: [PATCH] Make a clear distinction between serialized and deserialized setting values. --- mayan/apps/smart_settings/apps.py | 2 +- mayan/apps/smart_settings/classes.py | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/mayan/apps/smart_settings/apps.py b/mayan/apps/smart_settings/apps.py index f1dd31db84..a6ed9ffe61 100644 --- a/mayan/apps/smart_settings/apps.py +++ b/mayan/apps/smart_settings/apps.py @@ -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,)) diff --git a/mayan/apps/smart_settings/classes.py b/mayan/apps/smart_settings/classes.py index 1d729b93af..cc56f9d0af 100644 --- a/mayan/apps/smart_settings/classes.py +++ b/mayan/apps/smart_settings/classes.py @@ -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)