Ejemplo n.º 1
0
    def test_get_following_user_id_set(self):
        FriendshipService.invalidate_following_cache(
            from_user_id=self.user2.id)
        user_id_set_2 = FriendshipService.get_following_user_id_set(
            self.user2.id)
        self.assertEqual(user_id_set_2, {self.user1.id, self.user3.id})
        user_id_set_1 = FriendshipService.get_following_user_id_set(
            self.user1.id)
        self.assertEqual(user_id_set_1, {self.user2.id})

        Friendship.objects.filter(
            from_user=self.user2,
            to_user=self.user3,
        ).delete()
        Friendship.objects.filter(
            from_user=self.user1,
            to_user=self.user2,
        ).delete()
        # mannually clear the cache
        FriendshipService.invalidate_following_cache(
            from_user_id=self.user2.id)
        user_id_set_2 = FriendshipService.get_following_user_id_set(
            self.user2.id)
        self.assertEqual(user_id_set_2, {self.user1.id})
        # cache automatically cleared in delete() by listener
        user_id_set_1 = FriendshipService.get_following_user_id_set(
            self.user1.id)
        self.assertEqual(len(user_id_set_1), 0)
        # cache automatically cleared in create() by listener
        Friendship.objects.create(from_user=self.user1, to_user=self.user3)
        user_id_set_1 = FriendshipService.get_following_user_id_set(
            self.user1.id)
        self.assertEqual(user_id_set_1, {self.user3.id})
Ejemplo n.º 2
0
    def test_get_followings(self):
        user1 = self.create_user('user1')
        user2 = self.create_user('user2')
        for to_user in [user1, user2, self.dongxie]:
            self.create_friendship(from_user=self.linghu, to_user=to_user)
        FriendshipService.invalidate_following_cache(self.linghu.id)

        user_id_set = FriendshipService.get_following_user_id_set(self.linghu.id)
        self.assertSetEqual(user_id_set, {user1.id, user2.id, self.dongxie.id})

        FriendshipService.unfollow(self.linghu.id, self.dongxie.id)
        FriendshipService.invalidate_following_cache(self.linghu.id)
        user_id_set = FriendshipService.get_following_user_id_set(self.linghu.id)
        self.assertSetEqual(user_id_set, {user1.id, user2.id})
Ejemplo n.º 3
0
    def follow(self, request, pk):
        # check if user with id=pk exists
        self.get_object()
        # /api/friendships/<pk>/follow/
        serializer = FriendshipSerializerForCreate(data={
            'from_user_id': request.user.id,
            'to_user_id': pk,
        })
        if not serializer.is_valid():
            return Response({
                "success": False,
                "message": "Please check input.",
                "errors": serializer.errors,
            }, status=400)

        instance = serializer.save()
        FriendshipService.invalidate_following_cache(request.user.id)
        return Response(
            FollowingSerializer(instance, context={'request': request}).data,
            status=status.HTTP_201_CREATED,
        )
def friendship_changed(sender, instance, **kwargs):
    # importing in the method to prevent circular dependency
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)
Ejemplo n.º 5
0
def invalidate_following_cache(sender, instance, **kwargs):
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)
Ejemplo n.º 6
0
def friendship_changed(sender, instance, **kwargs):
    # import 写在函数里面避免循环依赖
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)
Ejemplo n.º 7
0
def friendship_changed(sender, instance, **kwargs):
    # put import inside function to avoid circular dependency
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)
Ejemplo n.º 8
0
def friendship_changed(sender, instance, **kwargs):
    # put import inside function to prevent cycling dependence
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)
Ejemplo n.º 9
0
def invalidate_following_cache(sender, instance, **kwargs):
    # 如果这个import放在函数外面,会出现循环引用的问题
    from friendships.services import FriendshipService
    FriendshipService.invalidate_following_cache(instance.from_user_id)