misc: add custom lazy field for map variables, for string compat (#28193)
This commit is contained in:
parent
b70d6d1507
commit
1e38c3e8c0
|
@ -671,12 +671,18 @@ def test_lazy_variables_missing(pub, variable_test_data):
|
|||
def test_lazy_map_variable(pub, variable_test_data):
|
||||
formdef = FormDef.select()[0]
|
||||
formdata = formdef.data_class().select()[0]
|
||||
pub.substitutions.reset()
|
||||
pub.substitutions.feed(formdef)
|
||||
pub.substitutions.feed(formdata)
|
||||
for mode in (None, 'lazy'):
|
||||
assert WorkflowStatusItem.compute('=form_var_map') == '2;4'
|
||||
assert WorkflowStatusItem.compute('=form_var_map.split(";")[0]') == '2'
|
||||
pub.substitutions.reset()
|
||||
pub.substitutions.feed(formdef)
|
||||
with pub.substitutions.temporary_feed(formdata, force_mode=mode):
|
||||
assert WorkflowStatusItem.compute('=form_var_map', raises=True) == '2;4'
|
||||
assert WorkflowStatusItem.compute('{{ form_var_map }}', raises=True) == '2;4'
|
||||
assert WorkflowStatusItem.compute('=form_var_map.split(";")[0]', raises=True) == '2'
|
||||
assert WorkflowStatusItem.compute('{{ form_var_map|split:";"|first }}', raises=True) == '2'
|
||||
assert WorkflowStatusItem.compute('=form_var_map_lat', raises=True) == 2
|
||||
assert WorkflowStatusItem.compute('{{ form_var_map_lat }}', raises=True) == '2.0'
|
||||
assert WorkflowStatusItem.compute('=form_var_map_lon', raises=True) == 4
|
||||
assert WorkflowStatusItem.compute('{{ form_var_map_lon }}', raises=True) == '4.0'
|
||||
|
||||
formdata.data['7'] = None
|
||||
formdata.store()
|
||||
|
@ -684,7 +690,10 @@ def test_lazy_map_variable(pub, variable_test_data):
|
|||
pub.substitutions.feed(formdef)
|
||||
pub.substitutions.feed(formdata)
|
||||
for mode in (None, 'lazy'):
|
||||
assert WorkflowStatusItem.compute('=form_var_map') is None
|
||||
pub.substitutions.reset()
|
||||
pub.substitutions.feed(formdef)
|
||||
with pub.substitutions.temporary_feed(formdata, force_mode=mode):
|
||||
assert WorkflowStatusItem.compute('=form_var_map', raises=True) is None
|
||||
|
||||
def test_lazy_conditions(pub, variable_test_data):
|
||||
condition = Condition({'type': 'django', 'value': 'form_var_foo_foo == "bar"'})
|
||||
|
|
|
@ -307,6 +307,8 @@ class LazyFormDataVar(object):
|
|||
|
||||
if field.key == 'date':
|
||||
return LazyFieldVarDate(self.data, field, self.formdata)
|
||||
if field.key == 'map':
|
||||
return LazyFieldVarMap(self.data, field, self.formdata)
|
||||
|
||||
return LazyFieldVar(self.data, field, self.formdata)
|
||||
|
||||
|
@ -438,6 +440,13 @@ class LazyFieldVarDate(LazyFieldVar):
|
|||
return self.get_raw().tm_yday
|
||||
|
||||
|
||||
class LazyFieldVarMap(LazyFieldVar):
|
||||
def split(self, *args, **kwargs):
|
||||
# Compatibility with usage of map variable as a string. It is
|
||||
# recommended to use lat/lon properties instead.
|
||||
return self.data.get(self.field.id).split(*args, **kwargs)
|
||||
|
||||
|
||||
class LazyUser(object):
|
||||
def __init__(self, user):
|
||||
self.user = user
|
||||
|
|
Loading…
Reference in New Issue