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