Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
 def _flush(self, objects=None):
     try:
         print('>>>F ' + self.dbg_label)
         return Session._flush(self, objects)
     finally:
         print('<<<F')