Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.config.script
#!/usr/bin/env python
import os
import string
import sys
from argparse import ArgumentParser
CONFIGURE_URL = "https://docs.galaxyproject.org/en/master/admin/"
DESCRIPTION = "Initialize a directory with a minimal Galaxy config."
HELP_CONFIG_DIR = "Directory containing the configuration files for Galaxy."
HELP_DATA_DIR = "Directory containing Galaxy-created data."
HELP_FORCE = "Overwrite existing files if they already exist."
HELP_HOST = (
'Host to bind Galaxy to - defaults to localhost. Specify an IP address or "all" to listen on all interfaces.'
)
HELP_PORT = "Port to bind Galaxy to."
HELP_DB_CONN = "Galaxy database connection URI."
DEFAULT_HOST = "localhost"
DEFAULT_YML = "galaxy.yml"
SAMPLES_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "sample"))
GALAXY_CONFIG_TEMPLATE_FILE = os.path.join(SAMPLES_PATH, "galaxy.yml.sample")
MSG_CONFIG_SUMMARY = """
Perform additional configuration by editing the config file at:
{config_path}
For help on configuring Galaxy, consult the documentation at:
{configure_url}
Additional sample configuration files for various Galaxy components (jobs,
datatypes, etc.) can be found in:
{samples_path}
Advanced job configurations can be generated with galaxy-job-config-init. It
can be installed and run with:
pip install galaxy-job-config-init
galaxy-job-config-init --help
Some Galaxy dependencies are optional based on your configuration. You can
install them with:
galaxy-dependencies --install
Start Galaxy by running the command:
galaxy -c {config_path}
"""
# The sample is used as the default config file for Galaxy started without a config, and we don't want to duplicate the
# whole thing into galaxy.config for templating, so for now just substitute some lines. In the future we will build
# configs differently.
GALAXY_CONFIG_SUBSTITUTIONS = {
" #config_dir: null": " config_dir: ${config_dir}",
" #data_dir: null": " data_dir: ${data_dir}",
" # bind: localhost:8080": " bind: ${host}:${port}",
}
[docs]
def main(argv=None):
arg_parser = ArgumentParser(description=DESCRIPTION)
arg_parser.add_argument("--config-dir", default=".", help=HELP_CONFIG_DIR)
arg_parser.add_argument("--data-dir", default="./data", help=HELP_DATA_DIR)
arg_parser.add_argument("--host", default=DEFAULT_HOST, help=HELP_HOST)
arg_parser.add_argument("--port", default="8080", help=HELP_PORT)
arg_parser.add_argument("--db-conn", help=HELP_DB_CONN)
arg_parser.add_argument("--force", action="store_true", default=False, help=HELP_FORCE)
args = arg_parser.parse_args(argv)
config_dir = args.config_dir
relative_config_dir = config_dir
config_dir = os.path.abspath(config_dir)
data_dir = args.data_dir
data_dir = os.path.abspath(data_dir)
mode = _determine_mode(args)
if args.db_conn:
GALAXY_CONFIG_SUBSTITUTIONS[" #database_connection: null"] = " database_connection: ${database_connection}"
for directory in (config_dir, data_dir):
if not os.path.exists(directory):
os.makedirs(directory)
print(f"* Bootstrapping Galaxy configuration into directory: {relative_config_dir}")
_handle_galaxy_yml(args, config_dir, data_dir)
_print_config_summary(args, mode, relative_config_dir)
def _print_config_summary(args, mode, relative_config_dir):
_print_galaxy_yml_info(args, mode)
config_path = os.path.join(args.config_dir, DEFAULT_YML)
print(
MSG_CONFIG_SUMMARY.format(
configure_url=CONFIGURE_URL,
samples_path=SAMPLES_PATH,
config_path=config_path,
)
)
def _print_galaxy_yml_info(args, mode):
print("* Configuration created")
print(f" - Target web server [{mode}]")
if args.host == DEFAULT_HOST:
print(f" - Binding to [localhost:{args.port}], remote clients will not be able to connect.")
elif _determine_host(args) == "0.0.0.0":
print(" - Binding to all network interfaces.")
else:
print(f" - Binding to [{args.host}:{args.port}].")
def _determine_mode(args):
return "gunicorn"
def _determine_host(args):
return "0.0.0.0" if args.host == "all" else args.host
def _determine_yml_file(config_dir):
return os.path.join(config_dir, DEFAULT_YML)
def _handle_galaxy_yml(args, config_dir, data_dir):
force = args.force
yml_file = _determine_yml_file(config_dir)
_check_file(yml_file, force)
config_dict = dict(
port=args.port,
host=_determine_host(args),
config_dir=config_dir,
data_dir=data_dir,
database_connection=args.db_conn,
)
galaxy_config_template = []
with open(GALAXY_CONFIG_TEMPLATE_FILE) as fh:
for line in fh:
line = line.rstrip("\n")
for k, v in GALAXY_CONFIG_SUBSTITUTIONS.items():
if line == k:
line = v
galaxy_config_template.append(line)
galaxy_config_template = string.Template("\n".join(galaxy_config_template))
galaxy_config = galaxy_config_template.safe_substitute(**config_dict)
open(yml_file, "w").write(galaxy_config)
def _check_file(path, force):
if os.path.exists(path) and not force:
print(f"File {path} exists, exiting. Run with --force to replace configuration.", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()