Projet

Général

Profil

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

Benjamin Dauvergne, 31 mars 2020 16:22

Télécharger (3,32 ko)

Voir les différences:

Subject: [PATCH 1/3] 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
1867 1867
    assert formdef.data_class().get(formdata.id).user_id is None
1868 1868
    assert formdef.data_class().get(formdata.id).user_label == 'blah xxx'
1869 1869
    assert formdef.data_class().get(formdata.id).get_user_label() == 'blah xxx'
1870

  
1871

  
1872
def test_form_parent(pub):
1873
    formdef = FormDef()
1874
    formdef.name = 'foobar'
1875
    formdef.fields = [fields.StringField(id='0', label='foo', varname='foo')]
1876
    formdef.store()
1877

  
1878
    parent = formdef.data_class()()
1879
    parent.data = {'0': 'hello'}
1880
    parent.store()
1881

  
1882
    child = formdef.data_class()()
1883
    child.data = {'0': 'world'}
1884
    child.submission_context = {
1885
        'orig_formdef_id': formdef.id,
1886
        'orig_formdata_id': parent.id,
1887
    }
1888
    variables = parent.get_substitution_variables()
1889
    assert variables.get('form_var_foo') == 'hello'
1890
    assert variables.get('form_parent') is None
1891

  
1892
    assert str(variables['form'].var.foo) == 'hello'
1893
    assert variables['form'].parent is None
1894

  
1895
    variables = child.get_substitution_variables()
1896
    assert variables.get('form_var_foo') == 'world'
1897
    assert variables.get('form_parent_form_var_foo') == 'hello'
1898
    assert variables.get('form_parent') is not None
1899

  
1900
    assert str(variables['form'].var.foo) == 'world'
1901
    assert str(variables['form'].parent['form'].var.foo) == 'hello'
1902
    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):
......
438 440

  
439 441
        return LazyFormDataLinks(self._formdata)
440 442

  
443
    @property
444
    def parent(self):
445
        if not self._formdata.submission_context:
446
            return None
447
        if 'orig_formdef_id' not in self._formdata.submission_context:
448
            return None
449
        if 'orig_formdata_id' not in self._formdata.submission_context:
450
            return None
451
        formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True)
452
        if formdef is None:
453
            return None
454
        formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True)
455
        if formdata is None:
456
            return None
457
        return formdata.get_substitution_variables()
458

  
441 459
    def export_to_json(self, include_files=True):
442 460
        # this gets used to generate an email attachment :/
443 461
        return self._formdata.export_to_json(include_files=include_files)
444
-