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
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)
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
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
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