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
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
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
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"))
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
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
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"))
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"))