From 785e8e17cb38006dd1a99db45cd5898187b620ce Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 12 Feb 2020 19:48:49 +0100 Subject: [PATCH] misc: add parent variable to lazy formdata (#39803) --- tests/test_formdata.py | 33 +++++++++++++++++++++++++++++++++ wcs/variables.py | 18 ++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/tests/test_formdata.py b/tests/test_formdata.py index 13b4e426..20916a4c 100644 --- a/tests/test_formdata.py +++ b/tests/test_formdata.py @@ -1790,3 +1790,36 @@ def test_user_label(pub): assert formdef.data_class().get(formdata.id).user_id is None assert formdef.data_class().get(formdata.id).user_label == 'blah xxx' assert formdef.data_class().get(formdata.id).get_user_label() == 'blah xxx' + + +def test_form_parent(pub): + formdef = FormDef() + formdef.name = 'foobar' + formdef.fields = [fields.StringField(id='0', label='foo', varname='foo')] + formdef.store() + + parent = formdef.data_class()() + parent.data = {'0': 'hello'} + parent.store() + + child = formdef.data_class()() + child.data = {'0': 'world'} + child.submission_context = { + 'orig_formdef_id': formdef.id, + 'orig_formdata_id': parent.id, + } + variables = parent.get_substitution_variables() + assert variables.get('form_var_foo') == 'hello' + assert variables.get('form_parent') is None + + assert str(variables['form'].var.foo) == 'hello' + assert variables['form'].parent is None + + variables = child.get_substitution_variables() + assert variables.get('form_var_foo') == 'world' + assert variables.get('form_parent_form_var_foo') == 'hello' + assert variables.get('form_parent') is not None + + assert str(variables['form'].var.foo) == 'world' + assert str(variables['form'].parent['form'].var.foo) == 'hello' + assert variables['form'].parent is not None diff --git a/wcs/variables.py b/wcs/variables.py index 16118c45..0c398545 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -29,6 +29,8 @@ from .qommon.evalutils import make_datetime from .qommon.templatetags.qommon import parse_datetime from .qommon.storage import (Or, Equal, NotEqual) +from .formdef import FormDef + class LazyFormDefObjectsManager(object): def __init__(self, formdef, formdata=None, criterias=None, order_by=None): @@ -421,6 +423,22 @@ class LazyFormData(LazyFormDef): return LazyFormDataLinks(self._formdata) + @property + def parent(self): + if not self._formdata.submission_context: + return None + if 'orig_formdef_id' not in self._formdata.submission_context: + return None + if 'orig_formdata_id' not in self._formdata.submission_context: + return None + formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True) + if formdef is None: + return None + formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True) + if formdata is None: + return None + return formdata.get_substitution_variables() + def export_to_json(self, include_files=True): # this gets used to generate an email attachment :/ return self._formdata.export_to_json(include_files=include_files) -- 2.24.0