From 958f85eb1ecf5f1e6eb9964db28a1a0aeaba0a20 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 20 Aug 2018 02:49:10 -0400 Subject: [PATCH] Fix YAML quoting issues. Signed-off-by: Roberto Rosario --- mayan/apps/smart_settings/classes.py | 11 ++++------ mayan/apps/smart_settings/forms.py | 30 ++++++++++++++++++---------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/mayan/apps/smart_settings/classes.py b/mayan/apps/smart_settings/classes.py index 2e02b48e17..84f31469eb 100644 --- a/mayan/apps/smart_settings/classes.py +++ b/mayan/apps/smart_settings/classes.py @@ -93,9 +93,10 @@ class Setting(object): @classmethod def dump_data(cls): dictionary = {} + for setting in cls.get_all(): - if setting.quoted: - dictionary[setting.global_name] = '{}'.format(setting.value) + if isinstance(setting.value, Promise): + dictionary[setting.global_name] = force_text(setting.value) else: dictionary[setting.global_name] = setting.value @@ -169,9 +170,5 @@ class Setting(object): @value.setter def value(self, value): # value is in YAML format - if self.quoted: - self.yaml = '\'{}\''.format(value) - value = '\'{}\''.format(value) - else: - self.yaml = value + self.yaml = value self.raw_value = Setting.deserialize_value(value) diff --git a/mayan/apps/smart_settings/forms.py b/mayan/apps/smart_settings/forms.py index 3b3033d3ba..4de944332e 100644 --- a/mayan/apps/smart_settings/forms.py +++ b/mayan/apps/smart_settings/forms.py @@ -15,18 +15,28 @@ class SettingForm(forms.Form): def __init__(self, *args, **kwargs): super(SettingForm, self).__init__(*args, **kwargs) - self.fields['value'].help_text = self.initial['setting'].help_text - self.fields['value'].initial = self.initial['setting'].serialized_value + self.setting = self.initial['setting'] + self.fields['value'].help_text = self.setting.help_text + self.fields['value'].initial = self.setting.serialized_value def clean(self): + quotes = ['"', "'"] + + if self.setting.quoted: + stripped = self.cleaned_data['value'].strip() + + if stripped[0] not in quotes or stripped[-1] not in quotes: + raise ValidationError( + _( + 'Value must be properly quoted.' + ) + ) + try: yaml.safe_load(self.cleaned_data['value']) except yaml.YAMLError as exception: - try: - yaml.safe_load('{}'.format(self.cleaned_data['value'])) - except yaml.YAMLError as exception: - raise ValidationError( - _( - '"%s" not a valid entry.' - ) % self.cleaned_data['value'] - ) + raise ValidationError( + _( + '"%s" not a valid entry.' + ) % self.cleaned_data['value'] + )