+ self.force_sort = force_sort
+ self.prefix = prefix
+
+ def preferences(self, request):
+ if request.user.is_authenticated():
+ if request.user.prop.pagination:
+ preferences = request.user.prop.pagination.get(self.id, {})
+ else:
+ preferences = {}
+ else:
+ preferences = request.session.get('paginator_%s%s' % (self.prefix, self.id), {})
+
+ return preferences
+
+ def set_preferences(self, request, preferences):
+ if request.user.is_authenticated():
+ all_preferences = request.user.prop.pagination or {}
+ all_preferences[self.id] = preferences
+ request.user.prop.pagination = all_preferences
+ else:
+ request.session['paginator_%s%s' % (self.prefix, self.id)] = preferences
+
+ def pagesize(self, request, session_prefs=None):
+ if not session_prefs:
+ session_prefs = self.preferences(request)
+
+
+ if self.has_pagesize:
+ if request.GET.get(self.PAGESIZE, None):
+ try:
+ pagesize = int(request.GET[self.PAGESIZE])
+ except ValueError:
+ logging.error('Found invalid page size "%s", loading %s, refered by %s' % (
+ request.GET.get(self.PAGESIZE, ''), request.path, request.META.get('HTTP_REFERER', 'UNKNOWN')
+ ))
+ raise Http404()
+
+ session_prefs[self.PAGESIZE] = pagesize
+ else:
+ pagesize = session_prefs.get(self.PAGESIZE, self.default_pagesize)
+
+ if not pagesize in self.pagesizes:
+ pagesize = self.default_pagesize
+ else:
+ pagesize = 30