From e3a67936f5dea6ec07187c5acd8393e7f60c729a Mon Sep 17 00:00:00 2001 From: Sean Hammond Date: Sat, 18 Aug 2012 16:02:13 +0200 Subject: [PATCH] [#2845] Apply allow_partial_update to all group fields Make 'allow_partial_update': True in the context apply to multiple group fields: packages, users, groups, tags and extras, when updating a group, so you can pass a group dict with e.g. no 'packages' key and this will update the group but will not change the group's packages. Previously allow_partial_update only affected packages and extras. --- ckan/lib/dictization/model_save.py | 35 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/ckan/lib/dictization/model_save.py b/ckan/lib/dictization/model_save.py index 547d15ac3ac..86641268aa0 100644 --- a/ckan/lib/dictization/model_save.py +++ b/ckan/lib/dictization/model_save.py @@ -320,6 +320,10 @@ def group_member_save(context, group_dict, member_table_name): session = context["session"] group = context['group'] entity_list = group_dict.get(member_table_name, []) + + if entity_list == [] and context.get('allow_partial_update', False): + return {'added': [], 'removed': []} + entities = {} Member = model.Member @@ -382,22 +386,21 @@ def group_dict_save(group_dict, context): context['group'] = group - if group_dict.get('packages', None) or not allow_partial_update: - pkgs_edited = group_member_save(context, group_dict, 'packages') - group_users_changed = group_member_save(context, group_dict, 'users') - group_groups_changed = group_member_save(context, group_dict, 'groups') - group_tags_changed = group_member_save(context, group_dict, 'tags') - log.debug('Group save membership changes - Packages: %r Users: %r ' - 'Groups: %r Tags: %r', pkgs_edited, group_users_changed, - group_groups_changed, group_tags_changed) - - # We will get a list of packages that we have either added or - # removed from the group, and trigger a re-index. - package_ids = pkgs_edited['removed'] - package_ids.extend( pkgs_edited['added'] ) - if package_ids: - session.commit() - map( rebuild, package_ids ) + pkgs_edited = group_member_save(context, group_dict, 'packages') + group_users_changed = group_member_save(context, group_dict, 'users') + group_groups_changed = group_member_save(context, group_dict, 'groups') + group_tags_changed = group_member_save(context, group_dict, 'tags') + log.debug('Group save membership changes - Packages: %r Users: %r ' + 'Groups: %r Tags: %r', pkgs_edited, group_users_changed, + group_groups_changed, group_tags_changed) + + # We will get a list of packages that we have either added or + # removed from the group, and trigger a re-index. + package_ids = pkgs_edited['removed'] + package_ids.extend( pkgs_edited['added'] ) + if package_ids: + session.commit() + map( rebuild, package_ids ) extras = group_extras_save(group_dict.get("extras", {}), context) if extras or not allow_partial_update: