Projet

Général

Profil

0002-created-passerelle.base.models.ResourceLogManager.patch

WIP - Anonyme, 13 avril 2018 19:31

Télécharger (3,73 ko)

Voir les différences:

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(-)
passerelle/base/models.py
17 17
from django.utils import timezone
18 18
from django.utils.translation import ugettext_lazy as _
19 19
from django.core.files.base import ContentFile
20
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
20 21

  
21 22
from django.contrib.contenttypes.models import ContentType
22 23
from django.contrib.contenttypes import fields
......
428 429
        return '%s (on %s <%s>) (for %s)' % (self.codename, self.resource_type, self.resource_pk, self.apiuser)
429 430

  
430 431

  
432
class ResourceLogManager(models.Manager):
433
    def get_paginated_logs(self, appname, slug, page, order_by=None, page_size=None):
434
        if order_by is None:
435
            order_by = '-timestamp'
436
        if page_size is None:
437
            page_size = 10
438

  
439
        qs = self.filter(appname=appname, slug=slug).order_by(order_by)
440
        paginator = Paginator(qs, page_size)
441
        try:
442
            logrecords = paginator.page(page)
443
        except PageNotAnInteger:
444
            logrecords = paginator.page(1)
445
        except (EmptyPage,):
446
            logrecords = paginator.page(paginator.num_pages)
447

  
448
        return logrecords
449

  
450

  
431 451
class ResourceLog(models.Model):
432 452
    timestamp = models.DateTimeField(auto_now_add=True)
433 453
    appname = models.CharField(max_length=128, verbose_name='appname', null=True)
......
437 457
    message = models.TextField(max_length=2048, verbose_name='message')
438 458
    extra = jsonfield.JSONField(verbose_name='extras', default={})
439 459

  
460
    objects = ResourceLogManager()
461

  
440 462
    class Meta:
441 463
        permissions = (
442 464
            ('view_resourcelog', 'Can view resource logs'),
......
449 471
    def __unicode__(self):
450 472
        return '%s %s %s %s' % (self.timestamp, self.levelno, self.appname, self.slug)
451 473

  
452

  
453 474
STATUS_CHOICES = (
454 475
    ('unknown', _('Unknown')),
455 476
    ('up', _('Up')),
passerelle/base/templatetags/passerelle.py
3 3
from django import template
4 4
from django.contrib.contenttypes.models import ContentType
5 5
from django.contrib.auth import get_permission_codename
6
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
7 6

  
8 7
from passerelle.utils import get_trusted_services
9 8
from ..models import AccessRight, ResourceLog
......
31 30
    connector = resource.get_connector_slug()
32 31
    context['connector'] = connector
33 32
    context['slug'] = resource.slug
34
    qs = ResourceLog.objects.filter(appname=connector, slug=resource.slug).order_by('-timestamp')
35

  
36
    paginator = Paginator(qs, 10)
37
    try:
38
        logrecords = paginator.page(page)
39
    except PageNotAnInteger:
40
        logrecords = paginator.page(1)
41
    except (EmptyPage,):
42
        logrecords = paginator.page(paginator.num_pages)
43

  
44
    context['logrecords'] = logrecords
33
    context['logrecords'] = ResourceLog.objects.get_paginated_logs(connector, resource.slug, page)
45 34
    return context
46 35

  
47 36

  
48
-