summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/session.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py
index a33b42612..6dc6d3755 100644
--- a/lib/sqlalchemy/orm/session.py
+++ b/lib/sqlalchemy/orm/session.py
@@ -237,14 +237,21 @@ class SessionTransaction(object):
self.session, self, nested=nested)
def _iterate_parents(self, upto=None):
- if self._parent is upto:
- return (self,)
- else:
- if self._parent is None:
+
+ current = self
+ result = ()
+ while current:
+ result += (current, )
+ if current._parent is upto:
+ break
+ elif current._parent is None:
raise sa_exc.InvalidRequestError(
"Transaction %s is not on the active transaction list" % (
upto))
- return (self,) + self._parent._iterate_parents(upto)
+ else:
+ current = current._parent
+
+ return result
def _take_snapshot(self):
if not self._is_transaction_boundary: