From 50508b2328262e56317d4b6580aa16d4ee0d89e9 Mon Sep 17 00:00:00 2001 From: s3lph Date: Fri, 29 Nov 2019 23:44:43 +0100 Subject: [PATCH] Fix: original template was partial overwritten, thus the rendered output was never updated --- spaceapi_server/template/__init__.py | 8 ++------ spaceapi_server/template/test/test_template.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/spaceapi_server/template/__init__.py b/spaceapi_server/template/__init__.py index 7062dea..57f985a 100644 --- a/spaceapi_server/template/__init__.py +++ b/spaceapi_server/template/__init__.py @@ -43,14 +43,10 @@ def render_traverse(obj): """ if isinstance(obj, list): # list -> recurse into each item - for i in range(len(obj)): - obj[i] = render_traverse(obj[i]) - return obj + return [render_traverse(x) for x in obj] elif isinstance(obj, dict): # dict -> recurse into the value of each (key, value) - for k, v in obj.items(): - obj[k] = render_traverse(obj[k]) - return obj + return {k: render_traverse(v) for k, v in obj.items()} elif isinstance(obj, str): # str -> template return render(obj) diff --git a/spaceapi_server/template/test/test_template.py b/spaceapi_server/template/test/test_template.py index fdbc361..a2e9153 100644 --- a/spaceapi_server/template/test/test_template.py +++ b/spaceapi_server/template/test/test_template.py @@ -22,6 +22,15 @@ class TemplateTest(unittest.TestCase): def template_test_test(value): return value == 'baz' + @staticmethod + @template_function + def template_test_function_nocache(): + TemplateTest.counter1 += 1 + return TemplateTest.counter1 + + def setUp(self) -> None: + TemplateTest.counter1 = 0 + def test_template(self): env = _env_init() self.assertEqual('"not a template"', env.from_string('not a template').render()) @@ -60,3 +69,10 @@ class TemplateTest(unittest.TestCase): self.assertEqual('test_other_bar', rendered['test_functions']['test_filter']) self.assertTrue(rendered['test_functions']['test_test_true']) self.assertFalse(rendered['test_functions']['test_test_false']) + + def test_no_cache(self): + template = ['{{ template_test_function_nocache() }}'] + r1 = render_traverse(template) + r2 = render_traverse(template) + self.assertEqual(1, r1[0]) + self.assertEqual(2, r2[0])