Skip to content

Commit

Permalink
[#2845] Apply allow_partial_update to all group fields
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Sean Hammond committed Aug 18, 2012
1 parent b17ea57 commit e3a6793
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions ckan/lib/dictization/model_save.py
Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit e3a6793

Please sign in to comment.