def follow_group(context, data_dict): '''Start following a group. You must provide your API key in the Authorization header. :param id: the id or name of the group to follow, e.g. ``'roger'`` :type id: string :returns: a representation of the 'follower' relationship between yourself and the group :rtype: dictionary ''' if 'user' not in context: raise logic.NotAuthorized( _("You must be logged in to follow a group.")) model = context['model'] session = context['session'] userobj = model.User.get(context['user']) if not userobj: raise logic.NotAuthorized( _("You must be logged in to follow a group.")) schema = context.get('schema', ckan.logic.schema.default_follow_group_schema()) validated_data_dict, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) # Don't let a user follow a group she is already following. if model.UserFollowingGroup.is_following(userobj.id, validated_data_dict['id']): groupobj = model.Group.get(validated_data_dict['id']) name = groupobj.display_name message = _( 'You are already following {0}').format(name) raise ValidationError({'message': message}, error_summary=message) follower = model_save.follower_dict_save(validated_data_dict, context, model.UserFollowingGroup) if not context.get('defer_commit'): model.repo.commit() log.debug(u'User {follower} started following group {object}'.format( follower=follower.follower_id, object=follower.object_id)) return model_dictize.user_following_group_dictize(follower, context)