From eea67c91f6b1a82d521fe83c4856cb09d7f19777 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sun, 4 Oct 2015 14:38:35 +0200 Subject: [PATCH 4/4] formdef: rewrite update_mimetypes as update_filetype (#8402) As filetype/mimetypes handling has been changed, handling of settings' filetypes changes must be updated. --- tests/test_admin_pages.py | 22 +++++++++++++++++++--- wcs/admin/settings.py | 4 ++-- wcs/formdef.py | 20 +++++++++++--------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index cb02a31..1115dfb 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -2201,15 +2201,31 @@ def test_settings_filetypes_update(pub): formdef.name = 'form title' formdef.fields = [fields.FileField( id='1', label='1st field', type='file', - file_type=['application/pdf,application/msword'])] + document_type={ + 'id': 1, + 'mimetypes': ['application/pdf', 'application/msword'], + 'label': 'Text files', + })] formdef.store() - assert FormDef.get(formdef.id).fields[0].file_type == ['application/pdf,application/msword'] + assert FormDef.get(formdef.id).fields[0].document_type == { + 'id': 1, + 'mimetypes': ['application/pdf', 'application/msword'], + 'label': 'Text files', + } resp = resp.click('Text files') resp.forms[0]['mimetypes'] = 'application/vnd.oasis.opendocument.text, .doc, .docx, .pdf' resp = resp.forms[0].submit('submit') assert 'application/pdf' in pub.cfg['filetypes'][1]['mimetypes'] - assert FormDef.get(formdef.id).fields[0].file_type == ['application/vnd.oasis.opendocument.text,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/pdf'] + assert FormDef.get(formdef.id).fields[0].document_type == { + 'id': 1, + 'mimetypes': ['application/vnd.oasis.opendocument.text', + 'application/msword', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/pdf' ], + 'label': 'Text files', + } + def test_data_sources(pub): create_superuser(pub) diff --git a/wcs/admin/settings.py b/wcs/admin/settings.py index 1065de9..c038ac2 100644 --- a/wcs/admin/settings.py +++ b/wcs/admin/settings.py @@ -324,10 +324,10 @@ class FileTypesDirectory(Directory): return redirect('.') if form.get_submit() == 'submit': + old_filetype = filetype.copy() filetype['label'] = form.get_widget('label').parse() - previous_mimetypes = filetype['mimetypes'] filetype['mimetypes'] = self.parse_mimetypes(form.get_widget('mimetypes').parse()) - FormDef.update_mimetypes(previous_mimetypes, filetype['mimetypes']) + FormDef.update_filetype(filetype_id, old_filetype, filetype) get_publisher().write_cfg() return redirect('.') diff --git a/wcs/formdef.py b/wcs/formdef.py index 573c744..a5274aa 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -957,23 +957,25 @@ class FormDef(StorableObject): return False @classmethod - def update_mimetypes(cls, previous_mimetypes, new_mimetypes): + def update_filetype(cls, filetype_id, previous_filetype, new_filetype): # look for file fields in all formdefs, to update them with the # new mimetypes. - if previous_mimetypes == new_mimetypes: + if previous_filetype == new_filetype: return - previous_mimetypes = ','.join(previous_mimetypes) - new_mimetypes = ','.join(new_mimetypes) for formdef in cls.select(): changed = False for field in formdef.fields: - if not hasattr(field, 'file_type'): + if not hasattr(field, 'document_type'): continue - if not field.file_type: + if not field.document_type: continue - if previous_mimetypes in field.file_type: - field.file_type.remove(previous_mimetypes) - field.file_type.append(new_mimetypes) + if field.document_type['id'] == filetype_id: + previous_filetype = field.document_type.copy() + del previous_filetype['id'] + if previous_filetype == new_filetype: + continue + field.document_type = new_filetype.copy() + field.document_type['id'] = filetype_id changed = True if changed: formdef.store() -- 2.1.4