示例#1
0
    def add_friend(self, from_user, to_user, message=None):
        """ Create a friendship request """
        if from_user == to_user:
            raise ValidationError("Users cannot be friends with themselves")

        if self.are_friends(from_user, to_user):
            raise AlreadyFriendsError("Users are already friends")

        if self.can_request_send(from_user, to_user):
            raise AlreadyExistsError("Friendship already requested")

        if message is None:
            message = ""

        request, created = FriendshipRequest.objects.get_or_create(
            from_user=from_user, to_user=to_user)

        if created is False:
            raise AlreadyExistsError("Friendship already requested")

        if message:
            request.message = message
            request.save()

        bust_cache("requests", to_user.pk)
        bust_cache("sent_requests", from_user.pk)
        friendship_request_created.send(sender=request)

        return request
示例#2
0
 def post(self, request, *args, **kwargs):
     try:
         self.check_own_friends()
         self.check_other_user_friends(user=self.user)
     except ValidationError as e:
         messages.error(request=self.request, message=e.message)
         return redirect(to=self.user)
     try:
         if (FriendshipRequest.objects.filter(from_user=request.user,
                                              to_user=self.user).exists()):
             raise AlreadyExistsError(
                 self.
                 _you_already_requested_friendship_from_this_user_error_message(
                     user=request.user, other_user=self.user))
         if (FriendshipRequest.objects.filter(
                 from_user=self.user, to_user=request.user).exists()):
             raise AlreadyExistsError(
                 self.
                 _this_user_already_requested_friendship_from_you_error_message(
                     user=request.user, other_user=self.user))
         Friend.objects.add_friend(from_user=request.user,
                                   to_user=self.user)
     except (ValidationError, AlreadyExistsError, AlreadyFriendsError) as e:
         message_dict = {
             "Users cannot be friends with themselves.":
             self._you_cannot_be_friends_with_yourself_error_message(
                 user=request.user),
             "Users are already friends.":
             self._you_already_are_friends_with_this_user_error_message(
                 user=request.user, other_user=self.user),
             "Friendship already requested.":
             self.
             _you_already_requested_friendship_from_this_user_error_message(
                 user=request.user, other_user=self.user),
         }
         for key in list(message_dict.keys()):
             message_dict[key.replace(".", "")] = message_dict[key]
         if (isinstance(e, ValidationError)):
             message = e.message
         else:
             message = str(e)
         if (message in message_dict):
             message = message_dict[message]
         else:
             message = _(message)
         messages.error(request=self.request, message=message)
         return redirect(to=self.user)
     messages.success(request=request,
                      message=_('Friendship request sent.'))
     return redirect(to=self.user)
示例#3
0
    def add_friend(self, from_user, to_user):
        """ Create a friendship request """
        if from_user == to_user:
            raise ValidationError("Users cannot be friends with themselves")

        request, created = FriendshipRequest.objects.get_or_create(
            from_user=from_user, to_user=to_user)

        if created is False:
            raise AlreadyExistsError("Friendship already requested")

        bust_cache('requests', to_user.pk)
        bust_cache('sent_requests', from_user.pk)
        friendship_request_created.send(sender=request)

        return request
示例#4
0
    def add_follower(self, follower, followee):
        """ Create 'follower' follows 'followee' relationship """
        if follower == followee:
            raise ValidationError("Users cannot follow themselves")

        relation, created = Follow.objects.get_or_create(follower=follower, followee=followee)

        if created is False:
            raise AlreadyExistsError("User '%s' already follows '%s'" % (follower, followee))

        follower_created.send(sender=self, follower=follower)
        following_created.send(sender=self, follow=followee)

        bust_cache('followers', followee.pk)
        bust_cache('following', follower.pk)

        return relation
示例#5
0
    def add_block(self, blocker, blocked):
        """ Create 'follower' follows 'followee' relationship """
        if blocker == blocked:
            raise ValidationError("Users cannot block themselves")

        relation, created = Block.objects.get_or_create(blocker=blocker, blocked=blocked)

        if created is False:
            raise AlreadyExistsError("User '%s' already blocks '%s'" % (blocker, blocked))

        block_created.send(sender=self, blocker=blocker)
        block_created.send(sender=self, blocked=blocked)
        block_created.send(sender=self, blocking=relation)

        bust_cache('blocked', blocked.pk)
        bust_cache('blocking', blocker.pk)

        return relation