Пример #1
0
    def list(self, request, shop_slug=None):
        queryset = ProductGroupModel.objects.filter(shop__slug=shop_slug)

        best_selling_queryset = ProductModel.objects.filter(
            shop__slug=shop_slug, is_available=True,
            num_sold__gt=0).order_by('num_sold')
        best_selling_serializer = ProductSerializer(best_selling_queryset[:5],
                                                    many=True)

        offers_queryset = ProductModel.objects.filter(shop__slug=shop_slug,
                                                      is_offer=True,
                                                      is_available=True)
        offers_serializer = ProductSerializer(offers_queryset, many=True)

        paginator = LimitOffsetPagination()
        paginator.default_limit = 5
        paginator.max_limit = 10
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = ProductGroupSerializer(paginated_queryset, many=True)

        return Response(
            data={
                'limit': paginator.limit,
                'offset': paginator.offset,
                'count': paginator.count,
                'offers': offers_serializer.data,
                'best_selling': best_selling_serializer.data,
                'groups': serializer.data
            })
Пример #2
0
def get_posts_for_stream(request):
    stream_id = request.data.get('streamId')
    if not stream_id:
        return Response({'details': {
            'required_fields': ['streamId']
        }},
                        status=status.HTTP_400_BAD_REQUEST)
    try:
        stream = Stream.objects.get(pk=stream_id)
    except Stream.DoesNotExist:
        raise Http404
    except ValidationError:
        return Response({'details': {
            'required field as UUID': ['streamId']
        }},
                        status=status.HTTP_400_BAD_REQUEST)

    profiles = ProfileFollow.objects.filter(stream=stream.id).values('profile')
    posts = Post.objects.filter(owner__in=profiles)

    paginator = LimitOffsetPagination()
    paginator.default_limit = 12
    result_page = paginator.paginate_queryset(posts, request)

    serializer = PostSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #3
0
    def geographic_crs(self, request):
        pinboard = self._pinboard
        crids = pinboard.crids if pinboard else []
        geographic_data_query = GeographyCrsDataQuery(
            crids, officers=self._data(False)['officers'])

        paginator = LimitOffsetPagination()
        paginator.default_limit = DEFAULT_LIMIT

        cr_data = geographic_data_query.data()

        if self._detail:
            cr_data = cr_data.prefetch_related(
                'officerallegation_set',
                'officerallegation_set__officer',
                'officerallegation_set__allegation_category',
                'victims',
            )

        paginated_cr_data = paginator.paginate_queryset(cr_data,
                                                        request,
                                                        view=self)
        serializer_klass = CRDetailSerializer if self._detail else CRSerializer
        serializer = serializer_klass(paginated_cr_data, many=True)

        return Response({
            'count': paginator.count,
            'limit': paginator.default_limit,
            'results': serializer.data
        })
Пример #4
0
    def get(self, request, *args, **kwargs):
        query = self.get_query()
        sort = self.get_sort()

        pagination = LimitOffsetPagination()
        pagination.default_limit = 20
        pagination.limit = pagination.get_limit(request)
        pagination.offset = pagination.get_offset(request)
        pagination.request = request

        body = {
            "track_total_hits": True,
            "query": query,
            "size": pagination.limit,
            "from": pagination.offset,
        }
        if sort:
            body["sort"] = sort

        # execute elasticsearch query
        indexer = self.get_indexer()
        res = indexer.search(body=body)

        # map back to expected format
        items = list(indexer.map_results(res["hits"]["hits"]))
        pagination.count = res["hits"]["total"]["value"]
        return pagination.get_paginated_response(items)
Пример #5
0
    def list(self, request):
        """Lists all orders the user has.

        Arguments:
            request: the request data sent by the user, it is used
                     for Pagination

            Returns:
                HTTP 403 if user is not authenticated
                HTTP 200 Response with all orders in JSON.
        """

        queryset = None

        if hasattr(request.user, 'profile'):
            queryset = request.user.profile.orders.all()  # this is a regular user

        if hasattr(request.user, 'driver_profile'):
            queryset = request.user.driver_profile.served_orders.all()  # this is a driver

        if hasattr(request.user, 'shop_profile'):
            queryset = request.user.shop_profile.served_orders.all()  # this is a shop

        paginator = LimitOffsetPagination()
        paginator.default_limit = 15
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = OrderSerializer(paginated_queryset, many=True)

        return Response(data={'limit': paginator.limit, 'offset': paginator.offset,
                              'count': paginator.count, 'orders': serializer.data})
