From 3affe08d29ece99bd815c126dc4d89b5f1c88ffa Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Tue, 3 Apr 2018 05:00:06 +0200 Subject: [PATCH] Factorisation de paginator + pagination des machines dans profil --- cotisations/views.py | 23 +++-------------- logs/views.py | 25 +++---------------- machines/views.py | 13 ++-------- preferences/views.py | 1 - re2o/utils.py | 17 +++++++++++++ re2o/views.py | 13 ++-------- topologie/views.py | 36 +++------------------------ users/views.py | 59 ++++++-------------------------------------- 8 files changed, 39 insertions(+), 148 deletions(-) diff --git a/cotisations/views.py b/cotisations/views.py index 9db33d1d..545f9ebe 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -28,7 +28,6 @@ import os from django.urls import reverse from django.shortcuts import render, redirect -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.validators import MaxValueValidator from django.contrib.auth.decorators import login_required, permission_required from django.contrib import messages @@ -45,7 +44,7 @@ from users.models import User from re2o.settings import LOGO_PATH from re2o import settings from re2o.views import form -from re2o.utils import SortTable +from re2o.utils import SortTable, re2o_paginator from re2o.acl import ( can_create, can_edit, @@ -455,14 +454,7 @@ def control(request): fields=('control', 'valid'), extra=0 ) - paginator = Paginator(facture_list, pagination_number) - page = request.GET.get('page') - try: - facture_list = paginator.page(page) - except PageNotAnInteger: - facture_list = paginator.page(1) - except EmptyPage: - facture_list = paginator.page(paginator.num.pages) + facture_list = re2o_paginator(request, facture_list, pagination_number) controlform = controlform_set(request.POST or None, queryset=facture_list.object_list) if controlform.is_valid(): controlform.save() @@ -517,16 +509,7 @@ def index(request): request.GET.get('order'), SortTable.COTISATIONS_INDEX ) - paginator = Paginator(facture_list, pagination_number) - page = request.GET.get('page') - try: - facture_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - facture_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - facture_list = paginator.page(paginator.num_pages) + facture_list = re2o_paginator(request, facture_list, pagination_number) return render(request, 'cotisations/index.html', { 'facture_list': facture_list }) diff --git a/logs/views.py b/logs/views.py index 5dd87eaa..84ff8180 100644 --- a/logs/views.py +++ b/logs/views.py @@ -39,7 +39,6 @@ from __future__ import unicode_literals from django.urls import reverse from django.shortcuts import render, redirect -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib import messages from django.contrib.auth.decorators import login_required from django.db.models import Count, Max @@ -100,6 +99,7 @@ from re2o.utils import ( all_baned, all_has_access, all_adherent, + re2o_paginator, ) from re2o.acl import ( can_view_all, @@ -139,17 +139,7 @@ def index(request): request.GET.get('order'), SortTable.LOGS_INDEX ) - paginator = Paginator(versions, pagination_number) - page = request.GET.get('page') - try: - versions = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - versions = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - versions = paginator.page(paginator.num_pages) - + versions = re2o_paginator(request, versions, pagination_number) # Force to have a list instead of QuerySet versions.count(0) # Items to remove later because invalid @@ -191,16 +181,7 @@ def stats_logs(request): request.GET.get('order'), SortTable.LOGS_STATS_LOGS ) - paginator = Paginator(revisions, pagination_number) - page = request.GET.get('page') - try: - revisions = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - revisions = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - revisions = paginator.page(paginator.num_pages) + revisions = re2o_paginator(request, revisions, pagination_number) return render(request, 'logs/stats_logs.html', { 'revisions_list': revisions }) diff --git a/machines/views.py b/machines/views.py index a3cfe209..ee23504d 100644 --- a/machines/views.py +++ b/machines/views.py @@ -33,7 +33,6 @@ from django.http import HttpResponse from django.shortcuts import render, redirect from django.shortcuts import get_object_or_404 from django.template.context_processors import csrf -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.template import Context, RequestContext, loader from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required @@ -123,6 +122,7 @@ from re2o.utils import ( all_has_access, filter_active_interfaces, SortTable, + re2o_paginator, ) from re2o.acl import ( can_create, @@ -863,16 +863,7 @@ def index(request): request.GET.get('order'), SortTable.MACHINES_INDEX ) - paginator = Paginator(machines_list, pagination_large_number) - page = request.GET.get('page') - try: - machines_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - machines_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - machines_list = paginator.page(paginator.num_pages) + machines_list = re2o_paginator(request, machines_list, pagination_large_number) return render(request, 'machines/index.html', {'machines_list': machines_list}) @login_required diff --git a/preferences/views.py b/preferences/views.py index 43befc72..22341c28 100644 --- a/preferences/views.py +++ b/preferences/views.py @@ -32,7 +32,6 @@ from __future__ import unicode_literals from django.urls import reverse from django.shortcuts import render, redirect -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required from django.db.models import ProtectedError diff --git a/re2o/utils.py b/re2o/utils.py index aaefca8d..8336aab5 100644 --- a/re2o/utils.py +++ b/re2o/utils.py @@ -42,6 +42,7 @@ from django.db.models import Q from django.contrib import messages from django.shortcuts import redirect from django.urls import reverse +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from cotisations.models import Cotisation, Facture, Paiement, Vente from machines.models import Domain, Interface, Machine @@ -280,6 +281,22 @@ class SortTable: else: return request +def re2o_paginator(request, query_set, pagination_number): + """Paginator script for list display in re2o. + :request: + :query_set: Query_set to paginate + :pagination_number: Number of entries to display""" + paginator = Paginator(query_set, pagination_number) + page = request.GET.get('page') + try: + results = paginator.page(page) + except PageNotAnInteger: + # If page is not an integer, deliver first page. + results = paginator.page(1) + except EmptyPage: + # If page is out of range (e.g. 9999), deliver last page of results. + results = paginator.page(paginator.num_pages) + return results def remove_user_room(room): """ Déménage de force l'ancien locataire de la chambre """ diff --git a/re2o/views.py b/re2o/views.py index 83cd7630..991b8702 100644 --- a/re2o/views.py +++ b/re2o/views.py @@ -31,7 +31,6 @@ from django.urls import reverse from django.shortcuts import render, redirect from django.template.context_processors import csrf from django.contrib.auth.decorators import login_required, permission_required -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from reversion.models import Version from django.contrib import messages from preferences.models import Service @@ -42,6 +41,7 @@ import os import time from itertools import chain import users, preferences, cotisations, topologie, machines +from .utils import re2o_paginator def form(ctx, template, request): """Form générique, raccourci importé par les fonctions views du site""" @@ -150,16 +150,7 @@ def history(request, application, object_name, object_id): if hasattr(instance, 'linked_objects'): for related_object in chain(instance.linked_objects()): reversions = reversions | Version.objects.get_for_object(related_object) - paginator = Paginator(reversions, pagination_number) - page = request.GET.get('page') - try: - reversions = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - reversions = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of result - reversions = paginator.page(paginator.num_pages) + reversions = re2o_paginator(request, reversions, pagination_number) return render( request, 're2o/history.html', diff --git a/topologie/views.py b/topologie/views.py index f87213fa..0d73d3ea 100644 --- a/topologie/views.py +++ b/topologie/views.py @@ -43,7 +43,6 @@ from django.db import IntegrityError from django.db import transaction from django.db.models import ProtectedError, Prefetch from django.core.exceptions import ValidationError -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from topologie.models import ( Switch, @@ -66,7 +65,7 @@ from topologie.forms import ( EditAccessPointForm ) from users.views import form -from re2o.utils import SortTable +from re2o.utils import re2o_paginator, SortTable from re2o.acl import ( can_create, can_edit, @@ -103,16 +102,7 @@ def index(request): SortTable.TOPOLOGIE_INDEX ) pagination_number = GeneralOption.get_cached_value('pagination_number') - paginator = Paginator(switch_list, pagination_number) - page = request.GET.get('page') - try: - switch_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - switch_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - switch_list = paginator.page(paginator.num_pages) + switch_list = re2o_paginator(request, switch_list, pagination_number) return render(request, 'topologie/index.html', { 'switch_list': switch_list }) @@ -158,16 +148,7 @@ def index_room(request): SortTable.TOPOLOGIE_INDEX_ROOM ) pagination_number = GeneralOption.get_cached_value('pagination_number') - paginator = Paginator(room_list, pagination_number) - page = request.GET.get('page') - try: - room_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - room_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - room_list = paginator.page(paginator.num_pages) + room_list = re2o_paginator(request, room_list, pagination_number) return render(request, 'topologie/index_room.html', { 'room_list': room_list }) @@ -189,16 +170,7 @@ def index_ap(request): SortTable.TOPOLOGIE_INDEX_BORNE ) pagination_number = GeneralOption.get_cached_value('pagination_number') - paginator = Paginator(ap_list, pagination_number) - page = request.GET.get('page') - try: - ap_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - ap_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - ap_list = paginator.page(paginator.num_pages) + ap_list = re2o_paginator(request, ap_list, pagination_number) return render(request, 'topologie/index_ap.html', { 'ap_list': ap_list }) diff --git a/users/views.py b/users/views.py index be87dd06..80680e40 100644 --- a/users/views.py +++ b/users/views.py @@ -37,7 +37,6 @@ from __future__ import unicode_literals from django.urls import reverse from django.shortcuts import get_object_or_404, render, redirect -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required from django.db.models import ProtectedError, Q @@ -95,6 +94,7 @@ from re2o.views import form from re2o.utils import ( all_has_access, SortTable, + re2o_paginator ) from re2o.acl import ( can_create, @@ -572,16 +572,7 @@ def index(request): request.GET.get('order'), SortTable.USERS_INDEX ) - paginator = Paginator(users_list, pagination_number) - page = request.GET.get('page') - try: - users_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - users_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - users_list = paginator.page(paginator.num_pages) + users_list = re2o_paginator(request, users_list, pagination_number) return render(request, 'users/index.html', {'users_list': users_list}) @@ -597,16 +588,7 @@ def index_clubs(request): request.GET.get('order'), SortTable.USERS_INDEX ) - paginator = Paginator(clubs_list, pagination_number) - page = request.GET.get('page') - try: - clubs_list = paginator.page(page) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - clubs_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - clubs_list = paginator.page(paginator.num_pages) + clubs_list = re2o_paginator(request, clubs_list, pagination_number) return render(request, 'users/index_clubs.html', {'clubs_list': clubs_list}) @@ -622,16 +604,7 @@ def index_ban(request): request.GET.get('order'), SortTable.USERS_INDEX_BAN ) - paginator = Paginator(ban_list, pagination_number) - page = request.GET.get('page') - try: - ban_list = paginator.page(page) - except PageNotAnInteger: - # If page isn't an integer, deliver first page - ban_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - ban_list = paginator.page(paginator.num_pages) + ban_list = re2o_paginator(request, ban_list, pagination_number) return render(request, 'users/index_ban.html', {'ban_list': ban_list}) @@ -647,16 +620,7 @@ def index_white(request): request.GET.get('order'), SortTable.USERS_INDEX_BAN ) - paginator = Paginator(white_list, pagination_number) - page = request.GET.get('page') - try: - white_list = paginator.page(page) - except PageNotAnInteger: - # If page isn't an integer, deliver first page - white_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - white_list = paginator.page(paginator.num_pages) + white_list = re2o_paginator(request, white_list, pagination_number) return render( request, 'users/index_whitelist.html', @@ -676,16 +640,7 @@ def index_school(request): request.GET.get('order'), SortTable.USERS_INDEX_SCHOOL ) - paginator = Paginator(school_list, pagination_number) - page = request.GET.get('page') - try: - school_list = paginator.page(page) - except PageNotAnInteger: - # If page isn't an integer, deliver first page - school_list = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - school_list = paginator.page(paginator.num_pages) + school_list = re2o_paginator(request, school_list, pagination_number) return render( request, 'users/index_schools.html', @@ -754,6 +709,8 @@ def profil(request, users, userid): request.GET.get('order'), SortTable.MACHINES_INDEX ) + pagination_large_number = GeneralOption.get_cached_value('pagination_large_number') + machines = re2o_paginator(request, machines, pagination_large_number) factures = Facture.objects.filter(user=users) factures = SortTable.sort( factures,