prevent inconsistent use of db alias (#36028)
This commit is contained in:
parent
762cd93c6d
commit
1dca515624
|
@ -1,6 +1,7 @@
|
|||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
import django.db.models
|
||||
|
||||
from .decorator import atomic
|
||||
|
@ -55,7 +56,10 @@ def record(tag, template, using=None, **kwargs):
|
|||
continue
|
||||
tag = Tag.objects.using(using).get_cached(name=name)
|
||||
if isinstance(value, django.db.models.Model):
|
||||
journal.objectdata_set.create(tag=tag, content_object=value)
|
||||
journal.objectdata_set.create(
|
||||
tag=tag, content_type=ContentType.objects.db_manager(using).get_for_model(value),
|
||||
object_id=value.pk
|
||||
)
|
||||
else:
|
||||
journal.stringdata_set.create(tag=tag, content=unicode(value))
|
||||
return journal
|
||||
|
@ -71,4 +75,5 @@ def error_record(tag, tpl, **kwargs):
|
|||
'''
|
||||
if kwargs.get('using') is None:
|
||||
kwargs['using'] = getattr(settings, 'JOURNAL_DB_FOR_ERROR_ALIAS', 'default')
|
||||
|
||||
return record(tag, tpl, **kwargs)
|
||||
|
|
|
@ -3,8 +3,18 @@ INSTALLED_APPS = (
|
|||
'django.contrib.sessions'
|
||||
)
|
||||
DATABASES = {
|
||||
'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2'}
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||
'NAME': '_test'
|
||||
},
|
||||
'error': {
|
||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||
'NAME': '_test'
|
||||
}
|
||||
}
|
||||
|
||||
SECRET_KEY = "django_tests_secret_key"
|
||||
PASSWORD_HASHERS = ('django.contrib.auth.hashers.MD5PasswordHasher',)
|
||||
ROOT_URLCONF = 'test_urls'
|
||||
|
||||
JOURNAL_DB_FOR_ERROR_ALIAS = 'error'
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.db import transaction
|
|||
|
||||
from django_journal.journal import record, error_record
|
||||
from django_journal.actions import export_as_csv_generator
|
||||
from django_journal.models import Journal
|
||||
from django_journal.models import Journal, Tag
|
||||
|
||||
|
||||
class JournalTestCase(TestCase):
|
||||
|
@ -63,3 +63,16 @@ def test_error_record(db):
|
|||
# specifying None as database use the defaut one
|
||||
error_record('error', 'error message', using=None)
|
||||
assert Journal.objects.count() == 2
|
||||
|
||||
|
||||
def test_error_record_with_db_obj(db):
|
||||
tag = Tag.objects.create(name='some-tag')
|
||||
journal = error_record('error', 'error message', someobj=tag)
|
||||
objdata = journal.objectdata_set.first()
|
||||
assert objdata.object_id == tag.pk
|
||||
|
||||
# If journal is not deleted test_export_as_csv crashes
|
||||
# probably some db rollback not done since error_record
|
||||
# uses a different db router
|
||||
# to be investigated
|
||||
journal.delete()
|
||||
|
|
Loading…
Reference in New Issue