Esempio n. 1
0
def elastic_search(request):
    """Use Elasticsearch for global search."""
    user_input = UserInput(
        query=request.GET.get('q'),
        type=request.GET.get('type', 'project'),
        project=request.GET.get('project'),
        version=request.GET.get('version', LATEST),
        taxonomy=request.GET.get('taxonomy'),
        language=request.GET.get('language'),
    )
    results = ''

    facets = {}

    if user_input.query:
        if user_input.type == 'project':
            project_search = ProjectDocument.faceted_search(
                query=user_input.query, language=user_input.language)
            results = project_search.execute()
            facets = results.facets
        elif user_input.type == 'file':
            kwargs = {}
            if user_input.project:
                projects_list = get_project_list_or_404(
                    project_slug=user_input.project, user=request.user)
                project_slug_list = [project.slug for project in projects_list]
                kwargs['projects_list'] = project_slug_list
            if user_input.version:
                kwargs['versions_list'] = user_input.version

            page_search = PageDocument.faceted_search(query=user_input.query,
                                                      **kwargs)
            results = page_search.execute()
            facets = results.facets

    if settings.DEBUG:
        print(pprint(results))
        print(pprint(facets))

    if user_input.query:
        user = ''
        if request.user.is_authenticated():
            user = request.user
        log.info(
            LOG_TEMPLATE.format(
                user=user,
                project=user_input.project or '',
                type=user_input.type or '',
                version=user_input.version or '',
                language=user_input.language or '',
                msg=user_input.query or '',
            ))

    template_vars = user_input._asdict()
    template_vars.update({'results': results, 'facets': facets})
    return render(
        request,
        'search/elastic_search.html',
        template_vars,
    )
Esempio n. 2
0
    def get_all_projects_url(self):
        version_slug = self.request.query_params.get('version')
        project_slug = self.request.query_params.get('project')
        all_projects = get_project_list_or_404(project_slug=project_slug, user=self.request.user)
        projects_url = {}

        for project in all_projects:
            projects_url[project.slug] = project.get_docs_url(version_slug=version_slug)

        return projects_url
Esempio n. 3
0
    def get_all_projects(self):
        """
        Return a list containing the project itself and all its subprojects.

        The project slug is retrieved from ``project`` query param.

        :rtype: list

        :raises: Http404 if project is not found
        """
        project_slug = self.request.query_params.get('project')
        version_slug = self.request.query_params.get('version')
        all_projects = get_project_list_or_404(
            project_slug=project_slug, user=self.request.user, version_slug=version_slug,
        )
        return all_projects
Esempio n. 4
0
    def get_all_projects(self):
        """
        Return a list containing the project itself and all its subprojects.

        The project slug is retrieved from ``project`` query param.

        :rtype: list

        :raises: Http404 if project is not found
        """
        project_slug = self.request.query_params.get('project')
        version_slug = self.request.query_params.get('version')
        all_projects = get_project_list_or_404(
            project_slug=project_slug, user=self.request.user, version_slug=version_slug,
        )
        return all_projects