Example #1
0
def engine_fixture(request):
    backend_db = 'sqlite' if 'sqlite://' in get_config_settings('sqlalchemy.url') else 'postgres'
    logger.debug('backend_db: %s' % backend_db)
    if backend_db == 'sqlite':
        db_path = tempfile.NamedTemporaryFile(suffix='.sqlite', delete=False).name #use tempfile directly
        DB_URL = 'sqlite:///' + db_path
        engine = create_engine(DB_URL, poolclass=NullPool)
        connection = engine.connect()
        DBSession.configure(bind=engine)
        Base.metadata.bind = engine
        logger.debug('(sqlite_engine_fixture) created, sqlite file: %s' % db_path)
    else:
        DB_URL = get_config_settings('sqlalchemy.url')
        engine = create_engine(DB_URL)
        connection = engine.connect()
        DBSession.configure(bind=engine)
        Base.metadata.bind = engine
        logger.debug('(postgres_engine_fixture) created, postgres url: %s' % DB_URL)
    def fin():
        DBSession.close()
        DBSession.remove()
        connection.close()
        if backend_db == 'sqlite':
            os.unlink(db_path)
            logger.debug('(sqlite_engine_fixture) delete, remove sqlitedb file: %s' % db_path)
        else:
            logger.debug('(postgres_engine_fixture) fin with postgresdb url: %s' % DB_URL)
    request.addfinalizer(fin)
    #return engine
    return backend_db
Example #2
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    global DBSession, Base
    engine = engine_from_config(settings, 'sqlalchemy.')

    backend_db = 'sqlite' if 'sqlite://' in settings['sqlalchemy.url'] else 'postgres'
    scarab_settings = {}
    scarab_settings['backend_db'] = backend_db
    logger.debug('scarab_settings: %s' % scarab_settings)
    def get_scarab_settings(request):
        return scarab_settings

    #enable sqlite foreignkey if sqlite
    if 'sqlite' == backend_db:
        event.listen(engine, 'connect', _fk_pragma_on_connect) #db foreignkey on
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine


    config = Configurator(root_factory='scarab.models.RootFactory', settings=settings)
    #api routes
    config.include(api_routes)

    #embeded userojb to request
    config.add_request_method(get_user, 'user', reify=True)
    config.add_request_method(get_scarab_settings, 'scarab_settings', reify=True)

    #security; add policies here
    policies =[AuthTktAuthenticationPolicy(settings['scarab.auth_secret'],
                                           callback=groupfinder,
                                           hashalg='sha512')]
    authn_policy = MultiAuthenticationPolicy(policies)
    authz_policy = ACLAuthorizationPolicy()
    config.set_authentication_policy(authn_policy)
    config.set_authorization_policy(authz_policy)

    #all setting is done, scan config
    config.scan()
    return config.make_wsgi_app()