コード例 #1
0
ファイル: resource.py プロジェクト: digimatspa/arches
    def paginate_related_resources(self, related_resources, page, request):
        total = related_resources["total"]["value"]
        paginator, pages = get_paginator(request, related_resources, total, page, settings.RELATED_RESOURCES_PER_PAGE)
        page = paginator.page(page)

        def parse_relationshiptype_label(relationship):
            if relationship["relationshiptype_label"].startswith("http"):
                relationship["relationshiptype_label"] = relationship["relationshiptype_label"].rsplit("/")[-1]
            return relationship

        related_resources["resource_relationships"] = [parse_relationshiptype_label(r) for r in related_resources["resource_relationships"]]

        ret = {}
        ret["related_resources"] = related_resources
        ret["paginator"] = {}
        ret["paginator"]["current_page"] = page.number
        ret["paginator"]["has_next"] = page.has_next()
        ret["paginator"]["has_previous"] = page.has_previous()
        ret["paginator"]["has_other_pages"] = page.has_other_pages()
        ret["paginator"]["next_page_number"] = page.next_page_number() if page.has_next() else None
        ret["paginator"]["previous_page_number"] = page.previous_page_number() if page.has_previous() else None
        ret["paginator"]["start_index"] = page.start_index()
        ret["paginator"]["end_index"] = page.end_index()
        ret["paginator"]["pages"] = pages

        return ret
コード例 #2
0
    def post_search_hook(self, search_results_object, results,
                         permitted_nodegroups):
        total = results['hits']['total']
        page = 1 if self.request.GET.get(
            details['componentname']) == '' else int(
                self.request.GET.get(details['componentname'], 1))

        paginator, pages = get_paginator(self.request, results, total, page,
                                         settings.SEARCH_ITEMS_PER_PAGE)
        page = paginator.page(page)

        ret = {}
        ret['current_page'] = page.number
        ret['has_next'] = page.has_next()
        ret['has_previous'] = page.has_previous()
        ret['has_other_pages'] = page.has_other_pages()
        ret['next_page_number'] = page.next_page_number() if page.has_next(
        ) else None
        ret['previous_page_number'] = page.previous_page_number(
        ) if page.has_previous() else None
        ret['start_index'] = page.start_index()
        ret['end_index'] = page.end_index()
        ret['pages'] = pages

        if details['componentname'] not in search_results_object:
            search_results_object[details['componentname']] = {}
        search_results_object[details['componentname']]['paginator'] = ret
コード例 #3
0
ファイル: resource.py プロジェクト: k-int/arches
    def paginate_related_resources(self, related_resources, page, request):
        total = related_resources['total']
        paginator, pages = get_paginator(request, related_resources, total,
                                         page,
                                         settings.RELATED_RESOURCES_PER_PAGE)
        page = paginator.page(page)

        def parse_relationshiptype_label(relationship):
            if relationship['relationshiptype_label'].startswith('http'):
                relationship['relationshiptype_label'] = relationship[
                    'relationshiptype_label'].rsplit('/')[-1]
            return relationship

        related_resources['resource_relationships'] = [
            parse_relationshiptype_label(r)
            for r in related_resources['resource_relationships']
        ]

        ret = {}
        ret['related_resources'] = related_resources
        ret['paginator'] = {}
        ret['paginator']['current_page'] = page.number
        ret['paginator']['has_next'] = page.has_next()
        ret['paginator']['has_previous'] = page.has_previous()
        ret['paginator']['has_other_pages'] = page.has_other_pages()
        ret['paginator']['next_page_number'] = page.next_page_number(
        ) if page.has_next() else None
        ret['paginator']['previous_page_number'] = page.previous_page_number(
        ) if page.has_previous() else None
        ret['paginator']['start_index'] = page.start_index()
        ret['paginator']['end_index'] = page.end_index()
        ret['paginator']['pages'] = pages

        return ret
