From a3d9c95ff470e439c2b94767d8981a428bc7a639 Mon Sep 17 00:00:00 2001 From: Brian Sutherland Date: Fri, 30 Aug 2013 03:43:30 +0200 Subject: [PATCH] Move join to before _SESSION_STATE is set If the join() errors, _SESSION_STATE does not get wedged. fixes https://github.com/zopefoundation/zope.sqlalchemy/issues/2 --- src/zope/sqlalchemy/datamanager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zope/sqlalchemy/datamanager.py b/src/zope/sqlalchemy/datamanager.py index 0644923..6108233 100644 --- a/src/zope/sqlalchemy/datamanager.py +++ b/src/zope/sqlalchemy/datamanager.py @@ -64,6 +64,7 @@ def __init__(self, session, status, transaction_manager, keep_session=False): self.transaction_manager = transaction_manager self.tx = session.transaction._iterate_parents()[-1] self.session = session + transaction_manager.get().join(self) _SESSION_STATE[id(session)] = status self.state = 'init' self.keep_session = keep_session @@ -198,8 +199,7 @@ def join_transaction(session, initial_state=STATUS_ACTIVE, transaction_manager=z DataManager = TwoPhaseSessionDataManager else: DataManager = SessionDataManager - transaction_manager.get().join(DataManager(session, initial_state, transaction_manager, keep_session=keep_session)) - + DataManager(session, initial_state, transaction_manager, keep_session=keep_session) def mark_changed(session, transaction_manager=zope_transaction.manager): """Mark a session as needing to be committed.