import os import db_schema.base import pytest import sqlalchemy from db_schema.schemas import apps, slz @pytest.fixture(scope='session') def engine(): # pylint: disable=redefined-outer-name pg_uri = 'postgresql://{user}:{password}@{host}:{port}/{db}'.format( user=os.environ['PG_USER'], password=os.environ['PG_PASSWORD'], host=os.environ['PG_HOST'], port=os.environ['PG_PORT'], db=os.environ['PG_DB'], ) engine = sqlalchemy.create_engine(pg_uri) yield engine engine.dispose() @pytest.fixture(scope='function') def session(engine): # pylint: disable=redefined-outer-name with engine.connect() as connection: db_schema.base.ScopedSession.configure(bind=connection) with connection.begin() as transaction: session = db_schema.base.ScopedSession() while True: result = session.execute( # pylint: disable=no-member 'SELECT id FROM databasechangelog ORDER BY dateexecuted DESC LIMIT 1' ) if result.first(): break cleanup_db(session) yield session db_schema.base.ScopedSession.remove() transaction.rollback() session.close() def cleanup_db(session): # pylint: disable=redefined-outer-name for model in [ apps.DatabricksExecution, apps.FailureLog, apps.ContentStatus, apps.UnitOfWork, apps.Report, slz.Report, slz.Licensor, slz.DataSource, ]: session.query(model).delete() session.commit()