Revision 77aaed51 snf-astakos-app/astakos/im/views.py
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
47 | 47 |
from django.db.models import Q |
48 | 48 |
from django.db.utils import IntegrityError |
49 | 49 |
from django.forms.fields import URLField |
50 |
from django.db.models.fields import DateTimeField |
|
51 | 50 |
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, \ |
52 | 51 |
HttpResponseRedirect, HttpResponseBadRequest, Http404 |
53 | 52 |
from django.shortcuts import redirect |
... | ... | |
58 | 57 |
get_model_and_form_class) |
59 | 58 |
from django.views.generic.list_detail import object_list, object_detail |
60 | 59 |
from django.http import HttpResponseBadRequest |
61 |
from django.core.paginator import Paginator, InvalidPage |
|
62 | 60 |
from django.core.xheaders import populate_xheaders |
63 | 61 |
|
64 | 62 |
from astakos.im.models import ( |
... | ... | |
78 | 76 |
switch_account_to_shibboleth, |
79 | 77 |
send_admin_notification, |
80 | 78 |
SendNotificationError) |
81 |
from astakos.im.settings import ( |
|
82 |
COOKIE_NAME, COOKIE_DOMAIN, SITENAME, LOGOUT_NEXT, |
|
83 |
LOGGING_LEVEL, PAGINATE_BY) |
|
79 |
from astakos.im.settings import (COOKIE_NAME, COOKIE_DOMAIN, SITENAME, |
|
80 |
LOGOUT_NEXT, LOGGING_LEVEL, PAGINATE_BY) |
|
84 | 81 |
from astakos.im.tasks import request_billing |
85 | 82 |
|
86 | 83 |
logger = logging.getLogger(__name__) |
... | ... | |
754 | 751 |
d['own'].append(g) |
755 | 752 |
else: |
756 | 753 |
d['other'].append(g) |
757 |
|
|
758 |
d.setdefault('own', []) |
|
759 |
d.setdefault('other', []) |
|
760 |
for k, l in d.iteritems(): |
|
761 |
page = request.GET.get('%s_page' % k, 1) |
|
762 |
sorting = globals()['%s_sorting' % k] = request.GET.get('%s_sorting' % k) |
|
763 |
if sorting: |
|
764 |
sort_form = AstakosGroupSortForm({'sort_by': sorting}) |
|
765 |
if sort_form.is_valid(): |
|
766 |
sort_field = q._model_fields.get(sorting) |
|
767 |
default = _get_default(sort_field) |
|
768 |
l.sort(key=lambda i: getattr(i, sorting) if getattr(i, sorting) else default) |
|
769 |
globals()['%s_sorting' % k] = sorting |
|
770 |
paginator = Paginator(l, PAGINATE_BY) |
|
771 |
|
|
772 |
try: |
|
773 |
page_number = int(page) |
|
774 |
except ValueError: |
|
775 |
if page == 'last': |
|
776 |
page_number = paginator.num_pages |
|
777 |
else: |
|
778 |
# Page is not 'last', nor can it be converted to an int. |
|
779 |
raise Http404 |
|
780 |
try: |
|
781 |
page_obj = globals()['%s_page_obj' % k] = paginator.page(page_number) |
|
782 |
except InvalidPage: |
|
783 |
raise Http404 |
|
784 | 754 |
return object_list(request, queryset=none, |
785 | 755 |
extra_context={'is_search':False, |
786 |
'mine': own_page_obj, |
|
787 |
'other': other_page_obj, |
|
788 |
'own_sorting': own_sorting, |
|
789 |
'other_sorting': other_sorting |
|
756 |
'mine': d['own'], |
|
757 |
'other': d['other'], |
|
758 |
'own_sorting': request.GET.get('own_sorting'), |
|
759 |
'own_page': request.GET.get('own_page', 1), |
|
760 |
'other_sorting': request.GET.get('other_sorting'), |
|
761 |
'other_page': request.GET.get('other_page', 1), |
|
790 | 762 |
}) |
791 | 763 |
|
792 | 764 |
|
... | ... | |
1109 | 1081 |
data['bill_diskspace'] = filter(servicefilter('diskspace'), data['bill']) |
1110 | 1082 |
data['bill_addcredits'] = filter(servicefilter('addcredits'), data['bill']) |
1111 | 1083 |
|
1112 |
return data |
|
1113 |
|
|
1114 |
|
|
1115 |
def _get_default(field): |
|
1116 |
if isinstance(field, DateTimeField): |
|
1117 |
return datetime.utcfromtimestamp(0) |
|
1118 |
elif isinstance(field, int): |
|
1119 |
return 0 |
|
1120 |
return '' |
|
1084 |
return data |
Also available in: Unified diff