From a00b6e87c57655685195dd18a229c373e03c5ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 2 Dec 2015 12:36:20 +0100 Subject: [PATCH 2/3] formdef: warn if multiple fields have the same id (#9173) --- tests/test_formdef_import.py | 13 +++++++++++++ wcs/formdef.py | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/tests/test_formdef_import.py b/tests/test_formdef_import.py index e048d8f..91835b3 100644 --- a/tests/test_formdef_import.py +++ b/tests/test_formdef_import.py @@ -257,3 +257,16 @@ def test_unknown_data_source(): export = ET.tostring(export_to_indented_xml(formdef)) with pytest.raises(FormdefImportError): FormDef.import_from_xml(StringIO.StringIO(export)) + +def test_duplicated_field_ids(): + formdef = FormDef() + formdef.name = 'foo' + formdef.fields = [ + fields.StringField(id='1', type='string'), + fields.StringField(id='1', type='string'),] + export = ET.tostring(export_to_indented_xml(formdef, include_id=True)) + + FormDef.import_from_xml(StringIO.StringIO(export)) + + with pytest.raises(FormdefImportError): + FormDef.import_from_xml(StringIO.StringIO(export), include_id=True) diff --git a/wcs/formdef.py b/wcs/formdef.py index 4c23850..859875f 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -702,6 +702,13 @@ class FormDef(StorableObject): raise FormdefImportError(N_('Unknown datasources'), details=', '.join(sorted(unknown_datasources))) + # check if all field id are unique + known_field_ids = set() + for field in formdef.fields: + if field.id in known_field_ids: + raise FormdefImportError(N_('Duplicated field identifiers')) + known_field_ids.add(field.id) + return formdef import_from_xml = classmethod(import_from_xml) -- 2.6.2