From 3e6d5eaaf5f27c4329b02cde9ec7d79fb50d4fd0 Mon Sep 17 00:00:00 2001 From: Paul Marillonnet Date: Tue, 14 Feb 2023 11:54:41 +0100 Subject: [PATCH] environment: allow templated sites variable values (#74500) --- hobo/environment/models.py | 8 ++++++-- tests/test_environment.py | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/hobo/environment/models.py b/hobo/environment/models.py index 456c211..24b9c10 100644 --- a/hobo/environment/models.py +++ b/hobo/environment/models.py @@ -73,8 +73,12 @@ class Variable(models.Model): return self.name def _parse_value_as_json(self): - if self.value and ( - self.value[0] in '{[' or self.value in ('true', 'false', 'null') or FLOAT_RE.match(self.value) + if ( + self.value + and not self.value.startswith(('{{', '{%')) + and ( + self.value[0] in '{[' or self.value in ('true', 'false', 'null') or FLOAT_RE.match(self.value) + ) ): try: return json.loads(self.value) diff --git a/tests/test_environment.py b/tests/test_environment.py index 8c5949f..cc3a0d5 100644 --- a/tests/test_environment.py +++ b/tests/test_environment.py @@ -236,6 +236,26 @@ def test_new_variable_view(app, admin_user): assert Variable.objects.all()[0].value == 'foofoo' +def test_new_variable_templated_value(app, admin_user): + app = login(app) + response = app.get('/sites/new-variable') + response.form['name'] = 'foo' + response.form['label'] = 'bar' + response.form['value'] = '{{ foobar }}' + response = response.form.submit() + assert response.location == '/sites/variables' + assert Variable.objects.all()[0].name == 'foo' + assert Variable.objects.all()[0].label == 'bar' + assert Variable.objects.all()[0].value == '{{ foobar }}' + response = app.get('/sites/new-variable') + response.form['name'] = 'foo' + response.form['label'] = 'bar' + response.form['value'] = '{% firstof foofoo "Plop" %}' + response = response.form.submit() + assert response.location == '/sites/variables' + assert Variable.objects.all()[0].value == '{% firstof foofoo "Plop" %}' + + def test_new_variable_service_view(app, admin_user): app = login(app) Combo.objects.create(