Ejemplo n.º 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
            })
Ejemplo n.º 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)
Ejemplo n.º 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
        })
Ejemplo n.º 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)
Ejemplo n.º 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})
Ejemplo n.º 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
            })
Ejemplo n.º 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)
Ejemplo n.º 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})
Ejemplo n.º 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
        })
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
     ])
Ejemplo n.º 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
            })
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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
            })
Ejemplo n.º 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, )
Ejemplo n.º 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)])
Ejemplo n.º 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)
Ejemplo n.º 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
            })
Ejemplo n.º 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)
     ])
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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, )