Projet

Général

Profil

0003-added-class-based-view-GenericConnectorLogView.patch

WIP - Anonyme, 13 avril 2018 19:31

Télécharger (4,65 ko)

Voir les différences:

Subject: [PATCH 3/4] added class-based view GenericConnectorLogView

 passerelle/urls.py  |  3 +++
 passerelle/views.py | 48 ++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 50 insertions(+), 1 deletion(-)
passerelle/urls.py
9 9
from .views import (HomePageView, ManageView, ManageAddView,
10 10
        GenericCreateConnectorView, GenericDeleteConnectorView,
11 11
        GenericEditConnectorView, GenericEndpointView, GenericConnectorView,
12
        GenericConnectorLogView,
12 13
        login, logout, menu_json)
13 14
from .urls_utils import decorated_includes, required, app_enabled, manager_required
14 15
from .base.urls import access_urlpatterns
......
78 79
urlpatterns += [
79 80
    url(r'^(?P<connector>[\w,-]+)/(?P<slug>[\w,-]+)/$',
80 81
        GenericConnectorView.as_view(), name='view-connector'),
82
    url(r'^(?P<connector>[\w,-]+)/(?P<slug>[\w,-]+)/logs.json$',
83
        GenericConnectorLogView.as_view(), name='view-connector-log'),
81 84
    url(r'^(?P<connector>[\w,-]+)/(?P<slug>[\w,-]+)/(?P<endpoint>[\w,-]+)(?:/(?P<rest>.*))?$',
82 85
        GenericEndpointView.as_view(), name='generic-endpoint')
83 86
]
passerelle/views.py
1 1
import inspect
2 2
import json
3
import pytz
4
from datetime import datetime
3 5

  
4 6
from django.apps import apps
5 7
from django.conf.urls import url
......
14 16
from django.conf import settings
15 17
from django.shortcuts import resolve_url
16 18
from django.core.urlresolvers import reverse
19
from django.core.paginator import EmptyPage, PageNotAnInteger
17 20
from django.utils.translation import ugettext_lazy as _
18 21
from django.utils.encoding import force_text
22
from django.utils.timezone import make_aware
19 23
from django.forms.models import modelform_factory
20 24
from django.forms.widgets import ClearableFileInput
21 25

  
......
24 28
else:
25 29
    get_idps = lambda: []
26 30

  
27
from passerelle.base.models import BaseResource
31
from passerelle.base.models import BaseResource, ResourceLog
28 32

  
29 33
from .utils import to_json, response_for_json, is_authorized
30 34
from .forms import GenericConnectorForm
......
137 141
        template_names.append('passerelle/manage/service_view.html')
138 142
        return template_names
139 143

  
144
class GenericConnectorLogView(GenericConnectorMixin, View):
145

  
146
    content_type = 'application/json'
147
    epoch = make_aware(datetime(1970,1,1))
148

  
149
    def totimestamp(self, datetime_obj):
150
        td = datetime_obj - self.epoch
151
        # return td.total_seconds()
152
        return int((td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3)
153

  
154
    def resource_logs_table(self, request, *args, **kwargs):
155
        if 'slug' not in kwargs:
156
            raise HttpResponseBadRequest('URL must specify a slug value')
157
        if 'connector' not in kwargs:
158
            raise HttpResponseBadRequest('URL must specify a connector value')
159
        page = request.GET.get('page', 1)
160
        return ResourceLog.objects.get_paginated_logs(kwargs['connector'], kwargs['slug'], page)
161

  
162
    def get(self, request, *args, **kwargs):
163
        page_obj = self.resource_logs_table(request, *args, **kwargs)
164
        # no previous or next is representezd a None value
165
        try:
166
            previous_page_number = page_obj.previous_page_number()
167
        except (EmptyPage,):
168
            previous_page_number = None
169
        try:
170
            next_page_number = page_obj.next_page_number()
171
        except (EmptyPage,):
172
            next_page_number = None
173
        return response_for_json(request, dict([
174
            ('count', page_obj.paginator.count),
175
            ('page_range', list(page_obj.paginator.page_range)),
176
            ('number', page_obj.number),
177
            ('next_page_number', next_page_number),
178
            ('previous_page_number', previous_page_number),
179
            ('logs', [dict([('message', log.message),
180
                ('timestamp', self.totimestamp(log.timestamp)),
181
                ('level', log.level),
182
                ('extra', log.extra),
183
                ('sourceip', log.sourceip)]) for log in page_obj])
184
        ]))
185

  
140 186

  
141 187
class GenericCreateConnectorView(GenericConnectorMixin, CreateView):
142 188
    template_name = 'passerelle/manage/service_form.html'
143
-