From 663a73aecac86fca25c94ce18dfcf590f9d109af Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 20 Sep 2019 16:09:23 +0200 Subject: [PATCH 5/5] misc: evaluate workflow-form three times to support dependency chain of length=2 --- wcs/forms/common.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/wcs/forms/common.py b/wcs/forms/common.py index 2462e80d..a3c4e2ff 100644 --- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -267,11 +267,18 @@ class FormStatusPage(Directory, FormTemplateMixin): form.attrs['data-live-url'] = self.filled.get_url() + 'live' if form and form.is_submitted(): with get_publisher().substitutions.temporary_feed(self.filled, force_mode='lazy'): - # remove fields that could be required but are not visible self.filled.evaluate_live_workflow_form(user, form) get_publisher().substitutions.invalidate_cache() get_publisher().substitutions.feed(self.filled) # recreate form to get live data source items + submitted_fields = [] + form = self.filled.get_workflow_form(user, displayed_fields=submitted_fields) + + self.filled.evaluate_live_workflow_form(user, form) + get_publisher().substitutions.invalidate_cache() + get_publisher().substitutions.feed(self.filled) + # recreate form to get live data source items + submitted_fields = [] form = self.filled.get_workflow_form(user, displayed_fields=submitted_fields) for field in submitted_fields: if not field.is_visible(self.filled.data, self.formdef) and 'f%s' % field.id in form._names: @@ -677,15 +684,22 @@ class FormStatusPage(Directory, FormTemplateMixin): if not session: return result_error('missing session') - displayed_fields = [] user = get_request().user + displayed_fields = [] form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) + self.filled.evaluate_live_workflow_form(user, form) - get_publisher().substitutions.unfeed(lambda x: x is self.filled) + get_publisher().substitutions.invalidate_cache() get_publisher().substitutions.feed(self.filled) - # reevaluate workflow form according to possible new content displayed_fields = [] form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) + + self.filled.evaluate_live_workflow_form(user, form) + get_publisher().substitutions.invalidate_cache() + get_publisher().substitutions.feed(self.filled) + displayed_fields = [] + form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) + return self.live_process_fields(form, self.filled, displayed_fields) def _q_lookup(self, component): -- 2.23.0