Пример #6
0
    def list(self, request, username=None):
        """Lists all reviews the driver has.

        Arguments:
            request: the request data sent by the user, it is
                     used for Pagination
            username: the username of the driver profile
                      whose reviews will be returned

        Returns:
            HTTP 404 if driver profile is not found,
            HTTP 200 Response with all reviews in
            the driver's profile in JSON.
        """

        driver = get_object_or_404(DriverProfileModel,
                                   account__username=username)
        queryset = driver.reviews.all()
        paginator = LimitOffsetPagination()
        paginator.default_limit = 25
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = DriverReviewSerializer(paginated_queryset, many=True)

        return Response(
            data={
                'limit': paginator.limit,
                'offset': paginator.offset,
                'count': paginator.count,
                'reviews': serializer.data
            })
Пример #7
0
    def get(self, request, *args, **kwargs):
        query = self.get_query()
        sort = self.get_sort()

        pagination = LimitOffsetPagination()
        pagination.default_limit = 20
        pagination.limit = pagination.get_limit(request)
        pagination.offset = pagination.get_offset(request)
        pagination.request = request

        body = {
            'query': query,
            'size': pagination.limit,
            'from': pagination.offset
        }
        if sort:
            body['sort'] = sort

        # execute elasticsearch query
        indexer = self.get_indexer()
        res = indexer.search(body=body)

        # map back to expected format
        items = list(indexer.map_results(res['hits']['hits']))
        pagination.count = res['hits']['total']
        return pagination.get_paginated_response(items)
Пример #8
0
    def list(self, request, username=None):
        """Lists all addresses the user has.

        Arguments:
            request: the request data sent by the user, it is used
                     to check the user's permissions and in Pagination
            username: the username of the user profile
                      whose addresses will be returned

        Returns:
            HTTP 403 Response if the user is
            not authorized to see that user's addresses,
            HTTP 404 if user profile is not found,
            HTTP 200 Response with all addresses in
            the user's profile in JSON.
        """

        user = get_object_or_404(UserProfileModel, account__username=username)
        self.check_object_permissions(request, user)
        queryset = user.addresses.all()

        paginator = LimitOffsetPagination()
        paginator.default_limit = 10
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = self.serializer_class(paginated_queryset, many=True)

        return Response(data={'limit': paginator.limit, 'offset': paginator.offset,
                              'count': paginator.count, 'addresses': serializer.data})
Пример #9
0
    def geographic_trrs(self, request):
        pinboard = self._pinboard
        trr_ids = pinboard.trr_ids if pinboard else []
        geographic_data_query = GeographyTrrsDataQuery(
            trr_ids, officers=self._data(False)['officers'])

        paginator = LimitOffsetPagination()
        paginator.default_limit = DEFAULT_LIMIT

        trr_data = geographic_data_query.data()

        if self._detail:
            trr_data = trr_data.select_related('officer')

        paginated_trr_data = paginator.paginate_queryset(trr_data,
                                                         request,
                                                         view=self)
        serializer_klass = TRRDetailSerializer if self._detail else TRRSerializer
        serializer = serializer_klass(paginated_trr_data, many=True)

        return Response({
            'count': paginator.count,
            'limit': paginator.default_limit,
            'results': serializer.data
        })
Пример #10
0
def taskscompletedview(request):
    paginator = LimitOffsetPagination()
    paginator.default_limit = 50
    queryset = Tasks.objects.filter(completed=True).order_by('id')
    result_page = paginator.paginate_queryset(queryset, request)
    serializer = TaskSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #11
0
def get_paginated(queryset, request, to_dict, limit=10):
    paginator = LimitOffsetPagination()
    paginator.max_limit = 50
    paginator.default_limit = limit
    paginator.offset = 0

    obj_list = paginator.paginate_queryset(
        queryset,
        request
    )

    results = to_dict(obj_list)

    next_link = paginator.get_next_link()
    prev_link = paginator.get_previous_link()
    if next_link:
        next_link = next_link.split('?')[1]
    if prev_link:
        prev_link = prev_link.split('?')[1]

    data = {
        'results': results,
        'limit': paginator.limit,
        'offset': paginator.offset,
        'count': paginator.count,
        'next': next_link,
        'prev': prev_link,
    }

    # print(json.dumps(data))

    return data
