From 711cecc69af51b2dfe9715d208b96baa6cace406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 22 Apr 2021 13:57:32 +0200 Subject: [PATCH] misc: don't expose extra keys with invalid format as variables (#53345) --- tests/test_formdata.py | 20 +++++++++++--------- wcs/variables.py | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/tests/test_formdata.py b/tests/test_formdata.py index 7189b45a3..a8d14665d 100644 --- a/tests/test_formdata.py +++ b/tests/test_formdata.py @@ -2635,8 +2635,8 @@ def test_lazy_structured_items(pub, variable_test_data): 'type': 'formula', 'value': repr( [ - {'id': '1', 'text': 'un', 'more': 'foo', 'url': 'xxx'}, - {'id': '2', 'text': 'deux', 'more': 'bar', 'url': 'yyy'}, + {'id': '1', 'text': 'un', 'more': 'foo', 'url': 'xxx', 'invalid:key': 'xxx'}, + {'id': '2', 'text': 'deux', 'more': 'bar', 'url': 'yyy', 'invalid:key': 'yyy'}, ] ), } @@ -2680,14 +2680,16 @@ def test_lazy_structured_items(pub, variable_test_data): tmpl = Template('{% for x in form_var_plop_structured %}{{x.more}}{% endfor %}') assert tmpl.render(context) == 'foobar' - assert 'form_var_plop_0_url' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() - assert 'form_var_plop_1_more' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() - assert 'form_var_plop_structured' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() - assert 'form_var_plop_raw' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() + flat_keys = pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() + assert 'form_var_plop_0_url' in flat_keys + assert 'form_var_plop_1_more' in flat_keys + assert 'form_var_plop_structured' in flat_keys + assert 'form_var_plop_raw' in flat_keys + assert 'form_var_plop_0_invalid:key' not in flat_keys - assert 'form_var_plop2' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() - assert 'form_var_plop2_raw' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() - assert 'form_var_plop2_structured' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys() + assert 'form_var_plop2' in flat_keys + assert 'form_var_plop2_raw' in flat_keys + assert 'form_var_plop2_structured' in flat_keys def test_formdata_user_field(pub, variable_test_data): diff --git a/wcs/variables.py b/wcs/variables.py index 7a37037a9..621097615 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -804,7 +804,8 @@ class LazyFieldVarStructured(LazyFieldVar): def walk(base, value): if isinstance(value, dict): for k, v in value.items(): - walk(k if not base else base + '_' + k, v) + if CompatibilityNamesDict.valid_key_regex.match(k): + walk(k if not base else base + '_' + k, v) else: keys.append(base)