misc: raise AttributeError on missing lazy attributes (#40133)
This commit is contained in:
parent
e58a90f340
commit
4d3d773f84
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue