-from datetime import timedelta
+from django.core.paginator import Paginator
from django.db import transaction
from django.utils.timezone import now
from pyqcg.service import Registry
from pyqcg.utils import Credential, TimePeriod
+from qcg import constants
+
def get_attributes(obj, attrs):
return {name: getattr(obj, name) for name in attrs if getattr(obj, name) is not None}
# release user lock
user.last_update = now()
user.save()
+
+
+def try_parse_int(s, default=None, base=10):
+ try:
+ return int(s, base)
+ except (TypeError, ValueError):
+ return default
+
+
+def paginator_context(request, objects, per_page=constants.PER_PAGE):
+ paginator = Paginator(objects, per_page)
+
+ page_num = try_parse_int(request.GET.get('page'), 1)
+ if not (1 <= page_num <= paginator.num_pages):
+ page_num = 1
+
+ pages_range = range(max(2, min(page_num - 2, paginator.num_pages - 4)),
+ min(max(page_num + 2, 5), paginator.num_pages) + 1)
+
+ return {'page': paginator.page(page_num), 'num_pages': paginator.num_pages, 'pages_range': pages_range}