Projet

Général

Profil

0001-misc-raise-AttributeError-on-missing-lazy-attributes.patch

Frédéric Péters, 24 février 2020 18:18

Télécharger (2,61 ko)

Voir les différences:

Subject: [PATCH] misc: raise AttributeError on missing lazy attributes
 (#40133)

 tests/test_formdata.py | 32 ++++++++++++++++++++++++++++++++
 wcs/variables.py       |  4 ++--
 2 files changed, 34 insertions(+), 2 deletions(-)
tests/test_formdata.py
1691 1691
        assert condition.evaluate() is False
1692 1692

  
1693 1693

  
1694
def test_lazy_url_suffix(pub, variable_test_data):
1695
    ds = {
1696
        'type': 'formula',
1697
        'value': repr([
1698
            {'id': '1', 'text': 'un', 'more': 'foo', 'url': 'xxx'},
1699
            {'id': '2', 'text': 'deux', 'more': 'bar', 'url': 'yyy'}]),
1700
    }
1701

  
1702
    formdef = FormDef()
1703
    formdef.name = 'foobar'
1704
    formdef.url_name = 'foobar'
1705
    formdef.fields = [
1706
        fields.ItemField(id='1', label='item', data_source=ds, varname='plop'),
1707
    ]
1708
    formdef.store()
1709

  
1710
    formdata = formdef.data_class()()
1711
    formdata.data = {'1': '1'}
1712
    formdata.data['1_display'] = formdef.fields[0].store_display_value(formdata.data, '1')
1713
    formdata.data['1_structured'] = formdef.fields[0].store_structured_value(formdata.data, '1')
1714
    formdata.store()
1715

  
1716
    pub.substitutions.reset()
1717
    pub.substitutions.feed(formdata)
1718
    for mode in (None, 'lazy'):
1719
        context = pub.substitutions.get_context_variables(mode=mode)
1720
        tmpl = Template('{{ form_var_plop_more }}')
1721
        assert tmpl.render(context) == 'foo'
1722
        tmpl = Template('{{ form_var_plop_url }}')
1723
        assert tmpl.render(context) == 'xxx'
1724

  
1725

  
1694 1726
def test_formdata_user_field(pub, variable_test_data):
1695 1727
    local_user = variable_test_data._formdata.user
1696 1728

  
wcs/variables.py
508 508
    def raw(self):
509 509
        if self._field.store_display_value or self._field.key in ('file', 'date'):
510 510
            return self._data.get(self._field.id)
511
        raise KeyError('raw')
511
        raise AttributeError('raw')
512 512

  
513 513
    @property
514 514
    def url(self):
515 515
        if self._field.key != 'file' or not self._formdata:
516
            raise KeyError('url')
516
            raise AttributeError('url')
517 517
        return '%sdownload?f=%s' % (self._formdata.get_url(), self._field.id)
518 518

  
519 519
    def get_value(self):
520
-