diff --git a/lib/galaxy/util/script.py b/lib/galaxy/util/script.py new file mode 100644 index 00000000000..4e72a0cf67e --- /dev/null +++ b/lib/galaxy/util/script.py @@ -0,0 +1,57 @@ +"""Utilities for Galaxy scripts +""" +import argparse +import os +import sys + +from galaxy.util.properties import find_config_file, load_app_properties + +DESCRIPTION = None +ACTIONS = None +ARGUMENTS = None +DEFAULT_ACTION = None + + +def main_factory(description=None, actions=None, arguments=None, default_action=None): + global DESCRIPTION, ACTIONS, ARGUMENTS, DEFAULT_ACTION + DESCRIPTION = description + ACTIONS = actions or {} + ARGUMENTS = arguments or [] + DEFAULT_ACTION = default_action + return main + + +def main(argv=None): + """Entry point for conversion process.""" + if argv is None: + argv = sys.argv[1:] + args = _arg_parser().parse_args(argv) + kwargs = _app_properties(args) + action = args.action + action_func = ACTIONS[action] + action_func(args, kwargs) + + +def _app_properties(args): + # FIXME: you can use galaxy.util.path.extensions for this + config_file = args.config_file or find_config_file(args.app) + app_properties = load_app_properties(config_file=config_file, config_section=args.config_section) + return app_properties + + +def _arg_parser(): + parser = argparse.ArgumentParser(description=DESCRIPTION) + parser.add_argument('action', metavar='ACTION', type=str, + choices=ACTIONS.keys(), + default=DEFAULT_ACTION, + nargs='?' if DEFAULT_ACTION is not None else None, + help='action to perform') + parser.add_argument("-c", "--config-file", + default=os.environ.get('GALAXY_CONFIG_FILE', None)) + parser.add_argument("--config-section", + default=os.environ.get('GALAXY_CONFIG_SECTION', None)) + parser.add_argument("--app", + default=os.environ.get('GALAXY_APP', 'galaxy')) + for argument in ARGUMENTS: + parser.add_argument(*argument[0], **argument[1]) + return parser diff --git a/scripts/manage_tool_dependencies.py b/scripts/manage_tool_dependencies.py index 40e09217d48..0ff3a6b6a5c 100644 --- a/scripts/manage_tool_dependencies.py +++ b/scripts/manage_tool_dependencies.py @@ -1,4 +1,3 @@ -import argparse import os.path import sys @@ -11,43 +10,16 @@ from galaxy.config import ( parse_dependency_options, ) from galaxy.tools.deps import CachedDependencyManager, DependencyManager, NullDependencyManager -from galaxy.util.properties import find_config_file, load_app_properties +from galaxy.util.script import main_factory DESCRIPTION = "Script to manage tool dependencies (with focus on a Conda environments)." -def main(argv=None): - """Entry point for conversion process.""" - if argv is None: - argv = sys.argv[1:] - args = _arg_parser().parse_args(argv) - action = args.action - action_func = ACTIONS[action] - action_func(args) - - -def _init_if_needed(args): - kwargs = _app_properties(args) - +def _init_if_needed(args, kwargs): # If conda_auto_init is set, simply building the Conda resolver will call handle installation. _build_dependency_manager_no_config(kwargs) -def _app_properties(args): - config_file = find_config_file("config/galaxy.ini", "universe_wsgi.ini", args.config_file) - app_properties = load_app_properties(ini_file=config_file) - return app_properties - - -def _arg_parser(): - parser = argparse.ArgumentParser(description=DESCRIPTION) - parser.add_argument('action', metavar='ACTION', type=str, - choices=ACTIONS.keys(), - help='action to perform') - parser.add_argument("-c", "--config-file", default=None) - return parser - - def _build_dependency_manager_no_config(kwargs): """Simplified variant of build_dependency_manager from galaxy.tools.deps. @@ -84,4 +56,5 @@ ACTIONS = { if __name__ == '__main__': + main = main_factory(description=DESCRIPTION, actions=ACTIONS) main()