def get_config(argv, use_argparse=True, cwd=None): """ Read sys.argv and parse out repository of migrations and database url. >>> import os >>> from six.moves.configparser import SafeConfigParser >>> from shutil import rmtree >>> from tempfile import mkdtemp >>> config_dir = mkdtemp() >>> os.makedirs(os.path.join(config_dir, 'config')) >>> def write_ini(path, property, value): ... p = SafeConfigParser() ... p.add_section('app:main') ... p.set('app:main', property, value) ... with open(os.path.join(config_dir, 'config', path), 'w') as f: p.write(f) >>> write_ini('tool_shed.ini', 'database_connection', 'sqlite:///pg/testdb1') >>> config = get_config(['manage_db.py', 'tool_shed'], cwd=config_dir) >>> config['repo'] 'lib/galaxy/webapps/tool_shed/model/migrate' >>> config['db_url'] 'sqlite:///pg/testdb1' >>> write_ini('galaxy.ini', 'database_file', 'moo.sqlite') >>> config = get_config(['manage_db.py'], cwd=config_dir) >>> uri_with_env = os.getenv("GALAXY_TEST_DBURI", "sqlite:///moo.sqlite?isolation_level=IMMEDIATE") >>> config['db_url'] == uri_with_env True >>> config['repo'] 'lib/galaxy/model/migrate' >>> rmtree(config_dir) """ config_file, config_section, database = _read_model_arguments(argv, use_argparse=use_argparse) database_defaults = DATABASE[database] if config_file is None: config_names = database_defaults.get('config_names', DEFAULT_CONFIG_NAMES) if cwd: cwd = [cwd, os.path.join(cwd, 'config')] config_file = find_config_file(config_names, dirs=cwd) repo = database_defaults['repo'] config_prefix = database_defaults.get('config_prefix', DEFAULT_CONFIG_PREFIX) config_override = database_defaults.get('config_override', 'GALAXY_CONFIG_') default_sqlite_file = database_defaults['default_sqlite_file'] if config_section is None: if not config_file or get_ext(config_file, ignore='sample') == 'yaml': config_section = database_defaults.get('config_section', None) else: # Just use the default found by load_app_properties. config_section = None properties = load_app_properties(config_file=config_file, config_prefix=config_override, config_section=config_section) if ("%sdatabase_connection" % config_prefix) in properties: db_url = properties["%sdatabase_connection" % config_prefix] elif ("%sdatabase_file" % config_prefix) in properties: database_file = properties["%sdatabase_file" % config_prefix] db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % database_file else: db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % default_sqlite_file return dict(db_url=db_url, repo=repo, config_file=config_file, database=database)
def get_config(argv, use_argparse=True, cwd=None): """ Read sys.argv and parse out repository of migrations and database url. >>> import os >>> from six.moves.configparser import SafeConfigParser >>> from shutil import rmtree >>> from tempfile import mkdtemp >>> config_dir = mkdtemp() >>> os.makedirs(os.path.join(config_dir, 'config')) >>> def write_ini(path, property, value): ... p = SafeConfigParser() ... p.add_section('app:main') ... p.set('app:main', property, value) ... with open(os.path.join(config_dir, 'config', path), 'w') as f: p.write(f) >>> write_ini('tool_shed.ini', 'database_connection', 'sqlite:///pg/testdb1') >>> config = get_config(['manage_db.py', 'tool_shed'], cwd=config_dir) >>> config['repo'] 'lib/galaxy/webapps/tool_shed/model/migrate' >>> config['db_url'] 'sqlite:///pg/testdb1' >>> write_ini('galaxy.ini', 'database_file', 'moo.sqlite') >>> config = get_config(['manage_db.py'], cwd=config_dir) >>> config['db_url'] 'sqlite:///moo.sqlite?isolation_level=IMMEDIATE' >>> config['repo'] 'lib/galaxy/model/migrate' >>> rmtree(config_dir) """ config_file, config_section, database = _read_model_arguments(argv, use_argparse=use_argparse) database_defaults = DATABASE[database] if config_file is None: config_names = database_defaults.get('config_names', DEFAULT_CONFIG_NAMES) if cwd: cwd = [cwd, os.path.join(cwd, 'config')] config_file = find_config_file(config_names, dirs=cwd) repo = database_defaults['repo'] config_prefix = database_defaults.get('config_prefix', DEFAULT_CONFIG_PREFIX) config_override = database_defaults.get('config_override', 'GALAXY_CONFIG_') default_sqlite_file = database_defaults['default_sqlite_file'] if config_section is None: if not config_file or get_ext(config_file, ignore='sample') == 'yaml': config_section = database_defaults.get('config_section', None) else: # Just use the default found by load_app_properties. config_section = None properties = load_app_properties(config_file=config_file, config_prefix=config_override, config_section=config_section) if ("%sdatabase_connection" % config_prefix) in properties: db_url = properties["%sdatabase_connection" % config_prefix] elif ("%sdatabase_file" % config_prefix) in properties: database_file = properties["%sdatabase_file" % config_prefix] db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % database_file else: db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % default_sqlite_file return dict(db_url=db_url, repo=repo, config_file=config_file, database=database)
def __add_config_file_arg(args, config_file, app): ext = None if config_file: ext = get_ext(config_file) if ext in ('yaml', 'json'): __add_arg(args, ext, config_file) elif ext == 'ini': config = nice_config_parser(config_file) has_logging = config.has_section('loggers') if config.has_section('app:main'): # uWSGI does not have any way to set the app name when loading with paste.deploy:loadapp(), so hardcoding # the name to `main` is fine __add_arg(args, 'ini-paste' if not has_logging else 'ini-paste-logged', config_file) return # do not add --module else: __add_arg(args, ext, config_file) if has_logging: __add_arg(args, 'paste-logger', True)
def __add_config_file_arg(args, config_file, app): ext = None if config_file: ext = get_ext(config_file) if ext in ('yaml', 'json'): __add_arg(args, ext, config_file) elif ext == 'ini': config = nice_config_parser(config_file) has_logging = config.has_section('loggers') if config.has_section('app:main'): # uWSGI does not have any way to set the app name when loading with paste.deploy:loadapp(), so hardcoding # the name to `main` is fine __add_arg(args, 'ini-paste' if not has_logging else 'ini-paste-logged', config_file) return # do not add --module else: __add_arg(args, ext, config_file) if has_logging: __add_arg(args, 'paste-logger', True)
def get_config(argv, cwd=None): """ Read sys.argv and parse out repository of migrations and database url. >>> import os >>> from ConfigParser import SafeConfigParser >>> from shutil import rmtree >>> from tempfile import mkdtemp >>> config_dir = mkdtemp() >>> os.makedirs(os.path.join(config_dir, 'config')) >>> def write_ini(path, property, value): ... p = SafeConfigParser() ... p.add_section('app:main') ... p.set('app:main', property, value) ... with open(os.path.join(config_dir, 'config', path), 'w') as f: p.write(f) >>> write_ini('tool_shed.ini', 'database_connection', 'sqlite:///pg/testdb1') >>> config = get_config(['manage_db.py', 'tool_shed'], cwd=config_dir) >>> config['repo'] 'lib/galaxy/webapps/tool_shed/model/migrate' >>> config['db_url'] 'sqlite:///pg/testdb1' >>> write_ini('galaxy.ini', 'database_file', 'moo.sqlite') >>> config = get_config(['manage_db.py'], cwd=config_dir) >>> config['db_url'] 'sqlite:///moo.sqlite?isolation_level=IMMEDIATE' >>> config['repo'] 'lib/galaxy/model/migrate' >>> rmtree(config_dir) """ if argv and (argv[-1] in DATABASE): database = argv.pop() # database name tool_shed, galaxy, or install. else: database = 'galaxy' database_defaults = DATABASE[database] config_names = database_defaults.get('config_names', DEFAULT_CONFIG_NAMES) config_file = read_config_file_arg(argv, config_names, cwd=cwd) repo = database_defaults['repo'] config_prefix = database_defaults.get('config_prefix', DEFAULT_CONFIG_PREFIX) config_override = database_defaults.get('config_override', 'GALAXY_CONFIG_') default_sqlite_file = database_defaults['default_sqlite_file'] if not config_file or get_ext(config_file, ignore='sample') == 'yaml': config_section = database_defaults.get('config_section', None) else: # An .ini file - just let load_app_properties find app:main. config_section = None properties = load_app_properties(config_file=config_file, config_prefix=config_override, config_section=config_section) if ("%sdatabase_connection" % config_prefix) in properties: db_url = properties["%sdatabase_connection" % config_prefix] elif ("%sdatabase_file" % config_prefix) in properties: database_file = properties["%sdatabase_file" % config_prefix] db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % database_file else: db_url = "sqlite:///%s?isolation_level=IMMEDIATE" % default_sqlite_file return dict(db_url=db_url, repo=repo, config_file=config_file, database=database)