Esempio n. 1
0
    def get(self, request, *args, **kwargs):  # pylint: disable=unused-argument
        """Get front page posts"""
        listing_params = get_listing_params(self.request)
        api = Api(user=self.request.user)
        paginated_posts = api.front_page(listing_params)
        pagination, posts = get_pagination_and_reddit_obj_list(
            paginated_posts, listing_params)
        users = lookup_users_for_posts(posts)
        posts = proxy_posts([
            post for post in posts if post.author and post.author.name in users
        ])
        subscriptions = lookup_subscriptions_for_posts(posts,
                                                       self.request.user)

        return Response({
            "posts":
            PostSerializer(
                posts,
                context={
                    **self.get_serializer_context(),
                    "users": users,
                    "post_subscriptions": subscriptions,
                },
                many=True,
            ).data,
            "pagination":
            pagination,
        })
Esempio n. 2
0
    def get(self, request, *args, **kwargs):
        """Get list for posts and attach User objects to them"""
        with translate_praw_exceptions(request.user):
            listing_params = get_listing_params(self.request)
            api = Api(user=request.user)
            paginated_posts = api.list_posts(self.kwargs["channel_name"],
                                             listing_params)
            pagination, posts = get_pagination_and_reddit_obj_list(
                paginated_posts, listing_params)
            users = lookup_users_for_posts(posts)
            posts = proxy_posts([
                post for post in posts
                if post.author and post.author.name in users
            ])
            subscriptions = lookup_subscriptions_for_posts(posts, request.user)

            return Response({
                "posts":
                PostSerializer(
                    posts,
                    many=True,
                    context={
                        **self.get_serializer_context(),
                        "users": users,
                        "post_subscriptions": subscriptions,
                    },
                ).data,
                "pagination":
                pagination,
            })
Esempio n. 3
0
    def get(self, request, *args, **kwargs):
        """View method for HTTP GET request"""
        with translate_praw_exceptions(request.user):
            api = self.request.channel_api
            profile_username = self.kwargs["username"]
            profile_user = User.objects.get(username=profile_username)
            object_type = self.kwargs["object_type"]
            listing_params = get_listing_params(self.request)

            if object_type == "posts":
                serializer_cls = BasePostSerializer
                listing_getter = api.list_user_posts
            else:
                serializer_cls = BaseCommentSerializer
                listing_getter = api.list_user_comments

            object_listing = listing_getter(profile_username, listing_params)
            pagination, user_objects = get_pagination_and_reddit_obj_list(
                object_listing, listing_params
            )
            if object_type == "posts":
                user_objects = proxy_posts(user_objects)

            return Response(
                {
                    object_type: serializer_cls(
                        user_objects,
                        many=True,
                        context={
                            **self.get_serializer_context(),
                            "users": {profile_username: profile_user},
                        },
                    ).data,
                    "pagination": pagination,
                }
            )
Esempio n. 4
0
def test_get_listing_params_sort(mocker, sort):
    """Test that get_listing_params extracts before params correctly"""
    request = mocker.Mock()
    request.query_params = {"sort": sort}
    assert get_listing_params(request) == ListingParams(None, None, 0, sort)
Esempio n. 5
0
def test_get_listing_params_before(mocker):
    """Test that get_listing_params extracts before params correctly"""
    request = mocker.Mock()
    request.query_params = {"before": "abc", "count": "5"}
    assert get_listing_params(request) == ListingParams(
        "abc", None, 5, POSTS_SORT_HOT)
Esempio n. 6
0
def test_get_listing_params_after(mocker):
    """Test that get_listing_params extracts after params correctly"""
    request = mocker.Mock()
    request.query_params = {"after": "abc", "count": "5"}
    assert get_listing_params(request) == ListingParams(
        None, "abc", 5, POSTS_SORT_HOT)
Esempio n. 7
0
def test_get_listing_params_none(mocker):
    """Test that get_listing_params returns no params if there are none"""
    request = mocker.Mock()
    request.query_params = {}
    assert get_listing_params(request) == DEFAULT_LISTING_PARAMS