Ejemplo n.º 1
0
    def near(self, request, pk=None):
        signal = self.get_object()

        signals_for_geography_qs = Signal.objects.annotate(
            distance_from_point=Distance(
                'location__geometrie', signal.location.geometrie), ).filter(
                    (Q(parent__isnull=True) & Q(children__isnull=True))
                    | Q(parent__isnull=False),
                    distance_from_point__lte=app_settings.
                    SIGNAL_CONTEXT_GEOGRAPHY_RADIUS,
                    category_assignment__category_id=signal.
                    category_assignment.category.pk,
                    created_at__gte=(timezone.now() - timezone.timedelta(
                        weeks=app_settings.
                        SIGNAL_CONTEXT_GEOGRAPHY_CREATED_DELTA_WEEKS)),
                ).exclude(pk=signal.pk)

        paginator = LinkHeaderPagination(page_query_param='geopage',
                                         page_size=4000)
        page = paginator.paginate_queryset(signals_for_geography_qs,
                                           self.request,
                                           view=self)
        if page is not None:
            serializer = SignalContextGeoSerializer(
                page, many=True, context=self.get_serializer_context())
            return paginator.get_paginated_response(serializer.data)

        serializer = SignalContextGeoSerializer(
            page, many=True, context=self.get_serializer_context())
        return Response(serializer.data)
Ejemplo n.º 2
0
    def geography(self, request):
        filtered_qs = self.filter_queryset(self.get_queryset())

        paginator = LinkHeaderPagination(page_query_param='geopage')
        page = paginator.paginate_queryset(filtered_qs, self.request, view=self)
        if page is not None:
            serializer = AreaGeoSerializer(page, many=True)
            return paginator.get_paginated_response(serializer.data)

        serializer = AreaGeoSerializer(filtered_qs, many=True)
        return Response(serializer.data)
Ejemplo n.º 3
0
    def geography(self, request):
        # Makes use of the optimised queryset
        filtered_qs = self.filter_queryset(
            self.geography_queryset.filter_for_user(
                user=self.request.user
            )
        ).order_by(
            'id'  # Oldest Signals first
        )

        paginator = LinkHeaderPagination(page_query_param='geopage', page_size=4000)  # noqa page_size = 2.5 times the average signals made in a day, at this moment the highest average is 1600
        page = paginator.paginate_queryset(filtered_qs, self.request, view=self)
        if page is not None:
            serializer = SignalGeoSerializer(page, many=True)
            return paginator.get_paginated_response(serializer.data)

        serializer = SignalGeoSerializer(filtered_qs, many=True)
        return Response(serializer.data)