Пример #12
0
def notifview(request):
    paginator = LimitOffsetPagination()
    paginator.default_limit = 50
    queryset = Notifications.objects.filter(
        user=request.user).order_by('-date_created')
    result_page = paginator.paginate_queryset(queryset, request)
    serializer = NotificationSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #13
0
def commentsview(request, task_id):
    paginator = LimitOffsetPagination()
    paginator.default_limit = 50
    queryset = TaskComments.objects.filter(
        task_id=task_id).order_by('date_created')
    result_page = paginator.paginate_queryset(queryset, request)
    serializer = CommentsSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #14
0
def get_explore(request):
    posts = Post.objects.all()

    paginator = LimitOffsetPagination()
    paginator.default_limit = 6
    result_page = paginator.paginate_queryset(posts, request)

    serializer = PostSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #15
0
    def list(self, request):
        """get users list
        
        Args:
            request ([type]): [description]
        
        Returns:
            [type]: [description]
        """
        if self.request.user.is_superuser:
            search = request.query_params.get('search', None)
            if search is not None:
                query = Q(first_name__icontains=search) | Q(
                    last_name__icontains=search) | Q(
                        email__icontains=search) | Q(phone__icontains=search)
                if search.lower() == "yes":
                    search = True
                    query = query | Q(is_verified__icontains=search) | Q(
                        is_active__icontains=search)
                elif search.lower() == "no":
                    search = False
                    query = query | Q(is_verified__icontains=search) | Q(
                        is_active__icontains=search)

                elif search.lower() == "admin":
                    search = True
                    query = query | Q(is_staff__icontains=search)
                elif search.lower() == "staff":
                    search = False
                    query = query | Q(is_staff__icontains=search)
                queryset = User.objects.filter(query).order_by(
                    'id').reverse().values()
            else:
                queryset = User.objects.all().order_by('id').reverse().values()
            if request is not None:
                paginator = LimitOffsetPagination()
                paginator.max_limit = 100
                paginator.default_limit = 20
                user = paginator.paginate_queryset(queryset, request)
                limit = paginator.limit
                if isinstance(limit, list):
                    limit = limit[0]
                offset = paginator.offset
                count = paginator.count
            res = {
                "Success": True,
                "ExceptionString": "Record Found.",
                "results": user,
                "count": count,
                "limit": limit,
                "offset": offset
            }
            return Response(res, status.HTTP_200_OK)
        else:
            res = {"Success": False, "results": []}
            return Response(res, status.HTTP_401_UNAUTHORIZED)
Пример #16
0
    def get(self, request: Request) -> Response:
        self.info(request)

        user_s = CustomUser.objects.all()

        paginator = LimitOffsetPagination()
        paginator.default_limit = DEFAULT_PAGE_LIMIT
        paged_user_s = paginator.paginate_queryset(user_s, request)

        serializer = CustomUserSerializer(paged_user_s, many=True)

        return Response(data=serializer.data, )
    def list(request):
        """List transactions for all users

        :param request: Request send from the client
        :return: Response
        """
        paginator = LimitOffsetPagination()
        paginator.max_limit = 250
        paginator.default_limit = 100
        transactions = paginator.paginate_queryset(Transaction.objects.all(), request)
        return Response(data={'entries': [x.to_dict() for x in transactions], 'limit': paginator.limit,
                              'offset': paginator.offset, 'overall_count': paginator.count},
                        status=status.HTTP_200_OK)
Пример #18
0
def loglastmonth(request):
    paginator = LimitOffsetPagination()
    paginator.default_limit = 50
    last_month = timezone.now() - timedelta(days=30)
    queryset = TaskLogs.objects.filter(date_finish__gte=last_month). \
        order_by('-date_finish')
    result_page = paginator.paginate_queryset(queryset, request)
    serializer = TaskLogSerializer(result_page, many=True)
    total_time = 0
    for timelogs in queryset:
        total_time += timelogs.time_active
    response1 = {'list': serializer.data, 'total_time': total_time}
    return paginator.get_paginated_response(response1)
