24a5a24395877c077796fbe87026c65435a0fd42
[qcg-portal.git] / qcg / utils.py
1 from django.core.paginator import Paginator
2 from django.utils.formats import date_format
3 from django.utils.timezone import localtime
4
5 from qcg import constants
6
7
8 def get_attributes(obj, attrs):
9     return {name: getattr(obj, name) for name in attrs if getattr(obj, name) is not None}
10
11
12 def username_from_dn(dn):
13     _, username = dn.rsplit('=', 1)
14
15     return username
16
17
18 def try_parse_int(s, default=None, base=10):
19     try:
20         return int(s, base)
21     except (TypeError, ValueError):
22         return default
23
24
25 def paginator_context(request, objects, per_page=constants.PER_PAGE):
26     paginator = Paginator(objects, per_page)
27
28     page_num = try_parse_int(request.GET.get('page'), 1)
29     if not (1 <= page_num <= paginator.num_pages):
30         page_num = 1
31
32     pages_range = range(max(2, min(page_num - 2, paginator.num_pages - 4)),
33                         min(max(page_num + 2, 5), paginator.num_pages) + 1)
34
35     return {'page': paginator.page(page_num), 'num_pages': paginator.num_pages, 'pages_range': pages_range}
36
37
38 def localtime_str(datetime):
39     return date_format(localtime(datetime), 'DATETIME_FORMAT')