Fix YAML quoting issues.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-08-20 02:49:10 -04:00
parent 04868e66bc
commit 958f85eb1e
2 changed files with 24 additions and 17 deletions

View File

@@ -93,9 +93,10 @@ class Setting(object):
@classmethod @classmethod
def dump_data(cls): def dump_data(cls):
dictionary = {} dictionary = {}
for setting in cls.get_all(): for setting in cls.get_all():
if setting.quoted: if isinstance(setting.value, Promise):
dictionary[setting.global_name] = '{}'.format(setting.value) dictionary[setting.global_name] = force_text(setting.value)
else: else:
dictionary[setting.global_name] = setting.value dictionary[setting.global_name] = setting.value
@@ -169,9 +170,5 @@ class Setting(object):
@value.setter @value.setter
def value(self, value): def value(self, value):
# value is in YAML format # value is in YAML format
if self.quoted: self.yaml = value
self.yaml = '\'{}\''.format(value)
value = '\'{}\''.format(value)
else:
self.yaml = value
self.raw_value = Setting.deserialize_value(value) self.raw_value = Setting.deserialize_value(value)

View File

@@ -15,18 +15,28 @@ class SettingForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(SettingForm, self).__init__(*args, **kwargs) super(SettingForm, self).__init__(*args, **kwargs)
self.fields['value'].help_text = self.initial['setting'].help_text self.setting = self.initial['setting']
self.fields['value'].initial = self.initial['setting'].serialized_value self.fields['value'].help_text = self.setting.help_text
self.fields['value'].initial = self.setting.serialized_value
def clean(self): 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: try:
yaml.safe_load(self.cleaned_data['value']) yaml.safe_load(self.cleaned_data['value'])
except yaml.YAMLError as exception: except yaml.YAMLError as exception:
try: raise ValidationError(
yaml.safe_load('{}'.format(self.cleaned_data['value'])) _(
except yaml.YAMLError as exception: '"%s" not a valid entry.'
raise ValidationError( ) % self.cleaned_data['value']
_( )
'"%s" not a valid entry.'
) % self.cleaned_data['value']
)