From dd78fe80822d09d82bac345e87bc1d3fbca01d5a Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 19 Dec 2018 12:16:32 +0100 Subject: [PATCH 2/3] environment: allow forcing JSON interpreation of values (#28930) --- .../0019_variable_interpret_as_json.py | 20 +++++++++++++++++++ hobo/environment/models.py | 11 ++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 hobo/environment/migrations/0019_variable_interpret_as_json.py diff --git a/hobo/environment/migrations/0019_variable_interpret_as_json.py b/hobo/environment/migrations/0019_variable_interpret_as_json.py new file mode 100644 index 0000000..3fefb8c --- /dev/null +++ b/hobo/environment/migrations/0019_variable_interpret_as_json.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.13 on 2018-12-19 11:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('environment', '0018_auto_20161102_1929'), + ] + + operations = [ + migrations.AddField( + model_name='variable', + name='interpret_as_json', + field=models.BooleanField(default=False, verbose_name='interpret as JSON'), + ), + ] diff --git a/hobo/environment/models.py b/hobo/environment/models.py index a3de536..4628e9d 100644 --- a/hobo/environment/models.py +++ b/hobo/environment/models.py @@ -28,6 +28,7 @@ class Variable(models.Model): value = models.TextField(verbose_name=_('value'), blank=True, help_text=_('start with [ or { for a JSON document')) + interpret_as_json = models.BooleanField(default=False, verbose_name=_('interpret as JSON')) auto = models.BooleanField(default=False) service_type = models.ForeignKey(ContentType, null=True) service_pk = models.PositiveIntegerField(null=True) @@ -39,9 +40,15 @@ class Variable(models.Model): return self.label return self.name + @property + def is_json_content(self): + return (self.interpret_as_json or + self.value[0] in '{[' or + self.value in ('true', 'false')) + @property def json(self): - if self.value and (self.value[0] in '{[' or self.value in ('true', 'false')): + if self.value and self.is_json_content: try: return json.loads(self.value) except ValueError: @@ -49,7 +56,7 @@ class Variable(models.Model): return self.value def clean(self): - if self.value and (self.value[0] in '{[' or self.value in ('true', 'false')): + if self.value and self.is_json_content: try: json.loads(self.value) except ValueError: -- 2.18.0