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