misc: raise AttributeError on missing lazy attributes (#40133)

This commit is contained in:
Frédéric Péters 2020-02-24 18:13:08 +01:00
parent e58a90f340
commit 4d3d773f84
2 changed files with 34 additions and 2 deletions

View File

@ -1691,6 +1691,38 @@ def test_rounding_and_abs_conditions_django(pub, variable_test_data):
assert condition.evaluate() is False
def test_lazy_url_suffix(pub, variable_test_data):
ds = {
'type': 'formula',
'value': repr([
{'id': '1', 'text': 'un', 'more': 'foo', 'url': 'xxx'},
{'id': '2', 'text': 'deux', 'more': 'bar', 'url': 'yyy'}]),
}
formdef = FormDef()
formdef.name = 'foobar'
formdef.url_name = 'foobar'
formdef.fields = [
fields.ItemField(id='1', label='item', data_source=ds, varname='plop'),
]
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'1': '1'}
formdata.data['1_display'] = formdef.fields[0].store_display_value(formdata.data, '1')
formdata.data['1_structured'] = formdef.fields[0].store_structured_value(formdata.data, '1')
formdata.store()
pub.substitutions.reset()
pub.substitutions.feed(formdata)
for mode in (None, 'lazy'):
context = pub.substitutions.get_context_variables(mode=mode)
tmpl = Template('{{ form_var_plop_more }}')
assert tmpl.render(context) == 'foo'
tmpl = Template('{{ form_var_plop_url }}')
assert tmpl.render(context) == 'xxx'
def test_formdata_user_field(pub, variable_test_data):
local_user = variable_test_data._formdata.user

View File

@ -508,12 +508,12 @@ class LazyFieldVar(object):
def raw(self):
if self._field.store_display_value or self._field.key in ('file', 'date'):
return self._data.get(self._field.id)
raise KeyError('raw')
raise AttributeError('raw')
@property
def url(self):
if self._field.key != 'file' or not self._formdata:
raise KeyError('url')
raise AttributeError('url')
return '%sdownload?f=%s' % (self._formdata.get_url(), self._field.id)
def get_value(self):