Projet

Général

Profil

0001-formdata-fix-rendition-of-structured-items-in-substi.patch

Frédéric Péters, 13 novembre 2015 19:46

Télécharger (5,36 ko)

Voir les différences:

Subject: [PATCH] formdata: fix rendition of structured items in substitution
 variables (#8982)

 tests/test_form_pages.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++
 wcs/formdata.py          |  8 ++++-
 2 files changed, 92 insertions(+), 1 deletion(-)
tests/test_form_pages.py
1866 1866
    data = formdef.data_class().get(data_id)
1867 1867
    assert data.data['0'] is None
1868 1868

  
1869
def test_form_items_datasource(pub):
1870
    formdef = create_formdef()
1871
    formdef.fields = [fields.ItemsField(id='1', label='items',
1872
        varname='items', required=False, data_source={'type': 'foobar'})]
1873
    formdef.store()
1874

  
1875
    data_class = formdef.data_class()
1876
    data_class.wipe()
1877

  
1878
    # add the named data source
1879
    NamedDataSource.wipe()
1880
    data_source = NamedDataSource(name='foobar')
1881
    data_source.data_source = {'type': 'formula', 'value': repr([])}
1882
    data_source.store()
1883

  
1884
    resp = get_app(pub).get('/test/')
1885
    formdef.data_class().wipe()
1886
    resp = resp.forms[0].submit('submit') # should go straight to validation
1887
    assert 'Check values then click submit.' in resp.body
1888
    assert resp.forms[0]['previous']
1889
    resp = resp.forms[0].submit('previous')
1890

  
1891
    # replace the named data source with one with items
1892
    NamedDataSource.wipe()
1893
    data_source = NamedDataSource(name='foobar')
1894
    data_source.data_source = {'type': 'formula', 'value': repr(['un', 'deux'])}
1895
    data_source.store()
1896

  
1897
    resp = get_app(pub).get('/test/')
1898
    assert 'f1$elementun' in resp.form.fields
1899
    assert 'f1$elementdeux' in resp.form.fields
1900
    resp.form['f1$elementun'].checked = True
1901
    resp.form['f1$elementdeux'].checked = True
1902
    resp = resp.form.submit('submit')
1903
    assert 'Check values then click submit.' in resp.body
1904
    resp = resp.form.submit('submit')
1905
    resp = resp.follow()
1906

  
1907
    assert data_class.select()[0].data == {'1': ['un', 'deux'], '1_display': 'un, deux'}
1908

  
1909
    data_source.data_source = {'type': 'formula',
1910
            'value': repr([{'id': '1', 'text': 'un'},
1911
                           {'id': '2', 'text': 'deux'}])}
1912
    data_source.store()
1913

  
1914
    data_class.wipe()
1915
    resp = get_app(pub).get('/test/')
1916
    assert 'f1$element1' in resp.form.fields
1917
    assert 'f1$element2' in resp.form.fields
1918
    resp.form['f1$element1'].checked = True
1919
    resp.form['f1$element2'].checked = True
1920
    resp = resp.form.submit('submit')
1921
    assert 'Check values then click submit.' in resp.body
1922
    resp = resp.form.submit('submit')
1923
    resp = resp.follow()
1924

  
1925
    assert data_class.select()[0].data == {'1': ['1', '2'], '1_display': 'un, deux'}
1926

  
1927
    data_source.data_source = {'type': 'formula',
1928
            'value': repr([{'id': '1', 'text': 'un', 'foo': 'bar1'},
1929
                           {'id': '2', 'text': 'deux', 'foo': 'bar2'}])}
1930
    data_source.store()
1931

  
1932
    data_class.wipe()
1933
    resp = get_app(pub).get('/test/')
1934
    assert 'f1$element1' in resp.form.fields
1935
    assert 'f1$element2' in resp.form.fields
1936
    resp.form['f1$element1'].checked = True
1937
    resp.form['f1$element2'].checked = True
1938
    resp = resp.form.submit('submit')
1939
    assert 'Check values then click submit.' in resp.body
1940
    resp = resp.form.submit('submit')
1941
    resp = resp.follow()
1942
    assert data_class.select()[0].data == {
1943
            '1': ['1', '2'],
1944
            '1_structured': [{'text': 'un', 'foo': 'bar1', 'id': '1'},
1945
                             {'text': 'deux', 'foo': 'bar2', 'id': '2'}],
1946
            '1_display': 'un, deux'}
1947
    # along the way, check substitution variables
1948
    substvars = data_class.select()[0].get_substitution_variables()
1949
    assert substvars['form_var_items'] == 'un, deux'
1950
    assert substvars['form_var_items_raw'] == ['1', '2']
1951
    assert substvars['form_var_items_0_foo'] == 'bar1'
1952
    assert substvars['form_var_items_1_foo'] == 'bar2'
1953

  
1869 1954
def test_form_autosave(pub):
1870 1955
    formdef = create_formdef()
1871 1956
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
wcs/formdata.py
73 73
                    new_data['var_%s_raw' % field.varname] = raw_value
74 74
            if field.store_structured_value:
75 75
                structured_value = data.get('%s_structured' % field.id)
76
                if structured_value:
76
                if type(structured_value) is dict:
77 77
                    for k, v in structured_value.items():
78 78
                        if k in ('id', 'text'):
79 79
                            continue
80 80
                        new_data['var_%s_%s' % (field.varname, k)] = v
81
                if type(structured_value) is list:
82
                    for i, struct_value in enumerate(structured_value):
83
                        for k, v in struct_value.items():
84
                            if k in ('id', 'text'):
85
                                continue
86
                            new_data['var_%s_%s_%s' % (field.varname, i, k)] = v
81 87
    return new_data
82 88

  
83 89
def flatten_dict(d):
84
-