def testdb(): """ DB fixture to be used in tests """ # setup the connection conn = engine.connect() sess = sessionmaker(autocommit=False, bind=conn)() init_event_listeners(sess) # yield the session yield (sess) sess.close() conn.close()
def init_db(): """ Initialize the database; call :py:meth:`sqlalchemy.schema.MetaData.create_all` on the metadata object. """ logger.debug('Initializing database') # import all modules here that might define models so that # they will be registered properly on the metadata. Otherwise # you will have to import them first before calling init_db() alembic_ini = pkg_resources.resource_filename( pkg_resources.Requirement.parse('biweeklybudget'), 'biweeklybudget/alembic/alembic.ini' ) topdir = os.path.abspath( os.path.join(os.path.dirname(alembic_ini), '..', '..') ) logger.debug('Alembic configuration: %s', alembic_ini) with in_directory(topdir): alembic_config = Config(alembic_ini) script = ScriptDirectory.from_config(alembic_config) curr_rev = _alembic_get_current_rev(alembic_config, script) head_rev = script.get_revision("head").revision if curr_rev is None: # alembic not initialized at all; stamp with current version logger.warning( 'Alembic not setup; creating all models and stamping' ) logger.debug('Creating all models') Base.metadata.create_all(engine) command.stamp(alembic_config, "head") logger.debug("DB stamped at %s", head_rev) elif curr_rev != head_rev: logger.warning("Alembic head is %s but this DB is at %s; " "running migrations", head_rev, curr_rev) command.upgrade(alembic_config, "head") logger.info("Migrations complete") else: logger.debug('Alembic is at the correct head version (%s)', curr_rev) logger.debug('Done initializing DB') init_event_listeners(db_session, engine)