Projet

Général

Profil

0001-misc-add-parent-variable-to-lazy-formdata-39803.patch

Benjamin Dauvergne, 12 février 2020 19:49

Télécharger (3,31 ko)

Voir les différences:

Subject: [PATCH] misc: add parent variable to lazy formdata (#39803)

 tests/test_formdata.py | 33 +++++++++++++++++++++++++++++++++
 wcs/variables.py       | 18 ++++++++++++++++++
 2 files changed, 51 insertions(+)
tests/test_formdata.py
1790 1790
    assert formdef.data_class().get(formdata.id).user_id is None
1791 1791
    assert formdef.data_class().get(formdata.id).user_label == 'blah xxx'
1792 1792
    assert formdef.data_class().get(formdata.id).get_user_label() == 'blah xxx'
1793

  
1794

  
1795
def test_form_parent(pub):
1796
    formdef = FormDef()
1797
    formdef.name = 'foobar'
1798
    formdef.fields = [fields.StringField(id='0', label='foo', varname='foo')]
1799
    formdef.store()
1800

  
1801
    parent = formdef.data_class()()
1802
    parent.data = {'0': 'hello'}
1803
    parent.store()
1804

  
1805
    child = formdef.data_class()()
1806
    child.data = {'0': 'world'}
1807
    child.submission_context = {
1808
        'orig_formdef_id': formdef.id,
1809
        'orig_formdata_id': parent.id,
1810
    }
1811
    variables = parent.get_substitution_variables()
1812
    assert variables.get('form_var_foo') == 'hello'
1813
    assert variables.get('form_parent') is None
1814

  
1815
    assert str(variables['form'].var.foo) == 'hello'
1816
    assert variables['form'].parent is None
1817

  
1818
    variables = child.get_substitution_variables()
1819
    assert variables.get('form_var_foo') == 'world'
1820
    assert variables.get('form_parent_form_var_foo') == 'hello'
1821
    assert variables.get('form_parent') is not None
1822

  
1823
    assert str(variables['form'].var.foo) == 'world'
1824
    assert str(variables['form'].parent['form'].var.foo) == 'hello'
1825
    assert variables['form'].parent is not None
wcs/variables.py
29 29
from .qommon.templatetags.qommon import parse_datetime
30 30
from .qommon.storage import (Or, Equal, NotEqual)
31 31

  
32
from .formdef import FormDef
33

  
32 34

  
33 35
class LazyFormDefObjectsManager(object):
34 36
    def __init__(self, formdef, formdata=None, criterias=None, order_by=None):
......
421 423

  
422 424
        return LazyFormDataLinks(self._formdata)
423 425

  
426
    @property
427
    def parent(self):
428
        if not self._formdata.submission_context:
429
            return None
430
        if 'orig_formdef_id' not in self._formdata.submission_context:
431
            return None
432
        if 'orig_formdata_id' not in self._formdata.submission_context:
433
            return None
434
        formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True)
435
        if formdef is None:
436
            return None
437
        formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True)
438
        if formdata is None:
439
            return None
440
        return formdata.get_substitution_variables()
441

  
424 442
    def export_to_json(self, include_files=True):
425 443
        # this gets used to generate an email attachment :/
426 444
        return self._formdata.export_to_json(include_files=include_files)
427
-