Пример #19
0
def tasktimelogview(request, task_id):
    paginator = LimitOffsetPagination()
    paginator.default_limit = 50
    queryset = TaskLogs.objects.filter(
        task_id=task_id).order_by('-date_finish')
    result_page = paginator.paginate_queryset(queryset, request)
    serializer = TaskLogSerializer(result_page, many=True)
    timelog = TaskLogs.objects.filter(task_id=task_id)
    total_time = 0
    for timelogs in timelog:
        total_time += timelogs.time_active
    response1 = {'list': serializer.data, 'total_time': total_time}
    return paginator.get_paginated_response(response1)
Пример #20
0
 def get_assets(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     page = paginator.paginate_queryset(queryset=obj.assets.all(),
                                        request=self.context.get(
                                            'request', None))
     serializer = AssetUrlListSerializer(page,
                                         many=True,
                                         read_only=True,
                                         context=self.context)
     return OrderedDict([('count', paginator.count),
                         ('next', paginator.get_next_link()),
                         ('previous', paginator.get_previous_link()),
                         ('results', serializer.data)])
    def list(request) -> Response:
        """List users

        :param request: HTTP Request
        :return: Response
        """
        paginator = LimitOffsetPagination()
        paginator.max_limit = 250
        paginator.default_limit = 100
        users = paginator.paginate_queryset(User.objects.filter(active=True), request)
        return Response(
            data={'entries': [x.to_dict() for x in users], 'limit': paginator.limit,
                  'offset': paginator.offset, 'overall_count': paginator.count},
            status=status.HTTP_200_OK)
Пример #22
0
 def get_assets(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     page = paginator.paginate_queryset(
         queryset=obj.assets.all(),
         request=self.context.get('request', None)
     )
     serializer = AssetUrlListSerializer(
         page, many=True, read_only=True, context=self.context)
     return OrderedDict([
         ('count', paginator.count),
         ('next', paginator.get_next_link()),
         ('previous', paginator.get_previous_link()),
         ('results', serializer.data)
     ])
Пример #23
0
    def list(self, request, shop_slug=None, product_slug=None):
        queryset = ProductReviewModel.objects.filter(
            product__shop__slug=shop_slug, product__slug=product_slug).all()
        paginator = LimitOffsetPagination()
        paginator.default_limit = 25
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = ProductReviewSerializer(paginated_queryset, many=True)

        return Response(
            data={
                'limit': paginator.limit,
                'offset': paginator.offset,
                'count': paginator.count,
                'reviews': serializer.data
            })
Пример #24
0
def get_posts_for_profile(request):
    handle = request.data.get('handle')
    if not handle:
        return Response({'details': {
            'required_fields': ['handle']
        }},
                        status=status.HTTP_400_BAD_REQUEST)

    posts = Post.objects.filter(owner__account__handle=handle)

    paginator = LimitOffsetPagination()
    paginator.default_limit = 6
    result_page = paginator.paginate_queryset(posts, request)

    serializer = PostSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
    def list(request, user_pk=None) -> Response:
        """List transactions for a single user

        :param request: Request send from the client
        :param user_pk: Primary key to identify a user
        :return: Response
        """
        try:
            user = User.objects.get(id=user_pk)
        except User.DoesNotExist:
            return Response(data={'msg': 'user {} not found'.format(user_pk)}, status=status.HTTP_404_NOT_FOUND)
        paginator = LimitOffsetPagination()
        paginator.max_limit = 250
        paginator.default_limit = 100
        transactions = paginator.paginate_queryset(Transaction.objects.filter(user=user), request)
        return Response(data={'entries': [x.to_dict() for x in transactions], 'limit': paginator.limit,
                              'offset': paginator.offset, 'overall_count': paginator.count},
                        status=status.HTTP_200_OK)
Пример #26
0
def search_profiles(request):
    try:
        query = request.data['query']
    except KeyError:
        return Response({'details': {
            'required fields': ['query']
        }},
                        status=status.HTTP_400_BAD_REQUEST)

    profiles = Profile.objects.filter(
        Q(account__handle__icontains=query) | Q(full_name__icontains=query))

    paginator = LimitOffsetPagination()
    paginator.default_limit = 40
    result_page = paginator.paginate_queryset(profiles, request)

    serializer = ProfileSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #27
0
    def list(self, request):
        """Lists all available driver profiles near a certain location

        Arguments:
            request: the request data sent by the user,
                     it is used to get the queries entered by user,
                     and for Pagination

        Returns:
            returns HTTP 200 Response with the drivers' JSON data.
            if there are no coordinates given will return 400 Response.
        """

        try:
            user_longitude = float(request.GET.get('longitude'))
            user_latitude = float(request.GET.get('latitude'))
        except Exception:
            return Response("invalid coordinates",
                            status=status.HTTP_400_BAD_REQUEST)

        min_active_time = timezone.now() - timezone.timedelta(seconds=10)
        queryset = DriverProfileModel.objects.annotate(distance=haversine(
            user_latitude, user_longitude, F('live_location_latitude'),
            F('live_location_longitude'))).filter(
                distance__lte=2.5,
                is_busy=False,
                last_time_online__gte=min_active_time,
                is_active=True,
                is_available=True).order_by('distance')

        paginator = LimitOffsetPagination()
        paginator.default_limit = 10
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = DriverProfileSerializer(paginated_queryset, many=True)

        return Response(
            data={
                'limit': paginator.limit,
                'offset': paginator.offset,
                'count': paginator.count,
                'drivers': serializer.data
            })
Пример #28
0
    def get(self, request: Request) -> Response:
        self.info(request)

        params = self.__clear_request_params(request)

        try:
            publisher_s = Publisher.objects.filter(**params)

        except FieldError as error:
            self.exception(request, f'{error}')
            return Response(data={'errors': str(error)},
                            status=status.HTTP_400_BAD_REQUEST)

        paginator = LimitOffsetPagination()
        paginator.default_limit = DEFAULT_PAGE_LIMIT
        paged_publisher_s = paginator.paginate_queryset(publisher_s, request)

        serializer = PublisherSerializer(paged_publisher_s, many=True)

        return Response(data=serializer.data, )
Пример #29
0
 def get_children(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     queryset = CollectionChildrenQuerySet(obj).select_related(
         'owner', 'parent').prefetch_related(
             'permissions',
             'permissions__permission',
             'permissions__user',
             'permissions__content_object',
         ).all()
     page = paginator.paginate_queryset(queryset=queryset,
                                        request=self.context.get(
                                            'request', None))
     serializer = CollectionChildrenSerializer(page,
                                               read_only=True,
                                               many=True,
                                               context=self.context)
     return OrderedDict([('count', paginator.count),
                         ('next', paginator.get_next_link()),
                         ('previous', paginator.get_previous_link()),
                         ('results', serializer.data)])
Пример #30
0
def get_following_for_stream(request):
    stream_id = request.data.get('streamId')
    if not stream_id:
        return Response({'details': {
            'required_fields': ['streamId']
        }},
                        status=status.HTTP_400_BAD_REQUEST)

    profile_ids = ProfileFollow.objects.filter(
        stream=stream_id).values('profile')
    profiles = Profile.objects.filter(pk__in=profile_ids)

    # paginator = PageNumberPagination()
    # paginator.page_size = 20
    # result_page = paginator.paginate_queryset(profiles, request)

    paginator = LimitOffsetPagination()
    paginator.default_limit = 40
    result_page = paginator.paginate_queryset(profiles, request)

    serializer = ProfileSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #31
0
    def list(self, request):
        try:
            user_longitude = float(request.GET.get('longitude'))
            user_latitude = float(request.GET.get('latitude'))
            shop_type = request.GET.get('type')
            search = request.GET.get('search')
        except Exception:
            return Response("invalid coordinates",
                            status=status.HTTP_400_BAD_REQUEST)

        queryset = ShopProfileModel.objects.annotate(distance=haversine(
            user_latitude, user_longitude, F('address__location_latitude'),
            F('address__location_longitude'))).filter(
                distance__lte=2.5,
                is_open=True,
                is_active=True,
                opens_at__lte=timezone.now(),
                closes_at__gt=timezone.now()).order_by('distance')
        if shop_type:
            queryset = queryset.filter(shop_type__iexact=shop_type)
        if search:
            queryset_temp1 = queryset.filter(name__icontains=search)
            queryset_temp2 = queryset.filter(
                tags__tag__icontains=search).exclude(name__icontains=search)
            queryset = list(chain(queryset_temp1, queryset_temp2))

        paginator = LimitOffsetPagination()
        paginator.default_limit = 25
        paginator.max_limit = 100
        paginated_queryset = paginator.paginate_queryset(queryset, request)
        serializer = ShopProfileSerializer(paginated_queryset, many=True)

        return Response(
            data={
                'limit': paginator.limit,
                'offset': paginator.offset,
                'count': paginator.count,
                'shops': serializer.data
            })
Пример #32
0
 def get_children(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     queryset = CollectionChildrenQuerySet(obj).select_related(
         'owner', 'parent'
     ).prefetch_related(
         'permissions',
         'permissions__permission',
         'permissions__user',
         'permissions__content_object',
     ).all()
     page = paginator.paginate_queryset(
         queryset=queryset,
         request=self.context.get('request', None)
     )
     serializer = CollectionChildrenSerializer(
         page, read_only=True, many=True, context=self.context)
     return OrderedDict([
         ('count', paginator.count),
         ('next', paginator.get_next_link()),
         ('previous', paginator.get_previous_link()),
         ('results', serializer.data)
     ])
Пример #33
0
def get_following_for_profile_helper(handle, request):
    stream_ids = Stream.objects.filter(owner__account__handle=handle)
    profiles_ids = ProfileFollow.objects.filter(
        stream__in=stream_ids).values('profile').distinct()

    stream_follow_ids = StreamFollow.objects.filter(
        profile__account__handle=handle).values('stream')
    followed_streams = Stream.objects.filter(pk__in=stream_follow_ids)
    followed_stream_profiles_followed_ids = ProfileFollow.objects\
        .filter(stream__in=followed_streams).values('profile').distinct()

    profiles = Profile.objects\
        .filter(Q(pk__in=profiles_ids) | Q(pk__in=followed_stream_profiles_followed_ids)).distinct()

    # paginator = PageNumberPagination()
    # paginator.page_size = 3
    # result_page = paginator.paginate_queryset(profiles, request)

    paginator = LimitOffsetPagination()
    paginator.default_limit = 40
    result_page = paginator.paginate_queryset(profiles, request)

    serializer = ProfileSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #34
0
def get_followers_for_profile_helper(handle, request):
    # get the streams that follow this profile, then get their owners.
    streams_following = ProfileFollow.objects.filter(
        profile__account__handle=handle).values('stream')
    profile_owners_of_streams_following = Stream.objects.filter(
        pk__in=streams_following).values('owner')

    # get all the people following any one of these streams that is following this profile.
    profiles_following_streams_following = StreamFollow.objects.filter(stream__in=streams_following)\
        .values('profile')

    profiles = Profile.objects\
        .filter(Q(pk__in=profile_owners_of_streams_following) | Q(pk__in=profiles_following_streams_following)).distinct()

    # paginator = PageNumberPagination()
    # paginator.page_size = 20
    # result_page = paginator.paginate_queryset(profiles, request)

    paginator = LimitOffsetPagination()
    paginator.default_limit = 40
    result_page = paginator.paginate_queryset(profiles, request)

    serializer = ProfileSerializer(result_page, many=True)
    return paginator.get_paginated_response(serializer.data)
Пример #35
0
    def get(self, request: Request) -> Response:
        self.info(request)

        params = self.__clear_request_params(request)

        author = ''
        if 'author' in params:
            author = params.pop('author')

        article_s = Article.objects.all()

        if author:
            try:
                author_id = Author.objects.get(author_uuid=author)

            except Author.DoesNotExist:
                return Response(data={'errors': 'author not found'},
                                status=status.HTTP_404_NOT_FOUND)

            article_s = article_s.filter(authors__in=[author_id.id])

        try:
            article_s = article_s.filter(**params)

        except FieldError as error:
            self.exception(request, f'{error}')
            return Response(data={'errors': str(error)},
                            status=status.HTTP_400_BAD_REQUEST)

        paginator = LimitOffsetPagination()
        paginator.default_limit = DEFAULT_PAGE_LIMIT
        paged_article_s = paginator.paginate_queryset(article_s, request)

        serializer = ArticleSerializer(paged_article_s, many=True)

        return Response(data=serializer.data, )