+ self.force_sort = force_sort
+ self.sticky_sort = sticky_sort
+
+ def session_preferences(self, request):
+ return request.session.get('paginator_%s' % self.id, {})
+
+ def pagesize(self, request, session_prefs=None):
+ if not session_prefs:
+ session_prefs = self.session_preferences(request)
+
+
+ if self.has_pagesize:
+ if request.GET.get(labels.PAGESIZE, None):
+ try:
+ pagesize = int(request.GET[labels.PAGESIZE])
+ except ValueError:
+ logging.error('Found invalid page size "%s", loading %s, refered by %s' % (
+ request.GET.get(labels.PAGESIZE, ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')
+ ))
+ raise Http404()
+
+ session_prefs[labels.PAGESIZE] = pagesize
+ else:
+ pagesize = session_prefs.get(labels.PAGESIZE, self.default_pagesize)
+
+ if not pagesize in self.pagesizes:
+ pagesize = self.default_pagesize
+ else:
+ pagesize = 30
+
+ return pagesize
+
+ def page(self, request):
+ try:
+ return int(request.GET.get(labels.PAGE, 1))
+ except ValueError:
+ logging.error('Found invalid page number "%s", loading %s, refered by %s' % (
+ request.GET.get(labels.PAGE, ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')
+ ))
+ raise Http404()
+
+ def sort(self, request, session_prefs=None):
+ if not session_prefs:
+ session_prefs = self.session_preferences(request)
+
+ sort = None
+ if self.has_sort:
+ if request.GET.get(labels.SORT, None):
+ sort = request.GET[labels.SORT]
+ if self.sticky_sort or session_prefs.get('sticky_sort', False):
+ session_prefs[labels.SORT] = sort
+ else:
+ sort = self.force_sort or session_prefs.get(labels.SORT, self.default_sort)
+
+ if not sort in self.sort_methods:
+ sort = self.default_sort
+
+ return sort