Projet

Général

Profil

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

Benjamin Dauvergne, 02 mars 2020 15:16

Télécharger (3,32 ko)

Voir les différences:

Subject: [PATCH 1/2] 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
1861 1861
    assert formdef.data_class().get(formdata.id).user_id is None
1862 1862
    assert formdef.data_class().get(formdata.id).user_label == 'blah xxx'
1863 1863
    assert formdef.data_class().get(formdata.id).get_user_label() == 'blah xxx'
1864

  
1865

  
1866
def test_form_parent(pub):
1867
    formdef = FormDef()
1868
    formdef.name = 'foobar'
1869
    formdef.fields = [fields.StringField(id='0', label='foo', varname='foo')]
1870
    formdef.store()
1871

  
1872
    parent = formdef.data_class()()
1873
    parent.data = {'0': 'hello'}
1874
    parent.store()
1875

  
1876
    child = formdef.data_class()()
1877
    child.data = {'0': 'world'}
1878
    child.submission_context = {
1879
        'orig_formdef_id': formdef.id,
1880
        'orig_formdata_id': parent.id,
1881
    }
1882
    variables = parent.get_substitution_variables()
1883
    assert variables.get('form_var_foo') == 'hello'
1884
    assert variables.get('form_parent') is None
1885

  
1886
    assert str(variables['form'].var.foo) == 'hello'
1887
    assert variables['form'].parent is None
1888

  
1889
    variables = child.get_substitution_variables()
1890
    assert variables.get('form_var_foo') == 'world'
1891
    assert variables.get('form_parent_form_var_foo') == 'hello'
1892
    assert variables.get('form_parent') is not None
1893

  
1894
    assert str(variables['form'].var.foo) == 'world'
1895
    assert str(variables['form'].parent['form'].var.foo) == 'hello'
1896
    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):
......
431 433

  
432 434
        return LazyFormDataLinks(self._formdata)
433 435

  
436
    @property
437
    def parent(self):
438
        if not self._formdata.submission_context:
439
            return None
440
        if 'orig_formdef_id' not in self._formdata.submission_context:
441
            return None
442
        if 'orig_formdata_id' not in self._formdata.submission_context:
443
            return None
444
        formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True)
445
        if formdef is None:
446
            return None
447
        formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True)
448
        if formdata is None:
449
            return None
450
        return formdata.get_substitution_variables()
451

  
434 452
    def export_to_json(self, include_files=True):
435 453
        # this gets used to generate an email attachment :/
436 454
        return self._formdata.export_to_json(include_files=include_files)
437
-