Projet

Général

Profil

0001-misc-add-back-full-support-for-items-field-in-lazy-v.patch

Frédéric Péters, 29 février 2020 10:53

Télécharger (3,16 ko)

Voir les différences:

Subject: [PATCH] misc: add back full support for items field in lazy variables
 (#40283)

 tests/test_formdata.py | 39 +++++++++++++++++++++++++++++++++++++++
 wcs/variables.py       |  8 +++++++-
 2 files changed, 46 insertions(+), 1 deletion(-)
tests/test_formdata.py
1746 1746
        assert tmpl.render(context) == 'xxx'
1747 1747

  
1748 1748

  
1749
def test_lazy_structured_items(pub, variable_test_data):
1750
    ds = {
1751
        'type': 'formula',
1752
        'value': repr([
1753
            {'id': '1', 'text': 'un', 'more': 'foo', 'url': 'xxx'},
1754
            {'id': '2', 'text': 'deux', 'more': 'bar', 'url': 'yyy'}]),
1755
    }
1756

  
1757
    formdef = FormDef()
1758
    formdef.name = 'foobar'
1759
    formdef.url_name = 'foobar'
1760
    formdef.fields = [
1761
        fields.ItemsField(id='1', label='items', data_source=ds, varname='plop'),
1762
    ]
1763
    formdef.store()
1764

  
1765
    formdata = formdef.data_class()()
1766
    formdata.data = {'1': ['1', '2']}
1767
    formdata.data['1_display'] = formdef.fields[0].store_display_value(formdata.data, '1')
1768
    formdata.data['1_structured'] = formdef.fields[0].store_structured_value(formdata.data, '1')
1769
    formdata.store()
1770

  
1771
    pub.substitutions.reset()
1772
    pub.substitutions.feed(formdata)
1773
    for mode in (None, 'lazy'):
1774
        context = pub.substitutions.get_context_variables(mode=mode)
1775
        tmpl = Template('{{ form_var_plop_0_more }}')
1776
        assert tmpl.render(context) == 'foo'
1777
        tmpl = Template('{{ form_var_plop_0_url }}')
1778
        assert tmpl.render(context) == 'xxx'
1779
        tmpl = Template('{{ form_var_plop_1_more }}')
1780
        assert tmpl.render(context) == 'bar'
1781
        tmpl = Template('{{ form_var_plop_1_url }}')
1782
        assert tmpl.render(context) == 'yyy'
1783

  
1784
    assert 'form_var_plop_0_url' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys()
1785
    assert 'form_var_plop_1_more' in pub.substitutions.get_context_variables(mode='lazy').get_flat_keys()
1786

  
1787

  
1749 1788
def test_formdata_user_field(pub, variable_test_data):
1750 1789
    local_user = variable_test_data._formdata.user
1751 1790

  
wcs/variables.py
619 619
            else:
620 620
                keys.append(base)
621 621

  
622
        walk('', structured_value)
622
        if isinstance(structured_value, list):
623
            for i, value in enumerate(structured_value):
624
                walk(str(i), value)
625
        else:
626
            walk('', structured_value)
627

  
623 628
        return keys
624 629

  
625 630
    def __getitem__(self, key):
......
636 641
            for i, struct_value in enumerate(structured_value):
637 642
                if str(key) == str(i):
638 643
                    return struct_value
644
        raise KeyError(key)
639 645

  
640 646

  
641 647
class DateOperatorsMixin(object):
642
-