Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/planemo/galaxy/run.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
| author | shellac |
|---|---|
| date | Mon, 22 Mar 2021 18:12:50 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4f3585e2f14b |
|---|---|
| 1 """Utilities for calling Galaxy scripts.""" | |
| 2 import os | |
| 3 import string | |
| 4 | |
| 5 from galaxy.tool_util.deps.commands import shell | |
| 6 from six.moves import shlex_quote | |
| 7 | |
| 8 from planemo.io import info, shell_join | |
| 9 from planemo.virtualenv import ( | |
| 10 create_command, | |
| 11 DEFAULT_PYTHON_VERSION, | |
| 12 ) | |
| 13 | |
| 14 | |
| 15 # Activate galaxy's virtualenv if present (needed for tests say but not for | |
| 16 # server because run.sh does this). | |
| 17 ACTIVATE_COMMAND = ( | |
| 18 'if [ -e "$GALAXY_VIRTUAL_ENV" ]; then . "$GALAXY_VIRTUAL_ENV"/bin/activate; ' | |
| 19 'echo "Activated a virtualenv for Galaxy"; echo "$VIRTUAL_ENV"; ' | |
| 20 'else echo "Failed to activate virtualenv."; fi' | |
| 21 ) | |
| 22 CREATE_COMMAND_TEMPLATE = string.Template( | |
| 23 'if [ ! -e "$GALAXY_VIRTUAL_ENV" ]; then $create_virtualenv; echo "Created virtualenv"; fi', | |
| 24 ) | |
| 25 PRINT_VENV_COMMAND = shell_join( | |
| 26 r'echo "Set \$GALAXY_VIRTUAL_ENV to $GALAXY_VIRTUAL_ENV"', | |
| 27 ('if [ -e "$GALAXY_VIRTUAL_ENV" ]; ' | |
| 28 'then echo "Virtual environment directory exists."; ' | |
| 29 'else echo "Virtual environment directory does not exist."; fi'), | |
| 30 ) | |
| 31 | |
| 32 | |
| 33 CACHED_VIRTUAL_ENV_COMMAND = ("if [ -d .venv ]; " | |
| 34 "then GALAXY_VIRTUAL_ENV=.venv; " | |
| 35 "else GALAXY_VIRTUAL_ENV=%s; fi") | |
| 36 UNCACHED_VIRTUAL_ENV_COMMAND = "GALAXY_VIRTUAL_ENV=.venv" | |
| 37 | |
| 38 | |
| 39 def setup_venv(ctx, kwds): | |
| 40 if kwds.get("skip_venv", False): | |
| 41 return "" | |
| 42 | |
| 43 create_template_params = { | |
| 44 'create_virtualenv': create_command("$GALAXY_VIRTUAL_ENV", kwds.get('galaxy_python_version')) | |
| 45 } | |
| 46 return shell_join( | |
| 47 locate_galaxy_virtualenv(ctx, kwds), | |
| 48 PRINT_VENV_COMMAND if ctx.verbose else None, | |
| 49 CREATE_COMMAND_TEMPLATE.safe_substitute(create_template_params), | |
| 50 PRINT_VENV_COMMAND if ctx.verbose else None, | |
| 51 ACTIVATE_COMMAND, | |
| 52 "bash -c 'pwd'" if ctx.verbose else None, | |
| 53 "bash -c 'which python'" if ctx.verbose else None, | |
| 54 "bash -c 'which pip'" if ctx.verbose else None, | |
| 55 "bash -c 'echo $GALAXY_VIRTUAL_ENV'" if ctx.verbose else None, | |
| 56 "bash -c 'echo $VIRTUAL_ENV'" if ctx.verbose else None, | |
| 57 "bash -c 'ls -a'" if ctx.verbose else None, | |
| 58 ) | |
| 59 | |
| 60 | |
| 61 def locate_galaxy_virtualenv(ctx, kwds): | |
| 62 if os.environ.get("GALAXY_VIRTUAL_ENV"): | |
| 63 venv_command = "" | |
| 64 elif not kwds.get("no_cache_galaxy", False): | |
| 65 workspace = ctx.workspace | |
| 66 galaxy_branch = kwds.get("galaxy_branch") or "master" | |
| 67 shared_venv_path = os.path.join(workspace, "gx_venv") | |
| 68 galaxy_python_version = kwds.get('galaxy_python_version') or DEFAULT_PYTHON_VERSION | |
| 69 shared_venv_path = "%s_%s" % (shared_venv_path, galaxy_python_version) | |
| 70 if galaxy_branch != "master": | |
| 71 shared_venv_path = "%s_%s" % (shared_venv_path, galaxy_branch) | |
| 72 venv_command = CACHED_VIRTUAL_ENV_COMMAND % shlex_quote(shared_venv_path) | |
| 73 else: | |
| 74 venv_command = UNCACHED_VIRTUAL_ENV_COMMAND | |
| 75 return shell_join( | |
| 76 venv_command, | |
| 77 "export GALAXY_VIRTUAL_ENV", | |
| 78 ) | |
| 79 | |
| 80 | |
| 81 def shell_if_wheels(command): | |
| 82 """ Take a shell command and convert it to shell command that runs | |
| 83 only if Galaxy is new enough to use wheels. | |
| 84 """ | |
| 85 return "$(grep -q 'skip-venv' run_tests.sh) && %s" % command | |
| 86 | |
| 87 | |
| 88 def setup_common_startup_args(): | |
| 89 return _set_variable_if_wheels( | |
| 90 "COMMON_STARTUP_ARGS", "--dev-wheels" | |
| 91 ) | |
| 92 | |
| 93 | |
| 94 def _set_variable_if_wheels(var, if_wheels_val, else_val=""): | |
| 95 var_command = '${var}=${else_val}; ' | |
| 96 var_command += shell_if_wheels( | |
| 97 '${var}="${if_wheels_val}"; ' | |
| 98 ) | |
| 99 var_command += "export ${var}" | |
| 100 var_command += '; echo "Set ${var} to ${${var}}"' | |
| 101 return string.Template(var_command).safe_substitute( | |
| 102 var=var, | |
| 103 if_wheels_val=if_wheels_val, | |
| 104 else_val=else_val, | |
| 105 ) | |
| 106 | |
| 107 | |
| 108 def run_galaxy_command(ctx, command, env, action): | |
| 109 """Run Galaxy command with informative verbose logging.""" | |
| 110 message = "%s with command [%s]" % (action, command) | |
| 111 # info not working in pytest+Github actions the way it did in nose? | |
| 112 info(message) | |
| 113 ctx.vlog("With environment variables:") | |
| 114 ctx.vlog("============================") | |
| 115 for key, value in env.items(): | |
| 116 ctx.vlog('%s="%s"' % (key, value)) | |
| 117 ctx.vlog("============================") | |
| 118 exit_code = shell(command, env=env) | |
| 119 ctx.vlog("run command exited with return code %s" % exit_code) | |
| 120 return exit_code | |
| 121 | |
| 122 | |
| 123 __all__ = ( | |
| 124 "setup_venv", | |
| 125 "run_galaxy_command", | |
| 126 "setup_common_startup_args", | |
| 127 ) |
