def get(self, request): def process_data(x): pid = x.get('id') userid = request.user.id statusset = Status.objects.filter(problem=pid, owner=userid) if statusset.count() == 0: x['score'] = -1 else: x['score'] = statusset.aggregate(Max('score'))['score__max'] x.pop('id') # Don't Leak ID in DataBase return x problem_filter = {} data = request.GET if not request.user.has_perm('problem.view_hidden'): problem_filter['enabled'] = True if data.get('title'): problem_filter['title__icontains'] = data.get('title') queryset = Problem.objects.filter(**problem_filter).order_by('pid') pg = LimitOffsetPagination() problems = pg.paginate_queryset(queryset=queryset, request=request, view=self) ps = ProblemListSerializer(problems, many=True) return Response( {'count': queryset.count(), 'res': [process_data(x) for x in ps.data]}, status=status.HTTP_200_OK )
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)
def get(self, request): humans = Human.objects.all().order_by('created_at') paginator = LimitOffsetPagination() result_page = paginator.paginate_queryset(humans, request) serializer = HumanSerializer(result_page, many=True, context={'request':request}) response = Response(serializer.data, status=status.HTTP_200_OK) return response
def most_compatible(self, request): """ Returns parliamentarians in compatibility order. """ extended_user = ExtendedUser.objects.get(user=request.user) if extended_user.should_update: update_compatibility(self) extended_user.should_update = False extended_user.save() compatibilities = request.user.compatibilities.all().order_by( '-compatibility' ) compatibilities_list = list() for compatibility in compatibilities: compatibility_serialized = CompatibilitySerializer( compatibility ).data del compatibility_serialized['user'] compatibility_serialized['compatibility'] = \ round(compatibility_serialized['compatibility'], 2) compatibilities_list.append(compatibility_serialized) paginator = LimitOffsetPagination() page = paginator.paginate_queryset(compatibilities_list, request) if page is not None: return paginator.get_paginated_response(page) return Response(compatibilities_list)
class CikViewSet(viewsets.ViewSet): paginator = LimitOffsetPagination() def cik_list(self, request, **kwargs): ciks = (Cik.objects.all().annotate( current_period_holding_count=Count( "filing_cik__filing", filter=Q(filing_cik__filing_list=request.period), ), current_period_fund_size=Sum( "filing_cik__filing__value", filter=Q(filing_cik__filing_list=request.period), ), total_periods_filed=Count("filing_cik__filing_list__id", distinct=True), ).values( "current_period_holding_count", "current_period_fund_size", "cik_number", "filer_name", "total_periods_filed", )) if sorting := request.GET.get("sorting"): ciks = ciks.order_by(sorting) else:
def get(self, request): paginator = LimitOffsetPagination() transactions = Transaction.objects.all() result_page = paginator.paginate_queryset(transactions, request) serializer = TransactionSerializer(result_page, many=True) return_data = paginator.get_paginated_response(serializer.data) return return_data
def most_active(self, request): """ Returns parliamentarians in votes count order. """ most_active = ParliamentaryVote.objects.filter( Q(option='Y') | Q(option='N') ).values('parliamentary').annotate( votes=Count('option') ).order_by('-votes', 'parliamentary__name') for parliamentary in most_active: parliamentary_obj = Parliamentary.objects.get( id=parliamentary['parliamentary'] ) parliamentary['parliamentary'] = ParliamentarySerializer( parliamentary_obj ).data paginator = LimitOffsetPagination() page = paginator.paginate_queryset(most_active, request) if page is not None: return paginator.get_paginated_response(page) return Response(most_active)
def streams(self, request, pk=None): streamer = self.get_object() streams = streamer.streams.all() paginator = LimitOffsetPagination() paginator.paginate_queryset(streams, request) serializer = StreamSerializer(streams, many=True) return paginator.get_paginated_response(serializer.data)
def order_list(request): paginator = LimitOffsetPagination() paginator.page_size = 15 orders = Order.objects.all() result_page = paginator.paginate_queryset(orders, request) serializer = OrderModelSerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data)
def bank_details(request): """ Endpoint to fetch the bank details params: search_query(q) """ try: paginator = LimitOffsetPagination() search_term = request.GET['q'] or '' bank_details_object = BankBranches.objects.filter( ( Q(branch__icontains= search_term) | Q(ifsc__icontains=search_term) | Q(city__icontains=search_term) | Q(district__icontains=search_term) | Q(state__icontains=search_term) | Q(bank_name__icontains=search_term) | Q(ifsc__icontains=search_term) | Q(address__icontains=search_term) ) ).order_by('ifsc') result_page = paginator.paginate_queryset(bank_details_object, request) file_obj = BankSerializer(result_page, many=True) return Response( { 'message': 'Bank details retrieved successfully!', 'data': file_obj.data }, status=status.HTTP_200_OK) except BankBranches.DoesNotExist: return Response({'message': 'No matching data found for the search entries!'}, status=status.HTTP_404_NOT_FOUND) except Exception as e: return Response({'message': str(e)}, status=status.HTTP_404_NOT_FOUND)
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 })
def stores(request): """Return list of stores ordered by postcode and name. This uses limitofsetpagination so that it can serve for both backend task and frontend task. Using limit result set can be limited to the any number. Three suggestion can be load as user type in and same result can be used to display first result, and for lazy load there can be another call without specifiying limit. Example Response: [{ 'name': 'St_Albans', 'postcode': 'AL12RJ', 'latitude': '51.741753', 'longitude': '-0.341337', }] """ search = request.GET.get('search') paginator = LimitOffsetPagination() queryset = Store.objects.all() if search: queryset = queryset.filter( Q(name__contains=search) or Q(postcode__contains=search)) queryset = queryset.order_by('postcode', 'name') if request.GET.get('limit'): page = paginator.paginate_queryset(queryset) if page is not None: serializer = StoreSerializer(page, many=True) return paginator.get_paginated_response(serializer.data) else: queryset = queryset.order_by('name') serializer = StoreSerializer(queryset, many=True) return Response(serializer.data)
class PropertyBaseOperView(APIView): base = Requests() pagination = LimitOffsetPagination() pagination.default_limit = 100 def post(self, request): try: response = breaker.call(self.base.post, self.base.URLS['prop'], request.data) json, status = self.base.logging('ADD PROPERTY', response) except (RequestException, pybreaker.CircuitBreakerError) as error: self.base.log_exception(error) tasks.post.delay(self.base.URLS['prop'], request.data) json = {'error': 'Service unavailable'} status = 503 finally: cache.set('prop_state', breaker._state_storage, None) return Response(json, status) def get(self, request, limit_offset=None): limit_offset = request.query_params url = self.base.URLS['prop'] if limit_offset: url += f'?limit={limit_offset["limit"]}&offset={limit_offset["offset"]}' try: response = breaker.call(self.base.get, url) json, status = self.base.logging('GET PROPERTIES', response) except (RequestException, pybreaker.CircuitBreakerError) as error: self.base.log_exception(error) json = {'error': 'Service unavailable'} status = 503 finally: cache.set('prop_state', breaker._state_storage, None) return Response(json, status)
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})
def get(self, request, *args, **kwargs): if "owner" in request.GET: get_data = request.query_params image = Image.objects.filter( owner=get_data['owner'], viewable='True').order_by('timestamp').reverse() else: image = Image.objects.filter( viewable='True').all().order_by('timestamp').reverse() if "checked" in request.GET: get_data = request.query_params image = Image.objects.filter( checked='False').all().order_by('timestamp').reverse() pagenator = LimitOffsetPagination() result_page = pagenator.paginate_queryset(image, request) serializer = ImageSerializer(result_page, many=True) response = { 'message': 'get image', 'result': serializer.data, "next": remove_query_param(pagenator.get_next_link(), '') } reset_queries() return Response(response, status=status.HTTP_200_OK)
def restaurant_list(request): paginator = LimitOffsetPagination() paginator.page_size = 15 rests = Restaurants.objects.all() result_page = paginator.paginate_queryset(rests, request) serializer = RestaurantModelSerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data)
def get(self, req): items = Item.objects.filter(on_sale=True).order_by('-date_posted') paginator = LimitOffsetPagination() paginated_items = paginator.paginate_queryset(items, req) # serialized = ItemSerializer(paginated_items, many=True).data serialized = [i.to_json() for i in paginated_items] return Response({'items': serialized})
def search(self, request): """This action returns result of a search request using cache""" paginator = LimitOffsetPagination() paginator.page_size = 20 data = request.data search_serializer = SearchSerializer(data=data) if search_serializer.is_valid(raise_exception=True): code = search_serializer.validated_data['code'].lower() if code in cache: result = cache.get(code) return Response(result) else: cities, all_cities = search_cities(code) page = paginator.paginate_queryset(all_cities, request) serializer = CityDetailedSerializer(page, many=True, context={ "code": code, "cities": cities }) result = serializer.data cache.set(code, result, timeout=CACHE_TTL) return paginator.get_paginated_response(result)
def get(self, request): paginator = LimitOffsetPagination() statement_files = StatementFile.objects.all() result_page = paginator.paginate_queryset(statement_files, request) serializer = StatementFileSerializer(result_page, many=True) return_data = paginator.get_paginated_response(serializer.data) return return_data
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)
def most_followed(self, request): """ Returns parliamentarians in followers count order. """ most_followed = Parliamentary.objects.values('id').annotate( followers=Count('followers') ).order_by('-followers', 'name') for parliamentary in most_followed: parliamentary_obj = Parliamentary.objects.get( id=parliamentary['id'] ) del parliamentary['id'] parliamentary['parliamentary'] = ParliamentarySerializer( parliamentary_obj ).data """ Returns the most followed parliamentary. """ paginator = LimitOffsetPagination() page = paginator.paginate_queryset(most_followed, request) if page is not None: return paginator.get_paginated_response(page) return Response(most_followed)
def get(self, request, *args, **kwargs): data = request.data paginator = LimitOffsetPagination() if 'user' not in data: return Response({'message': 'Please enter the user name'}, status=HTTP_400_BAD_REQUEST) try: user_obj = User.objects.get(username=data['user']) except: return Response({'message': 'The given user does not exist'}, status=HTTP_400_BAD_REQUEST) queryset = Recipe.objects.filter(user=user_obj.id) if queryset.count() > 0: context = paginator.paginate_queryset(queryset, request) serializer = RecipeRetrieveSerializer(context, many=True) return paginator.get_paginated_response(serializer.data) else: return Response( {'message': 'There are no recipes for the given ' 'user'}, status=HTTP_200_OK)
def get(self, request, *args, **kwargs): parameters = request.GET user = request.user if not user.is_authenticated: return self.err_res.UNAUTHORIZED limit = parameters.get('limit') if limit is not None: if not 10 <= int(limit) <= 100: return self.err_res.BAD_PAGINATION type_id = parameters.get('report_type_id') paginator = LimitOffsetPagination() report_dal = ReportDal() if type_id is None: query_data = paginator.paginate_queryset( self.report_dal.get_all(sorted_by='report_time'), request ) else: query_data = paginator.paginate_queryset( report_dal.get_by_type(type_id, sorted_by='report_time'), request ) reports_data = ReportDeepSerializer(query_data, many=True).data if not reports_data: return self.err_res.REPORT_NOT_FOUND return paginator.get_paginated_response(reports_data)
def productList(request): paginator = LimitOffsetPagination() paginator.page_size = 10 prods = Product.objects.all() result_page = paginator.paginate_queryset(prods, request) serializer = ProductSerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data)
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)
def brandList(request): paginator = LimitOffsetPagination() paginator.page_size = 10 brands = Brand.objects.all() result_page = paginator.paginate_queryset(brands, request) serializer = BrandSerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data)
class PostViewSet(MultiSerializerMixin, viewsets.ModelViewSet): queryset = Post.objects.all() paginator = LimitOffsetPagination() filter_backends = [SearchFilter, DjangoFilterBackend] search_fields = ['=owner__nickname', '=title'] filterset_fields = ['category__name'] serializers = { 'create': PostSerializer, 'update': PostSerializer, 'partial_update': PostSerializer, 'list': PostReadSerializer, 'retrieve': PostReadSerializer, } def perform_create(self, serializer): serializer.save(owner=self.request.user) def get_permissions(self): if self.action == 'create' or self.action == 'list' or self.action == 'retrieve'\ or self.action == 'list': self.permission_classes = [AllowAny] if self.action == 'destroy' or self.action == 'update' or self.action == 'partial_update': self.permission_classes = [IsObjectOwnerOrAdmin] return [permission() for permission in self.permission_classes]
def categoryList(request): paginator = LimitOffsetPagination() paginator.page_size = 10 cats = Category.objects.all() result_page = paginator.paginate_queryset(cats, request) serializer = CategorySerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data)
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
def get(self, request, *args, **kwargs): roles = Role.objects.all() # 分页实例 # 1. # pagination = PageNumberPagination() # page参数:页码,size参数:单页数据量 # pagination = MyPageNumberPagination() # 2. pagination = LimitOffsetPagination() # offset参数:起始数据的索引,limit参数:单页面限定展示的数据量 # pagination = MyLimitOffsetPagination() # 3. # pagination = CursorPagination() # pagination = MyCursorPagination() # 传入 queryset 、 请求 对象 和 视图对象(也就是当前视图对象,self)(可写可不写) pager_roles = pagination.paginate_queryset(queryset=roles, request=request, view=self) # 序列化分页后的数据 # serializer = RoleSerializer(instance=pager_roles, many=True) serializer = RoleSerializer2(instance=pager_roles, many=True) # return Response(data=serializer.data) # 返回分页自动生成的响应,第1、2种可以适用两种返回形式,第3种分页,只适合以下返回形式 return pagination.get_paginated_response(data=serializer.data)