summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-02-20 00:11:48 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-02-20 00:11:48 -0500
commit4f63e2497020681a4f2aa5d4a28495ded008d2b2 (patch)
treed1609f6954a7b841c30ac7f945f91fac253d3b8b
parentad66266d3d275a6129e3270eaacdad171bc10817 (diff)
downloadsqlalchemy-4f63e2497020681a4f2aa5d4a28495ded008d2b2.tar.gz
- remove the need for a recursive call here
-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: