예제 #1
0
def create_engine_from_conf(config_file):
    seaf_conf = ConfigParser.ConfigParser()
    seaf_conf.read(config_file)
    backend = seaf_conf.get('database', 'type')
    if backend == 'mysql':
        db_server = 'localhost'
        db_port = 3306

        if seaf_conf.has_option('database', 'host'):
            db_server = seaf_conf.get('database', 'host')
        if seaf_conf.has_option('database', 'port'):
            db_port = seaf_conf.getint('database', 'port')
        db_username = seaf_conf.get('database', 'user')
        db_passwd = seaf_conf.get('database', 'password')
        db_name = seaf_conf.get('database', 'db_name')
        db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % \
                 (db_username, quote_plus(db_passwd),
                 db_server, db_port, db_name)
    else:
        raise RuntimeError("Unknown Database backend: %s" % backend)

    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)
    if not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine
예제 #2
0
파일: seahub_db.py 프로젝트: haiwen/seafdav
def create_seahub_db_engine():
    import seahub_settings
    db_infos = seahub_settings.DATABASES['default']
    #import local_settings
    #db_infos = local_settings.DATABASES['default']

    if db_infos.get('ENGINE') != 'django.db.backends.mysql':
        _logger.warning('Failed to init seahub db, only mysql db supported.')
        return
    
    db_host = db_infos.get('HOST', '127.0.0.1')
    db_port = int(db_infos.get('PORT', '3306'))
    db_name = db_infos.get('NAME')
    if not db_name:
        _logger.warning ('Failed to init seahub db, db name is not set.')
        return
    db_user = db_infos.get('USER')
    if not db_user:
        _logger.warning ('Failed to init seahub db, db user is not set.')
        return
    db_passwd = db_infos.get('PASSWORD')

    db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (db_user, quote_plus(db_passwd), db_host, db_port, db_name)

    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)
    if not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine
예제 #3
0
def create_mysql_session(host, port, username, passwd, dbname):
    db_url = "mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8" % (
        username, quote_plus(passwd), host, port, dbname)
    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)

    if not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    Session = sessionmaker(bind=engine)
    return Session
예제 #4
0
def get_db_session(section):
    config = ConfigParser.ConfigParser()
    config.read('./db.cnf')
    if not config.has_section(section):
        sys.stdout.write("no section: %s" % section)
        return

    host, port, username, passwd, dbname = read_db_conf(section)
    db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (username, quote_plus(passwd), host, port, dbname)
    global SEAHUB_DBNAME, SEAFEVENTS_DBNAME, TEST_DBNAME
    if section == 'TESTDB':
        TEST_DBNAME = dbname
    elif section == 'SEAFEVENTSDB':
        SEAFEVENTS_DBNAME = dbname
    elif section == 'SEAHUBDB':
        SEAHUB_DBNAME = dbname

    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)
    engine = create_engine(db_url, **kwargs)
    if not has_event_listener(Pool, 'checkout', ping_connection):
        add_event_listener(Pool, 'checkout', ping_connection)

    Session = sessionmaker(bind=engine)
    return Session()
예제 #5
0
def create_db_session(host, port, username, passwd, dbname):
    db_url = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(
        username, quote_plus(passwd), host, port, dbname)
    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)

    # create tables, if not exist
    if dbname == DATABASES['keeper']['NAME']:
        KeeperBase.metadata.create_all(engine,
                                       tables=[
                                           KeeperArchive.__table__,
                                           KeeperArchiveOwnerQuota.__table__
                                       ])

    if not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return scoped_session(
        sessionmaker(bind=engine, autocommit=False, expire_on_commit=False))
예제 #6
0
def create_seahub_db_engine():
    import seahub_settings
    db_infos = seahub_settings.DATABASES['default']
    #import local_settings
    #db_infos = local_settings.DATABASES['default']

    if db_infos.get('ENGINE') != 'django.db.backends.mysql':
        logging.warning('Failed to init seahub db, only mysql db supported.')
        return

    db_host = db_infos.get('HOST', '127.0.0.1')
    db_port = int(db_infos.get('PORT', '3306'))
    db_name = db_infos.get('NAME')
    if not db_name:
        logging.warning('Failed to init seahub db, db name is not set.')
        return
    db_user = db_infos.get('USER')
    if not db_user:
        logging.warning('Failed to init seahub db, db user is not set.')
        return
    db_passwd = db_infos.get('PASSWORD')

    db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (
        db_user, quote_plus(db_passwd), db_host, db_port, db_name)

    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)
    if not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine
예제 #7
0
def create_engine_from_conf(config_file, db='seafevent'):
    config = configparser.ConfigParser()
    config.read(config_file)

    need_connection_pool_fix = True

    db_sec = 'DATABASE'
    user = '******'
    db_name = 'name'

    if db == 'seafile':
        db_sec = 'database'
        user = '******'
        db_name = 'db_name'

    backend = config.get(db_sec, 'type')
    if backend == 'sqlite' or backend == 'sqlite3':
        path = config.get(db_sec, 'path')
        if not os.path.isabs(path):
            path = os.path.join(os.path.dirname(config_file), path)
        db_url = "sqlite:///%s" % path
        logger.info('[seafevents] database: sqlite3, path: %s', path)
        need_connection_pool_fix = False
    elif backend == 'mysql':
        if config.has_option(db_sec, 'host'):
            host = config.get(db_sec, 'host').lower()
        else:
            host = 'localhost'

        if config.has_option(db_sec, 'port'):
            port = config.getint(db_sec, 'port')
        else:
            port = 3306
        username = config.get(db_sec, user)
        passwd = config.get(db_sec, 'password')
        dbname = config.get(db_sec, db_name)
        db_url = "mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8" % (
            username, quote_plus(passwd), host, port, dbname)
        logger.info('[seafevents] database: mysql, name: %s', dbname)
    elif backend == 'oracle':
        if config.has_option(db_sec, 'host'):
            host = config.get(db_sec, 'host').lower()
        else:
            host = 'localhost'

        if config.has_option(db_sec, 'port'):
            port = config.getint(db_sec, 'port')
        else:
            port = 1521
        username = config.get(db_sec, user)
        passwd = config.get(db_sec, 'password')
        service_name = config.get(db_sec, 'service_name')
        db_url = "oracle://%s:%s@%s:%s/%s" % (username, quote_plus(passwd),
                                              host, port, service_name)

        logger.info('[seafevents] database: oracle, service_name: %s',
                    service_name)
    else:
        logger.error("Unknown database backend: %s" % backend)
        raise RuntimeError("Unknown database backend: %s" % backend)

    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)

    if need_connection_pool_fix and not has_event_listener(
            Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine
예제 #8
0
파일: db.py 프로젝트: liyan-web/filesharing
def create_engine_from_conf(config):
    need_connection_pool_fix = True

    if not config.has_section('database'):
        seafile_data_dir = os.environ['SEAFILE_CONF_DIR']
        if seafile_data_dir:
            path = os.path.join(seafile_data_dir, 'seafile.db')
        else:
            logging.warning(
                'SEAFILE_CONF_DIR not set, can not load sqlite database.')
            return None
        db_url = "sqlite:///%s" % path
        logging.info('[seafobj] database: sqlite3, path: %s', path)
        need_connection_pool_fix = False
    else:
        backend = config.get('database', 'type')

        if backend == 'mysql':
            if config.has_option('database', 'host'):
                host = config.get('database', 'host').lower()
            else:
                host = 'localhost'

            if config.has_option('database', 'port'):
                port = config.getint('database', 'port')
            else:
                port = 3306
            username = config.get('database', 'user')
            passwd = config.get('database', 'password')
            dbname = config.get('database', 'db_name')
            db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (
                username, quote_plus(passwd), host, port, dbname)
            logging.warning('[seafobj] database: mysql, name: %s', dbname)
        elif backend == 'oracle':
            if config.has_option('database', 'host'):
                host = config.get('database', 'host').lower()
            else:
                host = 'localhost'

            if config.has_option('database', 'port'):
                port = config.getint('database', 'port')
            else:
                port = 1521
            username = config.get('database', 'username')
            passwd = config.get('database', 'password')
            service_name = config.get('database', 'service_name')
            db_url = "oracle://%s:%s@%s:%s/%s" % (username, quote_plus(passwd),
                                                  host, port, service_name)

            logging.info('[seafobj] database: oracle, service_name: %s',
                         service_name)
        else:
            raise RuntimeError("Unknown database backend: %s" % backend)

    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)

    if need_connection_pool_fix and not has_event_listener(
            Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine
예제 #9
0
파일: db.py 프로젝트: haiwen/seafobj
def create_engine_from_conf(config):
    need_connection_pool_fix = True

    if not config.has_section('database'):
        seafile_data_dir = os.environ['SEAFILE_CONF_DIR']
        if seafile_data_dir:
            path = os.path.join(seafile_data_dir, 'seafile.db')
        else:
            logging.warning('SEAFILE_CONF_DIR not set, can not load sqlite database.')
            return None
        db_url = "sqlite:///%s" % path
        logging.info('[seafobj] database: sqlite3, path: %s', path)
        need_connection_pool_fix = False
    else:
        backend = config.get('database', 'type')

        if backend == 'mysql':
            if config.has_option('database', 'host'):
                host = config.get('database', 'host').lower()
            else:
                host = 'localhost'

            if config.has_option('database', 'port'):
                port = config.getint('database', 'port')
            else:
                port = 3306
            username = config.get('database', 'user')
            passwd = config.get('database', 'password')
            dbname = config.get('database', 'db_name')
            db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (username, quote_plus(passwd), host, port, dbname)
            logging.warning('[seafobj] database: mysql, name: %s', dbname)
        elif backend == 'oracle':
            if config.has_option('database', 'host'):
                host = config.get('database', 'host').lower()
            else:
                host = 'localhost'

            if config.has_option('database', 'port'):
                port = config.getint('database', 'port')
            else:
                port = 1521
            username = config.get('database', 'username')
            passwd = config.get('database', 'password')
            service_name = config.get('database', 'service_name')
            db_url = "oracle://%s:%s@%s:%s/%s" % (username, quote_plus(passwd),
                    host, port, service_name)

            logging.info('[seafobj] database: oracle, service_name: %s', service_name)
        else:
            raise RuntimeError("Unknown database backend: %s" % backend)

    # Add pool recycle, or mysql connection will be closed by mysqld if idle
    # for too long.
    kwargs = dict(pool_recycle=300, echo=False, echo_pool=False)

    engine = create_engine(db_url, **kwargs)

    if need_connection_pool_fix and not has_event_listener(Pool, 'checkout', ping_connection):
        # We use has_event_listener to double check in case we call create_engine
        # multipe times in the same process.
        add_event_listener(Pool, 'checkout', ping_connection)

    return engine