Loading django/db/backends/base/base.py +5 −6 Original line number Diff line number Diff line Loading @@ -617,12 +617,11 @@ class BaseDatabaseWrapper(object): def run_and_clear_commit_hooks(self): self.validate_no_atomic_block() try: while self.run_on_commit: sids, func = self.run_on_commit.pop(0) func() finally: current_run_on_commit = self.run_on_commit self.run_on_commit = [] while current_run_on_commit: sids, func = current_run_on_commit.pop(0) func() def copy(self, alias=None, allow_thread_sharing=None): """ Loading docs/releases/1.9.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,6 @@ Bugfixes * Fixed a regression causing the cached template loader to crash when using lazy template names (:ticket:`26603`). * Fixed ``on_commit`` callbacks execution order when callbacks make transactions (:ticket:`26627`). tests/transaction_hooks/tests.py +14 −0 Original line number Diff line number Diff line Loading @@ -208,6 +208,20 @@ class TestConnectionOnCommit(TransactionTestCase): self.assertDone([1]) def test_hook_in_hook(self): def on_commit(i, add_hook): with transaction.atomic(): if add_hook: transaction.on_commit(lambda: on_commit(i + 10, False)) t = Thing.objects.create(num=i) self.notify(t.num) with transaction.atomic(): transaction.on_commit(lambda: on_commit(1, True)) transaction.on_commit(lambda: on_commit(2, True)) self.assertDone([1, 11, 2, 12]) def test_raises_exception_non_autocommit_mode(self): def should_never_be_called(): raise AssertionError('this function should never be called') Loading Loading
django/db/backends/base/base.py +5 −6 Original line number Diff line number Diff line Loading @@ -617,12 +617,11 @@ class BaseDatabaseWrapper(object): def run_and_clear_commit_hooks(self): self.validate_no_atomic_block() try: while self.run_on_commit: sids, func = self.run_on_commit.pop(0) func() finally: current_run_on_commit = self.run_on_commit self.run_on_commit = [] while current_run_on_commit: sids, func = current_run_on_commit.pop(0) func() def copy(self, alias=None, allow_thread_sharing=None): """ Loading
docs/releases/1.9.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,6 @@ Bugfixes * Fixed a regression causing the cached template loader to crash when using lazy template names (:ticket:`26603`). * Fixed ``on_commit`` callbacks execution order when callbacks make transactions (:ticket:`26627`).
tests/transaction_hooks/tests.py +14 −0 Original line number Diff line number Diff line Loading @@ -208,6 +208,20 @@ class TestConnectionOnCommit(TransactionTestCase): self.assertDone([1]) def test_hook_in_hook(self): def on_commit(i, add_hook): with transaction.atomic(): if add_hook: transaction.on_commit(lambda: on_commit(i + 10, False)) t = Thing.objects.create(num=i) self.notify(t.num) with transaction.atomic(): transaction.on_commit(lambda: on_commit(1, True)) transaction.on_commit(lambda: on_commit(2, True)) self.assertDone([1, 11, 2, 12]) def test_raises_exception_non_autocommit_mode(self): def should_never_be_called(): raise AssertionError('this function should never be called') Loading