SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 95dfb5c7 authored by Boris Ponsioen's avatar Boris Ponsioen
Browse files

Disables pagination in metacore for empty query: seems to be much faster

parent 897e73c9
No related branches found
No related tags found
No related merge requests found
...@@ -30,31 +30,25 @@ def get_crossref_test(cursor='*'): ...@@ -30,31 +30,25 @@ def get_crossref_test(cursor='*'):
params = {'cursor': cursor, 'rows': rows, 'mailto': 'b.g.t.ponsioen@uva.nl'} params = {'cursor': cursor, 'rows': rows, 'mailto': 'b.g.t.ponsioen@uva.nl'}
last_cursor = cursor last_cursor = cursor
for j in range(0,2): r = requests.get(url, params=params)
r = requests.get(url, params=params) r_json = r.json()
r_json = r.json()
citables_json = r_json['message']['items']
citables_json = r_json['message']['items'] cursor = r_json['message']['next-cursor']
cursor = r_json['message']['next-cursor'] number_of_results = len(r_json['message']['items'])
number_of_results = len(r_json['message']['items'])
citables = [parse_crossref_citable(it) for it in citables_json]
citables = [parse_crossref_citable(it) for it in citables_json] # Parser returns None if there's an error
# Parser returns None if there's an error errors = any([not i for i in citables if i == False])
errors = any([not i for i in citables if i == False]) orig_citables = citables
orig_citables = citables citables = [citable for citable in citables if citable]
citables = [citable for citable in citables if citable]
# Mass insert in database (will fail on encountering existing documents
# Mass insert in database (will fail on encountering existing documents # with same DOI
# with same DOI if citables:
if citables: Citable.objects.insert(citables)
Citable.objects.insert(citables)
break
elif errors:
print("Trying again")
else:
break
citable = [] citable = []
if number_of_results < rows: if number_of_results < rows:
print(number_of_results) print(number_of_results)
......
from django.shortcuts import render from django.shortcuts import render
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.utils import timezone from django.utils import timezone
from django.core.paginator import Paginator
from .models import Citable from .models import Citable
from .forms import CitableSearchForm from .forms import CitableSearchForm
...@@ -19,7 +20,7 @@ class CitableListView(ListView): ...@@ -19,7 +20,7 @@ class CitableListView(ListView):
queryset = self.form.search_results() queryset = self.form.search_results()
else: else:
# queryset = Citable.objects.simple().limit(100) # queryset = Citable.objects.simple().limit(100)
queryset = Citable.objects.simple().order_by('-metadata.is-referenced-by-count') queryset = Citable.objects.simple().order_by('-metadata.is-referenced-by-count').limit(10)
return queryset return queryset
...@@ -36,3 +37,18 @@ class CitableListView(ListView): ...@@ -36,3 +37,18 @@ class CitableListView(ListView):
context['browse'] = True context['browse'] = True
return context return context
def get_paginate_by(self, queryset):
"""
Dynamically compute pagination setting.
Can be used to disable pagination on 'empty' search -> manually doing .limit(N) seems
to be much faster with mongoengine than Django's pagination
Also you can add an extra parameter to specify pagination size, like so:
return self.request.GET.get('paginate_by', self.paginate_by)
"""
if self.request.GET:
return self.paginate_by
else:
return None
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment