Example #1
0
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'))
Example #2
0
    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)
Example #3
0
 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')
Example #4
0
 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")
Example #5
0
 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')
Example #6
0
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)