formdata: do not fail store on missing block (#73774) #56

Merged
vdeniaud merged 1 commits from wip/73774-crash-bloc-de-champ-manquant-con into main 2023-01-30 11:03:34 +01:00
2 changed files with 33 additions and 3 deletions

View File

@ -456,6 +456,32 @@ def test_sql_fts_index_with_missing_block(formdef):
formdata.store()
def test_sql_fts_index_with_missing_block_and_user_fields_config(pub, formdef):
from wcs.admin.settings import UserFieldsFormDef
user_formdef = UserFieldsFormDef(pub)
user_formdef.fields.append(fields.StringField(id='3', label='first_name', type='string'))
user_formdef.fields.append(fields.StringField(id='4', label='last_name', type='string'))
user_formdef.store()
pub.cfg['users']['field_name'] = ['3', '4']
pub.write_cfg()
data_class = formdef.data_class(mode='sql')
data_class.wipe()
formdata = data_class()
formdata.data = {
'7': {
'data': [
{'1': 'some other example having foo', '2': 'boat', '2_display': 'Yatch'},
{'1': 'bar', '2': 'plane', '2_display': 'Cessna'},
]
}
}
BlockDef.wipe()
formdata.store()
def test_sql_rollback_on_error(formdef):
data_class = formdef.data_class(mode='sql')
data_class.wipe()

View File

@ -525,9 +525,13 @@ class FormData(StorableObject):
for field in self.formdef.fields:
yield field
if field.key == 'block':
for subfield in field.block.fields:
subfield.block = field
yield subfield
try:
for subfield in field.block.fields:
subfield.block = field
yield subfield
except KeyError:
# block doesn't exist anymore
pass
users_cfg = get_cfg('users', {})
if not self.user_id and users_cfg and users_cfg.get('field_name'):