diff --git a/ckanext/scheming/plugins.py b/ckanext/scheming/plugins.py index 0980a684..e8231e72 100644 --- a/ckanext/scheming/plugins.py +++ b/ckanext/scheming/plugins.py @@ -397,17 +397,18 @@ def expand_form_composite(data, fieldnames): parts[1] = indexes[parts[1]] try: try: - comp[int(parts[1])]['-'.join(parts[2:])] = data[key] - del data[key] + if data[key]: + comp[int(parts[1])]['-'.join(parts[2:])] = data[key] except IndexError: comp.append({}) - comp[int(parts[1])]['-'.join(parts[2:])] = data[key] + if data[key]: + comp[int(parts[1])]['-'.join(parts[2:])] = data[key] + finally: del data[key] except (IndexError, ValueError): pass # best-effort only - class SchemingGroupsPlugin(p.SingletonPlugin, _GroupOrganizationMixin, DefaultGroupForm, _SchemingMixin): p.implements(p.IConfigurer) diff --git a/ckanext/scheming/tests/test_form.py b/ckanext/scheming/tests/test_form.py index b441ba8d..ff29f5c6 100644 --- a/ckanext/scheming/tests/test_form.py +++ b/ckanext/scheming/tests/test_form.py @@ -327,6 +327,26 @@ def test_dataset_form_create(self, app, sysadmin_env): assert dataset["citation"] == [{'originator': ['mei', 'ahmed']}] assert dataset["contact_address"] == [{'address': 'anyplace'}] + def test_dataset_form_create_empty_subfields(self, app, sysadmin_env): + data = {"save": "", "_ckan_phase": 1} + + data["name"] = "subfield_dataset_1" + data["citation-0-originator"] = ['mei', 'ahmed'] + data["contact_address-0-address"] = 'anyplace' + + data["publisher-0-name"] = "" + data["publisher-0-url"] = "" + + url = '/test-subfields/new' + try: + app.post(url, environ_overrides=sysadmin_env, data=data, follow_redirects=False) + except TypeError: + app.post(url.encode('ascii'), params=data, extra_environ=sysadmin_env) + + dataset = call_action("package_show", id="subfield_dataset_1") + + assert "publisher" not in dataset + def test_dataset_form_update(self, app, sysadmin_env): dataset = Dataset( type="test-subfields", diff --git a/ckanext/scheming/tests/test_subfields.yaml b/ckanext/scheming/tests/test_subfields.yaml index f4eaa78d..c5e44419 100644 --- a/ckanext/scheming/tests/test_subfields.yaml +++ b/ckanext/scheming/tests/test_subfields.yaml @@ -44,6 +44,13 @@ dataset_fields: - field_name: country label: Country +- field_name: publisher + label: Publisher + repeating_subfields: + - field_name: name + label: Name + - field_name: url + label: URL resource_fields: