general: factor field value assignment into a set_value method (#51207)
This commit is contained in:
parent
09706c3b40
commit
3afa844086
|
@ -154,12 +154,13 @@ class CardPage(FormPage):
|
|||
key = 'user'
|
||||
id = '_user'
|
||||
label = _('User (email or UUID)')
|
||||
store_display_value = None
|
||||
store_structured_value = None
|
||||
|
||||
def convert_value_from_str(self, x):
|
||||
return x
|
||||
|
||||
def set_value(self, data, value):
|
||||
data['_user'] = value
|
||||
|
||||
# skip non-data fields
|
||||
csv_fields = [x for x in self.formdef.get_all_fields() if isinstance(x, fields.WidgetField)]
|
||||
if self.formdef.user_support == 'optional':
|
||||
|
@ -271,18 +272,7 @@ class CardPage(FormPage):
|
|||
# skip unsupported field types
|
||||
if field.convert_value_from_str is None:
|
||||
continue
|
||||
field_id = str(field.id)
|
||||
data_line[field_id] = field.convert_value_from_str(value)
|
||||
if field.store_display_value:
|
||||
display_value = field.store_display_value(data_line, field_id)
|
||||
data_line['%s_display' % field_id] = display_value
|
||||
if value and field.store_structured_value:
|
||||
structured_value = field.store_structured_value(data_line, field_id)
|
||||
if structured_value:
|
||||
if isinstance(structured_value, dict) and structured_value.get('id'):
|
||||
# in case of list field, override id
|
||||
data_line[field_id] = str(structured_value.get('id'))
|
||||
data_line['%s_structured' % field_id] = structured_value
|
||||
field.set_value(data_line, field.convert_value_from_str(value))
|
||||
data_lines.append(data_line)
|
||||
|
||||
if incomplete_lines:
|
||||
|
|
|
@ -560,6 +560,26 @@ class Field(object):
|
|||
return True
|
||||
return False
|
||||
|
||||
def set_value(self, data, value):
|
||||
data['%s' % self.id] = value
|
||||
if self.store_display_value:
|
||||
display_value = self.store_display_value(data, self.id)
|
||||
if display_value:
|
||||
data['%s_display' % self.id] = display_value
|
||||
elif '%s_display' % self.id in data:
|
||||
del data['%s_display' % self.id]
|
||||
if self.store_structured_value and value:
|
||||
structured_value = self.store_structured_value(data, self.id)
|
||||
if structured_value:
|
||||
if isinstance(structured_value, dict) and structured_value.get('id'):
|
||||
# in case of list field, override id
|
||||
data['%s' % self.id] = str(structured_value.get('id'))
|
||||
data['%s_structured' % self.id] = structured_value
|
||||
elif '%s_structured' % self.id in data:
|
||||
del data['%s_structured' % self.id]
|
||||
elif self.store_structured_value and '%s_structured' % self.id in data:
|
||||
del data['%s_structured' % self.id]
|
||||
|
||||
def __repr__(self):
|
||||
return '<%s %s %r>' % (self.__class__.__name__, self.id, self.label and self.label[:64])
|
||||
|
||||
|
|
|
@ -1076,9 +1076,7 @@ class FormData(StorableObject):
|
|||
def anonymise(self):
|
||||
for field in self.formdef.get_all_fields():
|
||||
if field.anonymise:
|
||||
self.data[field.id] = None
|
||||
if field.store_display_value:
|
||||
self.data['%s_display' % field.id] = None
|
||||
field.set_value(self.data, None)
|
||||
|
||||
self.anonymised = datetime.datetime.now()
|
||||
self.user_id = None
|
||||
|
|
|
@ -768,18 +768,7 @@ class FormDef(StorableObject):
|
|||
d[field.id] = widget.parse()
|
||||
if d.get(field.id) is not None and field.convert_value_from_str:
|
||||
d[field.id] = field.convert_value_from_str(d[field.id])
|
||||
if d.get(field.id) is not None and field.store_display_value:
|
||||
display_value = field.store_display_value(d, field.id)
|
||||
if display_value is not None:
|
||||
d['%s_display' % field.id] = display_value
|
||||
elif '%s_display' % field.id in d:
|
||||
del d['%s_display' % field.id]
|
||||
if d.get(field.id) is not None and field.store_structured_value:
|
||||
structured_value = field.store_structured_value(d, field.id)
|
||||
if structured_value is not None:
|
||||
d['%s_structured' % field.id] = structured_value
|
||||
elif '%s_structured' % field.id in d:
|
||||
del d['%s_structured' % field.id]
|
||||
field.set_value(d, d[field.id])
|
||||
if getattr(widget, 'cleanup', None):
|
||||
widget.cleanup()
|
||||
return d
|
||||
|
|
|
@ -179,23 +179,7 @@ class SetBackofficeFieldsWorkflowStatusItem(WorkflowStatusItem):
|
|||
)
|
||||
continue
|
||||
|
||||
formdata.data['%s' % field['field_id']] = new_value
|
||||
if formdef_field.store_display_value:
|
||||
display_value = formdef_field.store_display_value(formdata.data, formdef_field.id)
|
||||
if display_value:
|
||||
formdata.data['%s_display' % formdef_field.id] = display_value
|
||||
elif '%s_display' % formdef_field.id in formdata.data:
|
||||
del formdata.data['%s_display' % formdef_field.id]
|
||||
if formdef_field.store_structured_value and formdata.data.get(formdef_field.id):
|
||||
structured_value = formdef_field.store_structured_value(formdata.data, formdef_field.id)
|
||||
if structured_value:
|
||||
if isinstance(structured_value, dict) and structured_value.get('id'):
|
||||
# in case of list field, override id
|
||||
formdata.data['%s' % formdef_field.id] = str(structured_value.get('id'))
|
||||
formdata.data['%s_structured' % formdef_field.id] = structured_value
|
||||
elif '%s_structured' % formdef_field.id in formdata.data:
|
||||
del formdata.data['%s_structured' % formdef_field.id]
|
||||
|
||||
formdef_field.set_value(formdata.data, new_value)
|
||||
# store formdata everytime so substitution cache is invalidated,
|
||||
# and backoffice field values can be used in subsequent fields.
|
||||
formdata.store()
|
||||
|
|
|
@ -512,29 +512,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
|
|||
old_value = value # noqa: F841, copy value for debug
|
||||
value = field.convert_value_from_anything(value)
|
||||
|
||||
formdata.data['%s' % field.id] = value
|
||||
if value is None:
|
||||
if field.store_display_value:
|
||||
formdata.data['%s_display' % field.id] = None
|
||||
if field.store_structured_value:
|
||||
formdata.data['%s_structured' % field.id] = None
|
||||
return
|
||||
|
||||
if field.store_display_value:
|
||||
display_value = field.store_display_value(formdata.data, field.id)
|
||||
if display_value:
|
||||
formdata.data['%s_display' % field.id] = display_value
|
||||
elif '%s_display' % field.id in formdata.data:
|
||||
del formdata.data['%s_display' % field.id]
|
||||
if field.store_structured_value:
|
||||
structured_value = field.store_structured_value(formdata.data, field.id)
|
||||
if structured_value:
|
||||
if isinstance(structured_value, dict) and structured_value.get('id'):
|
||||
# in case of list field, override id
|
||||
formdata.data['%s' % field.id] = str(structured_value.get('id'))
|
||||
formdata.data['%s_structured' % field.id] = structured_value
|
||||
elif '%s_structured' % field.id in formdata.data:
|
||||
del formdata.data['%s_structured' % field.id]
|
||||
field.set_value(formdata.data, value)
|
||||
|
||||
def mappings_export_to_xml(self, parent, charset, include_id=False):
|
||||
container = ET.SubElement(parent, 'mappings')
|
||||
|
|
Loading…
Reference in New Issue