Пример #1
0
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()
Пример #2
0
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'))