From 289067de6dc72abf95c549592ed4c3fe3f692be4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 27 Jul 2020 13:51:49 +0200 Subject: [PATCH] fields: extend field live dependency to structured/live data (#45342) --- tests/test_form_pages.py | 26 ++++++++++++++++++++++++++ wcs/fields.py | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 073a5a93f..96d253510 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -7232,6 +7232,32 @@ def test_field_live_comment_content(pub, http_requests): assert live_resp.json['result']['7']['content'] == '

bla hello bla

' +def test_field_live_comment_content_from_structured_item_data(pub, http_requests): + FormDef.wipe() + formdef = FormDef() + formdef.name = 'Foo' + formdef.fields = [ + fields.ItemField(type='item', id='1', label='Foo', + varname='bar', + data_source={ + 'type': 'json', + 'value': 'http://remote.example.net/json-list-extra' + } + ), + fields.CommentField(id='7', label='bla {{form_var_bar_structured_foo}} bla', type='comment'), + ] + formdef.store() + formdef.data_class().wipe() + + app = get_app(pub) + resp = app.get('/foo/') + assert 'f1' in resp.form.fields + assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true' + resp.form['f1'] = 'a' + live_resp = app.post('/foo/live', params=resp.form.submit_fields()) + assert live_resp.json['result']['7']['content'] == '

bla bar bla

' + + def test_form_edit_and_backoffice_field_change(pub): create_user(pub) diff --git a/wcs/fields.py b/wcs/fields.py index 55cab6466..be0d45422 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -463,7 +463,9 @@ class Field(object): return True def get_referenced_varnames(self, formdef, value): - return re.findall(r'\b%s[_\.]var[_\.]([a-zA-Z0-9_]+?)(?:_raw|\b)' % formdef.var_prefix, value or '') + return re.findall( + r'\b%s[_\.]var[_\.]([a-zA-Z0-9_]+?)(?:_raw|_live_|_structured_|\b)' % formdef.var_prefix, + value or '') def get_condition_varnames(self, formdef): return self.get_referenced_varnames(formdef, self.condition['value'])