misc: use lazy variables for form workflow options (#41853)
This commit is contained in:
parent
38ec86215e
commit
59dbf34cf6
|
@ -8008,8 +8008,14 @@ def test_structured_workflow_options(pub):
|
|||
data_source=data_source),
|
||||
fields.ItemsField(id='3', label='Test Multi', type='items', varname='baz',
|
||||
data_source=data_source),
|
||||
fields.DateField(id='4', label='Date', type='date', varname='date'),
|
||||
]
|
||||
st1 = workflow.add_status('Status1', 'st1')
|
||||
comment = RegisterCommenterWorkflowStatusItem()
|
||||
comment.id = '_comment'
|
||||
comment.comment = 'Date option: {{ form_option_date }}'
|
||||
st1.items.append(comment)
|
||||
comment.parent = st1
|
||||
workflow.store()
|
||||
|
||||
formdef = create_formdef()
|
||||
|
@ -8030,6 +8036,7 @@ def test_structured_workflow_options(pub):
|
|||
resp.form['f1'].value = 'plop'
|
||||
resp.form['f2'].value = '1'
|
||||
resp.form['f3$element1'].checked = True
|
||||
resp.form['f4'].value = '2020-04-18'
|
||||
resp = resp.form.submit('submit')
|
||||
|
||||
formdef = FormDef.get(formdef.id)
|
||||
|
@ -8041,6 +8048,7 @@ def test_structured_workflow_options(pub):
|
|||
'baz': ['1'],
|
||||
'baz_display': 'un',
|
||||
'baz_structured': [{'id': '1', 'more': 'foo', 'text': 'un'}],
|
||||
'date': time.strptime('2020-04-18', '%Y-%m-%d')
|
||||
}
|
||||
|
||||
app = login(get_app(pub), username='foo', password='foo')
|
||||
|
@ -8056,3 +8064,4 @@ def test_structured_workflow_options(pub):
|
|||
'1_display': 'un',
|
||||
'1_structured': {'id': '1', 'text': 'un', 'more': 'foo'},
|
||||
}
|
||||
assert '2020-04-18' in formdata.evolution[0].parts[0].content
|
||||
|
|
|
@ -163,43 +163,9 @@ class LazyFormDef(object):
|
|||
|
||||
@property
|
||||
def option(self):
|
||||
return LazyFormDefOption(self._formdef)
|
||||
|
||||
|
||||
class LazyFormDefOption(object):
|
||||
def __init__(self, formdef):
|
||||
self._formdef = formdef
|
||||
|
||||
def inspect_keys(self):
|
||||
return self.options.keys()
|
||||
|
||||
_options = None
|
||||
@property
|
||||
def options(self):
|
||||
if self._options is not None:
|
||||
return self._options
|
||||
self._options = {}
|
||||
if not self._formdef.workflow.variables_formdef:
|
||||
return self._options
|
||||
if not self._formdef.workflow_options:
|
||||
return self._options
|
||||
for field in self._formdef.workflow.variables_formdef.fields:
|
||||
if not field.varname:
|
||||
continue
|
||||
self._options[field.varname] = self._formdef.workflow_options.get(field.varname)
|
||||
if field.store_display_value:
|
||||
if '%s_display' % field.varname in self._formdef.workflow_options:
|
||||
self._options[field.varname + '_raw'] = self._options[field.varname]
|
||||
self._options[field.varname] = self._formdef.workflow_options[
|
||||
'%s_display' % field.varname]
|
||||
if field.store_structured_value:
|
||||
if '%s_structured' % field.varname in self._formdef.workflow_options:
|
||||
self._options[field.varname + '_structured'] = self._formdef.workflow_options.get(
|
||||
'%s_structured' % field.varname)
|
||||
return self._options
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.options[key]
|
||||
return {}
|
||||
return LazyFormDefOptions(self._formdef)
|
||||
|
||||
|
||||
class LazyFormData(LazyFormDef):
|
||||
|
@ -889,3 +855,15 @@ class LazyRequest(object):
|
|||
@property
|
||||
def view_name(self):
|
||||
return getattr(self._request, 'view_name', None)
|
||||
|
||||
|
||||
class LazyFormDefOptions(LazyFormDataVar):
|
||||
def __init__(self, formdef):
|
||||
self._formdef = formdef
|
||||
fields = self._formdef.workflow.variables_formdef.fields
|
||||
for field in fields:
|
||||
# change field IDs as options are stored in data with their
|
||||
# varnames, not id.
|
||||
field.id = field.varname or field.id
|
||||
data = self._formdef.workflow_options
|
||||
super(LazyFormDefOptions, self).__init__(fields, data)
|
||||
|
|
Loading…
Reference in New Issue