예제 #1
0
    def get_queryset(self):
        request = self.request

        # Allow pages to be filtered to a specific type
        try:
            models = page_models_from_string(
                request.GET.get('type', 'wagtailcore.Page'))
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        if not models:
            models = [Page]

        if len(models) == 1:
            queryset = models[0].objects.all()
        else:
            queryset = Page.objects.all()

            # Filter pages by specified models
            queryset = filter_page_type(queryset, models)

        # Hide root page
        # TODO: Add "include_root" flag
        queryset = queryset.exclude(depth=1).specific()

        return queryset
예제 #2
0
    def get_queryset(self):
        request = self.request

        # Allow pages to be filtered to a specific type
        try:
            models = page_models_from_string(request.GET.get('type', 'wagtailcore.Page'))
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        if not models:
            models = [Page]

        if len(models) == 1:
            queryset = models[0].objects.all()
        else:
            queryset = Page.objects.all()

            # Filter pages by specified models
            queryset = filter_page_type(queryset, models)

        # Hide root page
        # TODO: Add "include_root" flag
        queryset = queryset.exclude(depth=1)

        return queryset
예제 #3
0
    def get_queryset(self):
        request = self.request

        # Allow pages to be filtered to a specific type.
        try:
            models = page_models_from_string(
                request.GET.get('type', 'wagtailcore.Page'))
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        if not models:
            models = [Page]

        if len(models) == 1:
            queryset = models[0].objects.all()
        else:
            queryset = Page.objects.all()

            # Filter pages by specified models.
            queryset = self.filter_page_type(queryset, models)

        # Get live pages that are not in a private section.
        queryset = queryset.public().live()

        # Filter by site.
        queryset = queryset.descendant_of(request.site.root_page,
                                          inclusive=True)

        return queryset
예제 #4
0
    def get_queryset(self):
        request = self.request

        # Allow pages to be filtered to a specific type
        try:
            models = page_models_from_string(
                request.GET.get("type", "meetup_scraper.MeetupPage"))
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        if not models:
            models = [MeetupPage]

        if len(models) == 1:
            queryset = models[0].objects.all()
        else:
            queryset = Page.objects.all()

            # Filter pages by specified models
            queryset = filter_page_type(queryset, models)

        # Get live pages that are not in a private section
        queryset = queryset.public().live()

        # Filter by site
        if request.site:
            queryset = queryset.descendant_of(request.site.root_page,
                                              inclusive=True)
        else:
            # No sites configured
            queryset = queryset.none()

        return queryset
예제 #5
0
    def get_queryset(self):
        self._activate_language(self.request)
        request = self.request

        try:
            models = page_models_from_string(
                request.GET.get('type', 'wagtailcore.Page'))
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        _qs = Page.objects.all().public()
        if not (request.user and request.user.is_superuser):
            _qs = _qs.live()

        if self.request.site:
            _qs = _qs.descendant_of(self.request.site.root_page,
                                    inclusive=True)
        else:
            # No sites configured
            _qs = _qs.none()

        if not models:
            return _qs

        elif len(models) == 1:
            return models[0].objects.filter(
                id__in=_qs.values_list('id', flat=True))

        else:  # len(models) > 1
            return filter_page_type(_qs, models)
예제 #6
0
    def list(self, request):
        more_like_this_id = self.request.query_params.get('id')
        limit = self.request.query_params.get('limit', 20)
        content_type = self.request.query_params.get('type', 'wagtailcore.Page')
        exclude_ids = self.request.query_params.get('exclude')

        if more_like_this_id is None:
            raise BadRequestError('No ID is provided')

        queryset = self.get_queryset()
        try:
            more_like_this_page = queryset.filter(pk=more_like_this_id).get()
        except queryset.model.DoesNotExist:
            raise BadRequestError('The ID does not match a live page')

        try:
            models = page_models_from_string(content_type)
        except (LookupError, ValueError):
            raise BadRequestError("type doesn't exist")

        try:
            limit = int(limit)
        except ValueError:
            raise BadRequestError('Limit is not an integer')

        if not self.min_limit <= limit <= self.max_limit:
            raise BadRequestError('Limit is less than {} or more than {}'.format(self.min_limit, self.max_limit))

        exclude_ids = exclude_ids.split(',') if exclude_ids else []
        if len(exclude_ids) > 0:
            for i, val in enumerate(exclude_ids):
                try:
                    exclude_ids[i] = int(val)
                except ValueError:
                    raise BadRequestError('exclude is not a list of integers')

        backend = get_backend()
        related_pages = backend.get_similar_items(
            more_like_this_page,
            limit=limit,
            content_types=models,
            exclude_pks=exclude_ids,
        )

        serializer = self.serializer_class(related_pages, many=True)
        return Response(serializer.data)
예제 #7
0
    def get_queryset(self):
        """Allows the user to 1+ Page-derived models to query"""
        try:
            models = page_models_from_string(
                self.request.GET.get('type', 'wagtailcore.Page'))
        except (LookupError, ValueError) as exception:
            raise BadRequestError("type doesn't exist") from exception

        if not models:
            models = [Page]

        if len(models) == 1:
            queryset = models[0].objects.all()
        else:
            queryset = Page.objects.select_related('site').all()

            # Filter pages by specified models
            queryset = self._filter_page_type(queryset, models)

        queryset = queryset.public().live().specific()
        return queryset