From 6314e46091b7900269218e0a28ef9e54c5e9e9b5 Mon Sep 17 00:00:00 2001 From: Elias Date: Mon, 22 Jan 2018 17:11:31 +0100 Subject: [PATCH 2/4] created passerelle.base.models.ResourceLogManager --- passerelle/base/models.py | 23 +++++++++++++++++++++- passerelle/base/templatetags/passerelle.py | 13 +----------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 77139a5..5509e93 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -17,6 +17,7 @@ from django.utils.text import slugify from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.core.files.base import ContentFile +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import fields @@ -428,6 +429,25 @@ class AccessRight(models.Model): return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser) +class ResourceLogManager(models.Manager): + def get_paginated_logs(self, appname, slug, page, order_by=None, page_size=None): + if order_by is None: + order_by = '-timestamp' + if page_size is None: + page_size = 10 + + qs = self.filter(appname=appname, slug=slug).order_by(order_by) + paginator = Paginator(qs, page_size) + try: + logrecords = paginator.page(page) + except PageNotAnInteger: + logrecords = paginator.page(1) + except (EmptyPage,): + logrecords = paginator.page(paginator.num_pages) + + return logrecords + + class ResourceLog(models.Model): timestamp = models.DateTimeField(auto_now_add=True) appname = models.CharField(max_length=128, verbose_name='appname', null=True) @@ -437,6 +457,8 @@ class ResourceLog(models.Model): message = models.TextField(max_length=2048, verbose_name='message') extra = jsonfield.JSONField(verbose_name='extras', default={}) + objects = ResourceLogManager() + class Meta: permissions = ( ('view_resourcelog', 'Can view resource logs'), @@ -449,7 +471,6 @@ class ResourceLog(models.Model): def __unicode__(self): return '%s %s %s %s' % (self.timestamp, self.levelno, self.appname, self.slug) - STATUS_CHOICES = ( ('unknown', _('Unknown')), ('up', _('Up')), diff --git a/passerelle/base/templatetags/passerelle.py b/passerelle/base/templatetags/passerelle.py index 2e51b37..039c4c9 100644 --- a/passerelle/base/templatetags/passerelle.py +++ b/passerelle/base/templatetags/passerelle.py @@ -3,7 +3,6 @@ from __future__ import absolute_import from django import template from django.contrib.contenttypes.models import ContentType from django.contrib.auth import get_permission_codename -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from passerelle.utils import get_trusted_services from ..models import AccessRight, ResourceLog @@ -31,17 +30,7 @@ def resource_logs_table(context, resource): connector = resource.get_connector_slug() context['connector'] = connector context['slug'] = resource.slug - qs = ResourceLog.objects.filter(appname=connector, slug=resource.slug).order_by('-timestamp') - - paginator = Paginator(qs, 10) - try: - logrecords = paginator.page(page) - except PageNotAnInteger: - logrecords = paginator.page(1) - except (EmptyPage,): - logrecords = paginator.page(paginator.num_pages) - - context['logrecords'] = logrecords + context['logrecords'] = ResourceLog.objects.get_paginated_logs(connector, resource.slug, page) return context -- 2.17.0