0001-base-do-not-log-errors-in-check-status-45001.patch
passerelle/base/models.py | ||
---|---|---|
10 | 10 |
import sys |
11 | 11 |
import traceback |
12 | 12 |
import uuid |
13 |
from contextlib import contextmanager |
|
13 | 14 | |
14 | 15 |
from django import VERSION |
15 | 16 |
from django.apps import apps |
... | ... | |
27 | 28 |
from django.urls import reverse |
28 | 29 |
from django.utils import six, timezone |
29 | 30 |
from django.utils.encoding import force_text |
31 |
from django.utils.log import AdminEmailHandler |
|
30 | 32 |
from django.utils.six.moves.urllib.parse import urlparse |
31 | 33 |
from django.utils.text import slugify |
32 | 34 |
from django.utils.timezone import now |
... | ... | |
482 | 484 |
availability_parameters = self.availability_parameters |
483 | 485 | |
484 | 486 |
try: |
485 |
self.check_status() |
|
487 |
with self.logger.disable_admin_emails(): |
|
488 |
self.check_status() |
|
486 | 489 |
status = 'up' |
487 | 490 |
message = '' |
488 | 491 |
except NotImplementedError: |
... | ... | |
905 | 908 |
def level(self): |
906 | 909 |
return self._logger.getEffectiveLevel() |
907 | 910 | |
911 |
@contextmanager |
|
912 |
def disable_admin_emails(self): |
|
913 |
mail_admin_handler = [ |
|
914 |
handler for handler in self._logger.root.handlers if isinstance(handler, AdminEmailHandler) |
|
915 |
] |
|
916 |
if mail_admin_handler: |
|
917 |
mail_admin_handler = mail_admin_handler[0] |
|
918 | ||
919 |
previous_level = mail_admin_handler.level |
|
920 |
mail_admin_handler.setLevel(logging.CRITICAL) |
|
921 |
try: |
|
922 |
yield |
|
923 |
finally: |
|
924 |
mail_admin_handler.setLevel(previous_level) |
|
925 |
else: |
|
926 |
yield |
|
927 | ||
908 | 928 |
def _log(self, levelname, message, *args, **kwargs): |
909 | 929 |
force = kwargs.pop('force', False) |
910 | 930 |
if self.connector.down() and not force: |
tests/test_misc.py | ||
---|---|---|
1 | 1 |
import datetime |
2 | 2 | |
3 |
import mock |
|
3 | 4 |
import pytest |
4 | 5 |
from django.contrib.contenttypes.models import ContentType |
5 | 6 |
from django.core.files import File |
... | ... | |
9 | 10 |
from django.utils import timezone |
10 | 11 |
from django.utils.six import StringIO |
11 | 12 |
from mock import patch |
13 |
from requests.exceptions import ReadTimeout |
|
12 | 14 |
from test_manager import login |
13 | 15 | |
16 |
from passerelle.apps.base_adresse.models import BaseAdresse |
|
14 | 17 |
from passerelle.apps.clicrdv.models import ClicRdv |
15 | 18 |
from passerelle.apps.opengis.models import OpenGIS |
16 | 19 |
from passerelle.base.models import ResourceLog |
... | ... | |
172 | 175 |
CsvDataSource = apps.get_model(app, 'CsvDataSource') |
173 | 176 |
connector = CsvDataSource.objects.get(pk=pk) |
174 | 177 |
assert connector._dialect_options == data |
178 | ||
179 | ||
180 |
def test_check_status_no_traceback_email(db, settings, email_handler, mailoutbox): |
|
181 |
settings.ADMINS = [('admin', 'admin@example.net')] |
|
182 |
connector = BaseAdresse.objects.create(slug='base-adresse') |
|
183 | ||
184 |
with mock.patch('requests.sessions.HTTPAdapter.send', autospec=True, side_effect=ReadTimeout('timeout')): |
|
185 |
connector.availability() |
|
186 |
assert len(mailoutbox) == 1 |
|
187 |
assert 'is now down' in mailoutbox[0].subject |
|
188 |
assert ResourceLog.objects.exists() |
|
175 |
- |