def db_session_scope( self, engine: sqlalchemy.engine.Engine, session_mode: t.Union[DBSessionScopeMode, str] = "rw" ) -> t.ContextManager[Session]: """Provide a transactional scope around a series of operations.""" is_ro = DBSessionScopeMode( session_mode) == DBSessionScopeMode.READ_ONLY session = Session(bind=engine, autoflush=False, autocommit=False) def nonce(*args, **kwargs): return None if is_ro: session.flush = nonce session._flush = nonce try: yield session if not is_ro: session.commit() except: session.rollback() raise finally: session.close()
def _flush(self, objects=None): try: print('>>>F ' + self.dbg_label) return Session._flush(self, objects) finally: print('<<<F')