def member_delete(context, data_dict=None): '''Remove an object (e.g. a user, dataset or group) from a group. You must be authorized to edit a group to remove objects from it. :param id: the id of the group :type id: string :param object: the id or name of the object to be removed :type object: string :param object_type: the type of the object to be removed, e.g. ``package`` or ``user`` :type object_type: string ''' model = context['model'] group_id, obj_id, obj_type = _get_or_bust(data_dict, ['id', 'object', 'object_type']) group = model.Group.get(group_id) if not group: raise NotFound('Group was not found.') obj_class = logic.model_name_to_class(model, obj_type) obj = obj_class.get(obj_id) if not obj: raise NotFound('%s was not found.' % obj_type.title()) check_access('member_delete', context, data_dict) member = model.Session.query(model.Member).\ filter(model.Member.table_name == obj_type).\ filter(model.Member.table_id == obj.id).\ filter(model.Member.group_id == group.id).\ filter(model.Member.state == 'active').first() if member: rev = model.repo.new_revision() rev.author = context.get('user') rev.message = _(u'REST API: Delete Member: %s') % obj_id member.delete() model.repo.commit() if obj_type == 'package': plugin_helpers.views_dashboards_groups_update(data_dict.get('object'))
def remove_member(self, id): user = c.user or c.author group = model.Group.get(id) user_id = http_request.params.get('user_id') member_dict = { 'id': id, 'object': user_id, 'object_type': 'user', } member_context = { 'model': model, 'user': user, 'session': model.Session } group_id, obj_id, obj_type = get_or_bust( member_dict, ['id', 'object', 'object_type']) if not group: raise NotFound('Group was not found.') obj_class = logic.model_name_to_class(model, obj_type) obj = obj_class.get(obj_id) if not obj: raise NotFound('%s was not found.' % obj_type.title()) member = model.Session.query(model.Member).\ filter(model.Member.table_name == obj_type).\ filter(model.Member.table_id == obj.id).\ filter(model.Member.group_id == group.id).\ filter(model.Member.state == 'active').first() if member: rev = model.repo.new_revision() rev.author = member_context.get('user') rev.message = _(u'REST API: Delete Member: %s') % obj_id member.delete() model.repo.commit() h.flash_notice(_('Group member has been deleted.')) return self._redirect_to(controller='group', action='read', id=id)
def test_model_name_to_class(self): assert logic.model_name_to_class(model, 'package') == model.Package tools.assert_raises(logic.ValidationError, logic.model_name_to_class, model, 'inexistent_model_name')
def test_model_name_to_class(self): assert logic.model_name_to_class(model, "package") == model.Package with pytest.raises(logic.ValidationError): logic.model_name_to_class(model, "inexistent_model_name")
def member_create(context, data_dict=None): '''Make an object (e.g. a user, dataset or group) a member of a group. If the object is already a member of the group then the capacity of the membership will be updated. You must be authorized to edit the group. :param user: the user object :type user: user object :param id: the id or name of the group to add the object to :type id: string :param object: the id or name of the object to add :type object: string :param object_type: the type of the object being added, e.g. ``'package'`` or ``'user'`` :type object_type: string :param capacity: the capacity of the membership :type capacity: string :returns: the newly created (or updated) membership :rtype: dictionary ''' from ckan import model import ckan.plugins.toolkit as toolkit import ckan.logic as logic user, group_id, obj_id, obj_type, capacity = \ toolkit.get_or_bust(data_dict, ['user', 'id', 'object', 'object_type', 'capacity']) rev = model.repo.new_revision() #rev.author = user #rev.message = 'Drupal DONL Catalogus' group = model.Group.get(group_id) if not group: raise NotFound('Group was not found.') obj_class = logic.model_name_to_class(model, obj_type) obj = obj_class.get(obj_id) if not obj: raise NotFound('%s was not found.' % obj_type.title()) # Look up existing, in case it exists member = model.Session.query(model.Member).\ filter(model.Member.table_name == obj_type).\ filter(model.Member.table_id == obj.id).\ filter(model.Member.group_id == group.id).\ filter(model.Member.state == 'active').first() if not member: member = model.Member(table_name=obj_type, table_id=obj.id, group_id=group.id, state='active') member.capacity = capacity model.Session.add(member) model.repo.commit() log.debug('Username %s added as admin in organization %s', user.name, group.name)