0002-base-use-deferrable-to-create-ResourceLog-objects-31.patch
passerelle/base/models.py | ||
---|---|---|
35 | 35 | |
36 | 36 |
from model_utils.managers import InheritanceManager as ModelUtilsInheritanceManager |
37 | 37 | |
38 | ||
38 | 39 |
import passerelle |
39 | 40 |
from passerelle.forms import GenericConnectorForm |
40 | 41 |
from passerelle.utils.api import endpoint |
42 |
from passerelle.utils.defer import deferrable |
|
41 | 43 |
from passerelle.utils.jsonresponse import APIError |
42 | 44 |
from passerelle.utils.sftp import SFTPField, SFTP |
43 | 45 | |
... | ... | |
844 | 846 |
extra = JSONField(verbose_name='extras', default=dict) |
845 | 847 |
transaction_id = models.UUIDField(null=True, db_index=True) |
846 | 848 | |
849 |
@classmethod |
|
850 |
@deferrable |
|
851 |
def safe_create(cls, **attr): |
|
852 |
cls.objects.create(**attr) |
|
853 | ||
847 | 854 |
class Meta: |
848 | 855 |
ordering = ('id',) |
849 | 856 |
permissions = (('see_resourcelog', 'Can see resource logs'),) |
... | ... | |
969 | 976 |
(exc_type, exc_value, tb) = sys.exc_info() |
970 | 977 |
attr['extra']['error_summary'] = traceback.format_exception_only(exc_type, exc_value) |
971 | 978 | |
972 |
ResourceLog.objects.create(**attr)
|
|
979 |
ResourceLog.safe_create(**attr)
|
|
973 | 980 | |
974 | 981 |
admins = settings.ADMINS |
975 | 982 |
logging_parameters = self.connector.logging_parameters |
tests/test_proxylogger.py | ||
---|---|---|
383 | 383 |
assert ResourceLog.objects.all()[1].extra.get('response_content') == '\'{"service_reply_var": "33\'' |
384 | 384 |
else: |
385 | 385 |
assert ResourceLog.objects.all()[1].extra.get('response_content') == 'b\'{"service_reply_var": "33\'' |
386 | ||
387 | ||
388 |
def test_log_in_transaction(transactional_db, connector): |
|
389 |
from passerelle.utils.defer import deferrable_barrier |
|
390 |
from django.db import transaction |
|
391 | ||
392 |
qs = ResourceLog.objects.filter(message='coucou') |
|
393 |
# without deferrable_barrier logs are lost |
|
394 |
assert not qs.exists() |
|
395 |
try: |
|
396 |
with transaction.atomic(): |
|
397 |
connector.logger.info('coucou') |
|
398 |
raise Exception |
|
399 |
assert qs.exists() |
|
400 |
except Exception: |
|
401 |
pass |
|
402 |
assert not qs.exists() |
|
403 | ||
404 |
# with deferrable_barrier logs are kept |
|
405 |
try: |
|
406 |
with deferrable_barrier: |
|
407 |
with transaction.atomic(): |
|
408 |
connector.logger.info('coucou') |
|
409 |
raise Exception |
|
410 |
assert qs.exists() |
|
411 |
except Exception: |
|
412 |
pass |
|
413 |
assert qs.exists() |
|
386 |
- |