X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;ds=sidebyside;f=qcg%2Futils.py;h=bc9135f1e414ab94c912d80f4114c025d9e2731d;hb=eaece5323f2f552542b44279210c787e412efa37;hp=353dc0c35a8a57ec96eed13aed5c5d335cac3de1;hpb=f65c86b86fd66ad8b0d45f3a5e4f6169e2e71d19;p=qcg-portal.git diff --git a/qcg/utils.py b/qcg/utils.py index 353dc0c..bc9135f 100644 --- a/qcg/utils.py +++ b/qcg/utils.py @@ -1,9 +1,12 @@ -from datetime import timedelta +from django.core.paginator import Paginator from django.db import transaction -from django.utils.timezone import now +from django.utils.formats import date_format +from django.utils.timezone import now, localtime 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} @@ -58,3 +61,27 @@ def update_user_data(user, proxy): # 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} + + +def localtime_str(datetime): + return date_format(localtime(datetime), 'DATETIME_FORMAT')