diff --git a/tests/test_sql.py b/tests/test_sql.py index f50bcd3ee..36e00dec1 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -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() diff --git a/wcs/formdata.py b/wcs/formdata.py index fb6af0fba..5a6aeab58 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -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'):