Loading django/db/backends/__init__.py +12 −18 Original line number Diff line number Diff line Loading @@ -256,11 +256,12 @@ class BaseDatabaseWrapper(object): """ self.transaction_state.append(managed) if managed and self.autocommit: self.set_autocommit(False) if not managed and self.is_dirty() and not forced: self.commit() self.set_clean() if managed == self.autocommit: self.set_autocommit(not managed) def leave_transaction_management(self): """ Loading @@ -274,19 +275,20 @@ class BaseDatabaseWrapper(object): raise TransactionManagementError( "This code isn't under transaction management") # That's the next state -- we already left the previous state behind. managed = self.is_managed() if self.transaction_state: managed = self.transaction_state[-1] else: managed = settings.TRANSACTIONS_MANAGED if self._dirty: self.rollback() if not managed and not self.autocommit: self.set_autocommit(True) if managed == self.autocommit: self.set_autocommit(not managed) raise TransactionManagementError( "Transaction managed block ended with pending COMMIT/ROLLBACK") if not managed and not self.autocommit: self.set_autocommit(True) if managed == self.autocommit: self.set_autocommit(not managed) def set_autocommit(self, autocommit=True): """ Loading Loading @@ -331,14 +333,6 @@ class BaseDatabaseWrapper(object): self._dirty = False self.clean_savepoints() def is_managed(self): """ Checks whether the transaction manager is in manual or in auto state. """ if self.transaction_state: return self.transaction_state[-1] return settings.TRANSACTIONS_MANAGED ##### Foreign key constraints checks handling ##### @contextmanager Loading django/db/models/deletion.py +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ def DO_NOTHING(collector, field, sub_objs, using): def force_managed(func): @wraps(func) def decorated(self, *args, **kwargs): if not transaction.is_managed(using=self.using): if transaction.get_autocommit(using=self.using): transaction.enter_transaction_management(using=self.using, forced=True) forced_managed = True else: Loading django/db/models/query.py +2 −2 Original line number Diff line number Diff line Loading @@ -442,7 +442,7 @@ class QuerySet(object): self._for_write = True connection = connections[self.db] fields = self.model._meta.local_fields if not transaction.is_managed(using=self.db): if transaction.get_autocommit(using=self.db): transaction.enter_transaction_management(using=self.db, forced=True) forced_managed = True else: Loading Loading @@ -579,7 +579,7 @@ class QuerySet(object): self._for_write = True query = self.query.clone(sql.UpdateQuery) query.add_update_values(kwargs) if not transaction.is_managed(using=self.db): if transaction.get_autocommit(using=self.db): transaction.enter_transaction_management(using=self.db, forced=True) forced_managed = True else: Loading django/db/transaction.py +5 −7 Original line number Diff line number Diff line Loading @@ -113,10 +113,8 @@ def clean_savepoints(using=None): get_connection(using).clean_savepoints() def is_managed(using=None): """ Checks whether the transaction manager is in manual or in auto state. """ return get_connection(using).is_managed() warnings.warn("'is_managed' is deprecated.", PendingDeprecationWarning, stacklevel=2) def managed(flag=True, using=None): warnings.warn("'managed' no longer serves a purpose.", Loading Loading @@ -281,7 +279,9 @@ def commit_on_success_unless_managed(using=None): """ Transitory API to preserve backwards-compatibility while refactoring. """ if is_managed(using): if get_autocommit(using): return commit_on_success(using) else: def entering(using): pass Loading @@ -289,5 +289,3 @@ def commit_on_success_unless_managed(using=None): set_dirty(using=using) return _transaction_func(entering, exiting, using) else: return commit_on_success(using) django/middleware/transaction.py +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ class TransactionMiddleware(object): def process_response(self, request, response): """Commits and leaves transaction management.""" if transaction.is_managed(): if not transaction.get_autocommit(): if transaction.is_dirty(): # Note: it is possible that the commit fails. If the reason is # closed connection or some similar reason, then there is Loading Loading
django/db/backends/__init__.py +12 −18 Original line number Diff line number Diff line Loading @@ -256,11 +256,12 @@ class BaseDatabaseWrapper(object): """ self.transaction_state.append(managed) if managed and self.autocommit: self.set_autocommit(False) if not managed and self.is_dirty() and not forced: self.commit() self.set_clean() if managed == self.autocommit: self.set_autocommit(not managed) def leave_transaction_management(self): """ Loading @@ -274,19 +275,20 @@ class BaseDatabaseWrapper(object): raise TransactionManagementError( "This code isn't under transaction management") # That's the next state -- we already left the previous state behind. managed = self.is_managed() if self.transaction_state: managed = self.transaction_state[-1] else: managed = settings.TRANSACTIONS_MANAGED if self._dirty: self.rollback() if not managed and not self.autocommit: self.set_autocommit(True) if managed == self.autocommit: self.set_autocommit(not managed) raise TransactionManagementError( "Transaction managed block ended with pending COMMIT/ROLLBACK") if not managed and not self.autocommit: self.set_autocommit(True) if managed == self.autocommit: self.set_autocommit(not managed) def set_autocommit(self, autocommit=True): """ Loading Loading @@ -331,14 +333,6 @@ class BaseDatabaseWrapper(object): self._dirty = False self.clean_savepoints() def is_managed(self): """ Checks whether the transaction manager is in manual or in auto state. """ if self.transaction_state: return self.transaction_state[-1] return settings.TRANSACTIONS_MANAGED ##### Foreign key constraints checks handling ##### @contextmanager Loading
django/db/models/deletion.py +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ def DO_NOTHING(collector, field, sub_objs, using): def force_managed(func): @wraps(func) def decorated(self, *args, **kwargs): if not transaction.is_managed(using=self.using): if transaction.get_autocommit(using=self.using): transaction.enter_transaction_management(using=self.using, forced=True) forced_managed = True else: Loading
django/db/models/query.py +2 −2 Original line number Diff line number Diff line Loading @@ -442,7 +442,7 @@ class QuerySet(object): self._for_write = True connection = connections[self.db] fields = self.model._meta.local_fields if not transaction.is_managed(using=self.db): if transaction.get_autocommit(using=self.db): transaction.enter_transaction_management(using=self.db, forced=True) forced_managed = True else: Loading Loading @@ -579,7 +579,7 @@ class QuerySet(object): self._for_write = True query = self.query.clone(sql.UpdateQuery) query.add_update_values(kwargs) if not transaction.is_managed(using=self.db): if transaction.get_autocommit(using=self.db): transaction.enter_transaction_management(using=self.db, forced=True) forced_managed = True else: Loading
django/db/transaction.py +5 −7 Original line number Diff line number Diff line Loading @@ -113,10 +113,8 @@ def clean_savepoints(using=None): get_connection(using).clean_savepoints() def is_managed(using=None): """ Checks whether the transaction manager is in manual or in auto state. """ return get_connection(using).is_managed() warnings.warn("'is_managed' is deprecated.", PendingDeprecationWarning, stacklevel=2) def managed(flag=True, using=None): warnings.warn("'managed' no longer serves a purpose.", Loading Loading @@ -281,7 +279,9 @@ def commit_on_success_unless_managed(using=None): """ Transitory API to preserve backwards-compatibility while refactoring. """ if is_managed(using): if get_autocommit(using): return commit_on_success(using) else: def entering(using): pass Loading @@ -289,5 +289,3 @@ def commit_on_success_unless_managed(using=None): set_dirty(using=using) return _transaction_func(entering, exiting, using) else: return commit_on_success(using)
django/middleware/transaction.py +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ class TransactionMiddleware(object): def process_response(self, request, response): """Commits and leaves transaction management.""" if transaction.is_managed(): if not transaction.get_autocommit(): if transaction.is_dirty(): # Note: it is possible that the commit fails. If the reason is # closed connection or some similar reason, then there is Loading