From cd95d4a5b928a6bc4f07c988ba3791a0a63c8d15 Mon Sep 17 00:00:00 2001 From: plumSemPy Date: Wed, 4 Jan 2017 12:06:48 -0500 Subject: Ensure session.no_autoflush uses finally The :attr:`.Session.no_autoflush` context manager now ensures that the autoflush flag is reset within a "finally" block, so that if an exception is raised within the block, the state still resets appropriately. Pull request courtesy Emin Arakelian. Change-Id: Ib19ddf32074b1df82a6a1f1ae14e3a962cd31a5f Pull-request: https://github.com/zzzeek/sqlalchemy/pull/335 --- lib/sqlalchemy/orm/session.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index b39ba1465..cb1ebf013 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -1354,8 +1354,10 @@ class Session(_SessionClassMethods): """ autoflush = self.autoflush self.autoflush = False - yield self - self.autoflush = autoflush + try: + yield self + finally: + self.autoflush = autoflush def _autoflush(self): if self.autoflush and not self._flushing: -- cgit v1.2.1