Fixed #20028 -- Made atomic usable on callable instances.

Thanks Anssi for the report.
This commit is contained in:
Aymeric Augustin 2013-03-12 10:52:16 +01:00
parent 4846e2b744
commit 885d98d24a
2 changed files with 13 additions and 1 deletions

View File

@ -17,6 +17,7 @@ import warnings
from functools import wraps from functools import wraps
from django.db import connections, DatabaseError, DEFAULT_DB_ALIAS from django.db import connections, DatabaseError, DEFAULT_DB_ALIAS
from django.utils.decorators import available_attrs
class TransactionManagementError(Exception): class TransactionManagementError(Exception):
@ -313,7 +314,7 @@ class Atomic(object):
def __call__(self, func): def __call__(self, func):
@wraps(func) @wraps(func, assigned=available_attrs(func))
def inner(*args, **kwargs): def inner(*args, **kwargs):
with self: with self:
return func(*args, **kwargs) return func(*args, **kwargs)

View File

@ -300,6 +300,17 @@ class AtomicErrorsTests(TransactionTestCase):
transaction.leave_transaction_management() transaction.leave_transaction_management()
class AtomicMiscTests(TransactionTestCase):
def test_wrap_callable_instance(self):
# Regression test for #20028
class Callable(object):
def __call__(self):
pass
# Must not raise an exception
transaction.atomic(Callable())
class IgnorePendingDeprecationWarningsMixin(object): class IgnorePendingDeprecationWarningsMixin(object):
def setUp(self): def setUp(self):