|
6 | 6 | from django.db import connections
|
7 | 7 | from django.db.backends.utils import CursorWrapper
|
8 | 8 | from django.db.models import Model
|
| 9 | +from django.db.transaction import Atomic |
9 | 10 | from django.db.transaction import atomic
|
10 | 11 | from django.db.transaction import TransactionManagementError
|
11 | 12 | from django.db.utils import DEFAULT_DB_ALIAS
|
@@ -77,7 +78,8 @@ def is_held(self) -> bool:
|
77 | 78 | def holding_connection_id(self) -> int | None:
|
78 | 79 | with self.get_cursor() as cursor:
|
79 | 80 | cursor.execute("SELECT IS_USED_LOCK(%s)", (self.name,))
|
80 |
| - return cursor.fetchone()[0] |
| 81 | + result: int | None = cursor.fetchone()[0] |
| 82 | + return result |
81 | 83 |
|
82 | 84 | @classmethod
|
83 | 85 | def held_with_prefix(
|
@@ -108,6 +110,7 @@ def __init__(
|
108 | 110 | self.read: list[str] = self._process_names(read)
|
109 | 111 | self.write: list[str] = self._process_names(write)
|
110 | 112 | self.db = DEFAULT_DB_ALIAS if using is None else using
|
| 113 | + self._atomic: Atomic | None = None |
111 | 114 |
|
112 | 115 | def _process_names(self, names: list[str | type[Model]] | None) -> list[str]:
|
113 | 116 | """
|
@@ -170,6 +173,7 @@ def release(
|
170 | 173 | ) -> None:
|
171 | 174 | connection = connections[self.db]
|
172 | 175 | with connection.cursor() as cursor:
|
| 176 | + assert self._atomic is not None |
173 | 177 | self._atomic.__exit__(exc_type, exc_value, exc_traceback)
|
174 | 178 | self._atomic = None
|
175 | 179 | cursor.execute("UNLOCK TABLES")
|
0 commit comments