0001-general-add-possibility-to-override-trace-emails-rec.patch
passerelle/base/migrations/0010_loggingparameters_trace_emails.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.12 on 2018-11-25 13:55 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 | ||
7 | ||
8 |
class Migration(migrations.Migration): |
|
9 | ||
10 |
dependencies = [ |
|
11 |
('base', '0009_auto_20181118_0807'), |
|
12 |
] |
|
13 | ||
14 |
operations = [ |
|
15 |
migrations.AddField( |
|
16 |
model_name='loggingparameters', |
|
17 |
name='trace_emails', |
|
18 |
field=models.TextField(blank=True, help_text='One address per line (empty for site administrators)', verbose_name='Emails to receive error and critical traces'), |
|
19 |
), |
|
20 |
] |
passerelle/base/models.py | ||
---|---|---|
15 | 15 |
from django.core.urlresolvers import reverse |
16 | 16 |
from django.db import models, transaction |
17 | 17 |
from django.db.models import Q |
18 |
from django.test import override_settings |
|
18 | 19 |
from django.utils.text import slugify |
19 | 20 |
from django.utils import timezone |
20 | 21 |
from django.utils.translation import ugettext_lazy as _ |
... | ... | |
154 | 155 |
return passerelle.utils.Request(resource=self, logger=self.logger) |
155 | 156 | |
156 | 157 |
@property |
157 |
def log_level(self):
|
|
158 |
def logging_parameters(self):
|
|
158 | 159 |
resource_type = ContentType.objects.get_for_model(self) |
159 | 160 |
try: |
160 | 161 |
return LoggingParameters.objects.get( |
161 | 162 |
resource_type=resource_type, |
162 |
resource_pk=self.id).log_level
|
|
163 |
resource_pk=self.id) |
|
163 | 164 |
except LoggingParameters.DoesNotExist: |
164 |
return 'INFO' |
|
165 |
return LoggingParameters( |
|
166 |
resource_type=resource_type, |
|
167 |
resource_pk=self.id) |
|
168 | ||
169 |
@property |
|
170 |
def log_level(self): |
|
171 |
return self.logging_parameters.log_level |
|
165 | 172 | |
166 | 173 |
def set_log_level(self, value): |
167 |
resource_type = ContentType.objects.get_for_model(self) |
|
168 |
parameters, created = LoggingParameters.objects.get_or_create( |
|
169 |
resource_type=resource_type, resource_pk=self.pk) |
|
174 |
parameters = self.logging_parameters |
|
170 | 175 |
parameters.log_level = value |
171 | 176 |
parameters.save() |
172 | 177 | |
... | ... | |
461 | 466 |
), |
462 | 467 |
default='INFO' |
463 | 468 |
) |
469 |
trace_emails = models.TextField( |
|
470 |
verbose_name=_('Emails to receive error and critical traces'), |
|
471 |
help_text=_('One address per line (empty for site administrators)'), |
|
472 |
blank=True |
|
473 |
) |
|
464 | 474 | |
465 | 475 |
class Meta: |
466 | 476 |
unique_together = (('resource_type', 'resource_pk')) |
... | ... | |
567 | 577 | |
568 | 578 |
ResourceLog.objects.create(**attr) |
569 | 579 | |
570 |
getattr(self._logger, levelname.lower())(message, *args, **kwargs) |
|
580 |
admins = settings.ADMINS |
|
581 |
logging_parameters = self.connector.logging_parameters |
|
582 |
if logging_parameters.trace_emails: |
|
583 |
admins = [('', x) for x in logging_parameters.trace_emails.splitlines()] |
|
584 |
with override_settings(ADMINS=admins): |
|
585 |
getattr(self._logger, levelname.lower())(message, *args, **kwargs) |
|
571 | 586 | |
572 | 587 |
def exception(self, message, *args, **kwargs): |
573 | 588 |
kwargs['exc_info'] = 1 |
passerelle/base/views.py | ||
---|---|---|
108 | 108 |
return context |
109 | 109 | |
110 | 110 |
def get_form_class(self): |
111 |
return model_forms.modelform_factory(
|
|
111 |
form_class = model_forms.modelform_factory(
|
|
112 | 112 |
LoggingParameters, |
113 |
fields=['log_level']) |
|
113 |
fields=['log_level', 'trace_emails']) |
|
114 |
form_class.base_fields['trace_emails'].widget.attrs['rows'] = '3' |
|
115 |
return form_class |
|
114 | 116 | |
115 | 117 |
def get_initial(self): |
116 | 118 |
d = self.initial.copy() |
117 | 119 |
d['resource_type'] = self.kwargs['resource_type'] |
118 | 120 |
d['resource_pk'] = self.kwargs['resource_pk'] |
119 |
d['log_level'] = self.get_resource().log_level |
|
121 |
parameters = self.get_resource().logging_parameters |
|
122 |
d['log_level'] = parameters.log_level |
|
123 |
d['trace_emails'] = parameters.trace_emails |
|
120 | 124 |
return d |
121 | 125 | |
122 | 126 |
def get_resource(self): |
... | ... | |
127 | 131 |
return self.get_resource().get_absolute_url() |
128 | 132 | |
129 | 133 |
def form_valid(self, form): |
130 |
self.get_resource().set_log_level(form.cleaned_data['log_level']) |
|
134 |
parameters = self.get_resource().logging_parameters |
|
135 |
parameters.log_level = form.cleaned_data['log_level'] |
|
136 |
parameters.trace_emails = form.cleaned_data['trace_emails'] |
|
137 |
parameters.save() |
|
131 | 138 |
return super(LoggingParametersUpdateView, self).form_valid(form) |
tests/test_manager.py | ||
---|---|---|
187 | 187 |
resp.form['log_level'] = 'DEBUG' |
188 | 188 |
resp = resp.form.submit() |
189 | 189 |
assert CsvDataSource.objects.get(id=csv.id).log_level == 'DEBUG' |
190 | ||
191 |
resp = app.get(csv.get_absolute_url()) |
|
192 |
resp = resp.click('logging parameters') |
|
193 |
resp.form['trace_emails'] = 'fred@localhost' |
|
194 |
resp = resp.form.submit() |
|
195 |
assert CsvDataSource.objects.get(id=csv.id).logging_parameters.trace_emails == 'fred@localhost' |
|
196 | ||
197 |
resp = app.get(csv.get_absolute_url()) |
|
198 |
resp = resp.click('logging parameters') |
|
199 |
assert resp.form['trace_emails'].value == 'fred@localhost' |
|
190 |
- |