コード例 #4
0
ファイル: search.py プロジェクト: cvast/arches
def search_results(request):
    search_results_dsl = build_search_results_dsl(request)
    dsl = search_results_dsl['query']
    search_buffer = search_results_dsl['search_buffer']
    dsl.include('graph_id')
    dsl.include('root_ontology_class')
    dsl.include('resourceinstanceid')
    dsl.include('points')
    dsl.include('geometries')
    dsl.include('displayname')
    dsl.include('displaydescription')
    dsl.include('map_popup')

    results = dsl.search(index='resource', doc_type=get_doc_type(request))

    if results is not None:
        total = results['hits']['total']
        page = 1 if request.GET.get('page') == '' else int(
            request.GET.get('page', 1))

        paginator, pages = get_paginator(request, results, total, page,
                                         settings.SEARCH_ITEMS_PER_PAGE)
        page = paginator.page(page)

        # only reuturn points and geometries a user is allowed to view
        geojson_nodes = get_nodegroups_by_datatype_and_perm(
            request, 'geojson-feature-collection', 'read_nodegroup')
        for result in results['hits']['hits']:
            points = []
            for point in result['_source']['points']:
                if point['nodegroup_id'] in geojson_nodes:
                    points.append(point)
            result['_source']['points'] = points

            geoms = []
            for geom in result['_source']['geometries']:
                if geom['nodegroup_id'] in geojson_nodes:
                    geoms.append(geom)
            result['_source']['geometries'] = geoms

        ret = {}
        ret['results'] = results
        ret['search_buffer'] = JSONSerializer().serialize(
            search_buffer) if search_buffer != None else None
        ret['paginator'] = {}
        ret['paginator']['current_page'] = page.number
        ret['paginator']['has_next'] = page.has_next()
        ret['paginator']['has_previous'] = page.has_previous()
        ret['paginator']['has_other_pages'] = page.has_other_pages()
        ret['paginator']['next_page_number'] = page.next_page_number(
        ) if page.has_next() else None
        ret['paginator']['previous_page_number'] = page.previous_page_number(
        ) if page.has_previous() else None
        ret['paginator']['start_index'] = page.start_index()
        ret['paginator']['end_index'] = page.end_index()
        ret['paginator']['pages'] = pages
        return JSONResponse(ret)
    else:
        return HttpResponseNotFound(
            _("There was an error retrieving the search results"))
コード例 #5
0
    def post_search_hook(self, search_results_object, results,
                         permitted_nodegroups):
        total = (
            results["hits"]["total"]["value"] if
            results["hits"]["total"]["value"] <= settings.SEARCH_RESULT_LIMIT
            else settings.SEARCH_RESULT_LIMIT)
        page = 1 if self.request.GET.get(
            details["componentname"]) == "" else int(
                self.request.GET.get(details["componentname"], 1))

        paginator, pages = get_paginator(self.request, results, total, page,
                                         settings.SEARCH_ITEMS_PER_PAGE)
        page = paginator.page(page)

        ret = {}
        ret["current_page"] = page.number
        ret["has_next"] = page.has_next()
        ret["has_previous"] = page.has_previous()
        ret["has_other_pages"] = page.has_other_pages()
        ret["next_page_number"] = page.next_page_number() if page.has_next(
        ) else None
        ret["previous_page_number"] = page.previous_page_number(
        ) if page.has_previous() else None
        ret["start_index"] = page.start_index()
        ret["end_index"] = page.end_index()
        ret["pages"] = pages

        if details["componentname"] not in search_results_object:
            search_results_object[details["componentname"]] = {}
        search_results_object[details["componentname"]]["paginator"] = ret
コード例 #6
0
ファイル: resource.py プロジェクト: fargeo/arches
    def paginate_related_resources(self, related_resources, page, request):
        total=related_resources['total']
        paginator, pages = get_paginator(request, related_resources, total, page, settings.RELATED_RESOURCES_PER_PAGE)
        page = paginator.page(page)

        def parse_relationshiptype_label(relationship):
            if relationship['relationshiptype_label'].startswith('http'):
                relationship['relationshiptype_label'] = relationship['relationshiptype_label'].rsplit('/')[-1]
            return relationship

        related_resources['resource_relationships'] = [parse_relationshiptype_label(r) for r in related_resources['resource_relationships']]

        ret = {}
        ret['related_resources'] = related_resources
        ret['paginator'] = {}
        ret['paginator']['current_page'] = page.number
        ret['paginator']['has_next'] = page.has_next()
        ret['paginator']['has_previous'] = page.has_previous()
        ret['paginator']['has_other_pages'] = page.has_other_pages()
        ret['paginator']['next_page_number'] = page.next_page_number() if page.has_next() else None
        ret['paginator']['previous_page_number'] = page.previous_page_number() if page.has_previous() else None
        ret['paginator']['start_index'] = page.start_index()
        ret['paginator']['end_index'] = page.end_index()
        ret['paginator']['pages'] = pages

        return ret
