def test_comfirm_close_when_exception(mocker): with mocker.patch.object( Session, 'commit', mocker.MagicMock( side_effect=[gevent.Timeout(), ])): session = DBSession() session.execute("select 1") session.flush() with pytest.raises(gevent.Timeout): session.commit() for engine in session.engines.itervalues(): for parent in session.transaction._iterate_parents(): conn = parent._connections.get(engine) if conn: assert conn[0].invalidated session.close()
def test_upsert(team_point, mocker): session = DBSession() assert session.query(team_point.__class__.id).all() == [ (team_point.id,), ] session.execute(core_db.Upsert(team_point.__table__).values( id=team_point.id, team_name='666')) assert session.query(team_point.__class__.id).all() == [ (team_point.id,), ] session.execute(core_db.Upsert(team_point.__table__).values( id=team_point.id + 1, team_name='888')) assert session.query(team_point.__class__.id).all() == [ (team_point.id,), (team_point.id + 1,), ] columns = Team.__table__.primary_key.columns class Mocked(object): def __len__(self): return 0 def __getattr__(self, item): return getattr(columns, item) with mocker.patch.object( Team.__table__.primary_key, 'columns', mocker.MagicMock(return_value=Mocked)): session.execute(core_db.Upsert(team_point.__table__).values( id=team_point.id + 2, team_name='999'))