コード例 #1
0
    def test_db_query_in_hook(self):
        with transaction.atomic():
            Thing.objects.create(num=1)
            transaction.on_commit(
                lambda: [self.notify(t.num) for t in Thing.objects.all()])

        self.assertDone([1])
コード例 #2
0
    def test_transaction_in_hook(self):
        def on_commit():
            with transaction.atomic():
                t = Thing.objects.create(num=1)
                self.notify(t.num)

        with transaction.atomic():
            transaction.on_commit(on_commit)

        self.assertDone([1])
コード例 #3
0
    def test_error_in_hook_doesnt_prevent_clearing_hooks(self):
        try:
            with transaction.atomic():
                transaction.on_commit(lambda: self.notify('error'))
        except ForcedError:
            pass

        with transaction.atomic():
            self.do(1)

        self.assertDone([1])
コード例 #4
0
    def test_raises_exception_non_autocommit_mode(self):
        def should_never_be_called():
            raise AssertionError('this function should never be called')

        try:
            connection.set_autocommit(False)
            msg = 'on_commit() cannot be used in manual transaction management'
            with self.assertRaisesMessage(
                    transaction.TransactionManagementError, msg):
                transaction.on_commit(should_never_be_called)
        finally:
            connection.set_autocommit(True)
コード例 #5
0
    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])
コード例 #6
0
 def do(self, num):
     """Create a Thing instance and notify about it."""
     Thing.objects.create(num=num)
     transaction.on_commit(lambda: self.notify(num))
コード例 #7
0
 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)