From 72fd68fd4dde6ca9fb13d9b51eb3e6ae32d3d82f Mon Sep 17 00:00:00 2001 From: Yan Date: Fri, 9 Mar 2018 21:46:15 +0200 Subject: [PATCH] [#4094] Update Orgs/Groups logic for custom fields delete and update --- ckan/lib/dictization/model_save.py | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/ckan/lib/dictization/model_save.py b/ckan/lib/dictization/model_save.py index cfdf4973217..4ce51ec0bd7 100644 --- a/ckan/lib/dictization/model_save.py +++ b/ckan/lib/dictization/model_save.py @@ -130,19 +130,6 @@ def package_extras_save(extra_dicts, obj, context): state = 'deleted' extra.state = state -def group_extras_save(extras_dicts, context): - - model = context["model"] - session = context["session"] - - result_dict = {} - for extra_dict in extras_dicts: - if extra_dict.get("deleted"): - continue - result_dict[extra_dict["key"]] = extra_dict["value"] - - return result_dict - def package_tag_list_save(tag_dicts, package, context): allow_partial_update = context.get("allow_partial_update", False) if tag_dicts is None and allow_partial_update: @@ -411,14 +398,17 @@ def group_dict_save(group_dict, context, prevent_packages_update=False): 'Groups: %r Tags: %r', pkgs_edited, group_users_changed, group_groups_changed, group_tags_changed) - extras = group_extras_save(group_dict.get("extras", {}), context) - if extras or not allow_partial_update: - old_extras = set(group.extras.keys()) - new_extras = set(extras.keys()) - for key in old_extras - new_extras: + extras = group_dict.get("extras", []) + new_extras = {i['key'] for i in extras} + if extras: + old_extras = group.extras + for key in set(old_extras) - new_extras: del group.extras[key] - for key in new_extras: - group.extras[key] = extras[key] + for x in extras: + if 'deleted' in x and x['key'] in old_extras: + del group.extras[x['key']] + continue + group.extras[x['key']] = x['value'] # We will get a list of packages that we have either added or # removed from the group, and trigger a re-index.