diff env/lib/python3.7/site-packages/planemo/galaxy/run.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/planemo/galaxy/run.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,117 @@
+"""Utilities for calling Galaxy scripts."""
+import os
+import string
+
+from galaxy.tool_util.deps.commands import shell
+from six.moves import shlex_quote
+
+from planemo.io import info, shell_join
+from planemo.virtualenv import (
+    create_command,
+    DEFAULT_PYTHON_VERSION,
+)
+
+
+# Activate galaxy's virtualenv if present (needed for tests say but not for
+# server because run.sh does this).
+ACTIVATE_COMMAND = 'if [ -e "$GALAXY_VIRTUAL_ENV" ]; then . "$GALAXY_VIRTUAL_ENV"/bin/activate; fi'
+CREATE_COMMAND_TEMPLATE = string.Template(
+    'if [ ! -e "$GALAXY_VIRTUAL_ENV" ]; then $create_virtualenv; fi',
+)
+PRINT_VENV_COMMAND = shell_join(
+    r'echo "Set \$GALAXY_VIRTUAL_ENV to $GALAXY_VIRTUAL_ENV"',
+    ('if [ -e "$GALAXY_VIRTUAL_ENV" ]; '
+     'then echo "Virtual environment directory exists."; '
+     'else echo "Virtual environment directory does not exist."; fi'),
+)
+
+
+CACHED_VIRTUAL_ENV_COMMAND = ("if [ -d .venv ] || [ -f dist-eggs.ini ]; "
+                              "then GALAXY_VIRTUAL_ENV=.venv; "
+                              "else GALAXY_VIRTUAL_ENV=%s; fi")
+UNCACHED_VIRTUAL_ENV_COMMAND = "GALAXY_VIRTUAL_ENV=.venv"
+
+
+def setup_venv(ctx, kwds):
+    if kwds.get("skip_venv", False):
+        return ""
+
+    create_template_params = {
+        'create_virtualenv': create_command("$GALAXY_VIRTUAL_ENV", kwds.get('galaxy_python_version'))
+    }
+    return shell_join(
+        locate_galaxy_virtualenv(ctx, kwds),
+        PRINT_VENV_COMMAND if ctx.verbose else None,
+        CREATE_COMMAND_TEMPLATE.safe_substitute(create_template_params),
+        PRINT_VENV_COMMAND if ctx.verbose else None,
+        ACTIVATE_COMMAND,
+    )
+
+
+def locate_galaxy_virtualenv(ctx, kwds):
+    if os.environ.get("GALAXY_VIRTUAL_ENV"):
+        venv_command = ""
+    elif not kwds.get("no_cache_galaxy", False):
+        workspace = ctx.workspace
+        galaxy_branch = kwds.get("galaxy_branch") or "master"
+        shared_venv_path = os.path.join(workspace, "gx_venv")
+        galaxy_python_version = kwds.get('galaxy_python_version') or DEFAULT_PYTHON_VERSION
+        if galaxy_python_version != DEFAULT_PYTHON_VERSION:
+            shared_venv_path = "%s_%s" % (shared_venv_path, galaxy_python_version)
+        if galaxy_branch != "master":
+            shared_venv_path = "%s_%s" % (shared_venv_path, galaxy_branch)
+        venv_command = CACHED_VIRTUAL_ENV_COMMAND % shlex_quote(shared_venv_path)
+    else:
+        venv_command = UNCACHED_VIRTUAL_ENV_COMMAND
+    return shell_join(
+        venv_command,
+        "export GALAXY_VIRTUAL_ENV",
+    )
+
+
+def shell_if_wheels(command):
+    """ Take a shell command and convert it to shell command that runs
+    only if Galaxy is new enough to use wheels.
+    """
+    return "$(grep -q 'skip-venv' run_tests.sh) && %s" % command
+
+
+def setup_common_startup_args():
+    return _set_variable_if_wheels(
+        "COMMON_STARTUP_ARGS", "--dev-wheels"
+    )
+
+
+def _set_variable_if_wheels(var, if_wheels_val, else_val=""):
+    var_command = '${var}=${else_val}; '
+    var_command += shell_if_wheels(
+        '${var}="${if_wheels_val}"; '
+    )
+    var_command += "export ${var}"
+    var_command += '; echo "Set ${var} to ${${var}}"'
+    return string.Template(var_command).safe_substitute(
+        var=var,
+        if_wheels_val=if_wheels_val,
+        else_val=else_val,
+    )
+
+
+def run_galaxy_command(ctx, command, env, action):
+    """Run Galaxy command with informative verbose logging."""
+    message = "%s with command [%s]" % (action, command)
+    info(message)
+    ctx.vlog("With environment variables:")
+    ctx.vlog("============================")
+    for key, value in env.items():
+        ctx.vlog('%s="%s"' % (key, value))
+    ctx.vlog("============================")
+    exit_code = shell(command, env=env)
+    ctx.vlog("run command exited with return code %s" % exit_code)
+    return exit_code
+
+
+__all__ = (
+    "setup_venv",
+    "run_galaxy_command",
+    "setup_common_startup_args",
+)