コード例 #7
0
ファイル: search.py プロジェクト: fargeo/arches
def search_results(request):
    try:
        search_results_dsl = build_search_results_dsl(request)
    except Exception as err:
        return JSONResponse(err.message, status=500)

    dsl = search_results_dsl['query']
    search_buffer = search_results_dsl['search_buffer']
    dsl.include('graph_id')
    dsl.include('root_ontology_class')
    dsl.include('resourceinstanceid')
    dsl.include('points')
    dsl.include('geometries')
    dsl.include('displayname')
    dsl.include('displaydescription')
    dsl.include('map_popup')
    dsl.include('provisional')

    results = dsl.search(index='resource', doc_type=get_doc_type(request))

    if results is not None:
        user_is_reviewer = request.user.groups.filter(name='Resource Reviewer').exists()
        total = results['hits']['total']
        page = 1 if request.GET.get('page') == '' else int(request.GET.get('page', 1))

        paginator, pages = get_paginator(request, results, total, page, settings.SEARCH_ITEMS_PER_PAGE)
        page = paginator.page(page)

        # only reuturn points and geometries a user is allowed to view
        geojson_nodes = get_nodegroups_by_datatype_and_perm(request, 'geojson-feature-collection', 'read_nodegroup')

        for result in results['hits']['hits']:
            result['_source']['points'] = select_geoms_for_results(result['_source']['points'], geojson_nodes, user_is_reviewer)
            result['_source']['geometries'] = select_geoms_for_results(result['_source']['geometries'], geojson_nodes, user_is_reviewer)

        ret = {}
        ret['results'] = results
        ret['search_buffer'] = JSONSerializer().serialize(search_buffer) if search_buffer != None else None
        ret['paginator'] = {}
        ret['paginator']['current_page'] = page.number
        ret['paginator']['has_next'] = page.has_next()
        ret['paginator']['has_previous'] = page.has_previous()
        ret['paginator']['has_other_pages'] = page.has_other_pages()
        ret['paginator']['next_page_number'] = page.next_page_number() if page.has_next() else None
        ret['paginator']['previous_page_number'] = page.previous_page_number() if page.has_previous() else None
        ret['paginator']['start_index'] = page.start_index()
        ret['paginator']['end_index'] = page.end_index()
        ret['paginator']['pages'] = pages

        return JSONResponse(ret)
    else:
        return HttpResponseNotFound(_("There was an error retrieving the search results"))
コード例 #8
0
def search_results(request):
    try:
        search_results_dsl = build_search_results_dsl(request)
    except Exception as err:
        return JSONResponse(err.message, status=500)

    dsl = search_results_dsl['query']
    search_buffer = search_results_dsl['search_buffer']
    dsl.include('graph_id')
    dsl.include('root_ontology_class')
    dsl.include('resourceinstanceid')
    dsl.include('points')
    dsl.include('geometries')
    dsl.include('displayname')
    dsl.include('displaydescription')
    dsl.include('map_popup')
    dsl.include('provisional_resource')
    if request.GET.get('tiles', None) is not None:
        dsl.include('tiles')

    results = dsl.search(index='resource', doc_type=get_doc_type(request))

    if results is not None:
        user_is_reviewer = request.user.groups.filter(
            name='Resource Reviewer').exists()
        total = results['hits']['total']
        page = 1 if request.GET.get('page') == '' else int(
            request.GET.get('page', 1))

        paginator, pages = get_paginator(request, results, total, page,
                                         settings.SEARCH_ITEMS_PER_PAGE)
        page = paginator.page(page)

        # only reuturn points and geometries a user is allowed to view
        geojson_nodes = get_nodegroups_by_datatype_and_perm(
            request, 'geojson-feature-collection', 'read_nodegroup')
        permitted_nodegroups = get_permitted_nodegroups(request.user)

        for result in results['hits']['hits']:
            result['_source']['points'] = select_geoms_for_results(
                result['_source']['points'], geojson_nodes, user_is_reviewer)
            result['_source']['geometries'] = select_geoms_for_results(
                result['_source']['geometries'], geojson_nodes,
                user_is_reviewer)
            try:
                permitted_tiles = []
                for tile in result['_source']['tiles']:
                    if tile['nodegroup_id'] in permitted_nodegroups:
                        permitted_tiles.append(tile)
                result['_source']['tiles'] = permitted_tiles
            except KeyError:
                pass

        ret = {}
        ret['results'] = results
        ret['search_buffer'] = JSONSerializer().serialize(
            search_buffer) if search_buffer != None else None
        ret['paginator'] = {}
        ret['paginator']['current_page'] = page.number
        ret['paginator']['has_next'] = page.has_next()
        ret['paginator']['has_previous'] = page.has_previous()
        ret['paginator']['has_other_pages'] = page.has_other_pages()
        ret['paginator']['next_page_number'] = page.next_page_number(
        ) if page.has_next() else None
        ret['paginator']['previous_page_number'] = page.previous_page_number(
        ) if page.has_previous() else None
        ret['paginator']['start_index'] = page.start_index()
        ret['paginator']['end_index'] = page.end_index()
        ret['paginator']['pages'] = pages
        ret['reviewer'] = user_is_reviewer

        return JSONResponse(ret)
    else:
        return HttpResponseNotFound(
            _("There was an error retrieving the search results"))