diff env/lib/python3.9/site-packages/planemo/galaxy/serve.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/planemo/galaxy/serve.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,130 @@
+"""Abstractions for serving out development Galaxy servers."""
+from __future__ import print_function
+
+import contextlib
+import os
+import time
+
+from planemo import (
+    io,
+    network_util
+)
+from .config import galaxy_config
+from .ephemeris_sleep import sleep
+from .run import (
+    run_galaxy_command,
+)
+INSTALLING_MESSAGE = "Installing repositories - this may take some time..."
+
+
+def serve(ctx, runnables=None, **kwds):
+    if runnables is None:
+        runnables = []
+    """Serve a Galaxy instance with artifacts defined by paths."""
+    try:
+        return _serve(ctx, runnables, **kwds)
+    except Exception as e:
+        ctx.vlog("Problem serving Galaxy", exception=e)
+        raise
+
+
+def _serve(ctx, runnables, **kwds):
+    engine = kwds.get("engine", "galaxy")
+    if engine == "docker_galaxy":
+        kwds["dockerize"] = True
+
+    daemon = kwds.get("daemon", False)
+    if daemon:
+        kwds["no_cleanup"] = True
+
+    port = kwds.get("port", None)
+    if port is None:
+        port = network_util.get_free_port()
+        kwds["port"] = port
+
+    with galaxy_config(ctx, runnables, **kwds) as config:
+        cmd = config.startup_command(ctx, **kwds)
+        action = "Starting Galaxy"
+        exit_code = run_galaxy_command(
+            ctx,
+            cmd,
+            config.env,
+            action,
+        )
+        if exit_code:
+            message = "Problem running Galaxy command [%s]." % config.log_contents
+            io.warn(message)
+            raise Exception(message)
+        host = kwds.get("host", "127.0.0.1")
+
+        timeout = 500
+        galaxy_url = "http://%s:%s" % (host, port)
+        galaxy_alive = sleep(galaxy_url, verbose=ctx.verbose, timeout=timeout)
+        if not galaxy_alive:
+            raise Exception("Attempted to serve Galaxy at %s, but it failed to start in %d seconds." % (galaxy_url, timeout))
+        config.install_workflows()
+        if kwds.get("pid_file"):
+            real_pid_file = config.pid_file
+            if os.path.exists(config.pid_file):
+                os.symlink(real_pid_file, kwds["pid_file"])
+            else:
+                io.warn("Can't find Galaxy pid file [%s] to link" % real_pid_file)
+        return config
+
+
+@contextlib.contextmanager
+def shed_serve(ctx, install_args_list, **kwds):
+    """Serve a daemon instance of Galaxy with specified repositories installed."""
+    with serve_daemon(ctx, **kwds) as config:
+        install_deps = not kwds.get("skip_dependencies", False)
+        print(INSTALLING_MESSAGE)
+        io.info(INSTALLING_MESSAGE)
+        for install_args in install_args_list:
+            install_args["install_tool_dependencies"] = install_deps
+            install_args["install_repository_dependencies"] = True
+            install_args["new_tool_panel_section_label"] = "Shed Installs"
+            config.install_repo(
+                **install_args
+            )
+        try:
+            config.wait_for_all_installed()
+        except Exception:
+            if ctx.verbose:
+                print("Failed to install tool repositories, Galaxy log:")
+                print(config.log_contents)
+                print("Galaxy root:")
+                io.shell(['ls', config.galaxy_root])
+            raise
+        yield config
+
+
+@contextlib.contextmanager
+def serve_daemon(ctx, runnables=None, **kwds):
+    """Serve a daemonized Galaxy instance with artifacts defined by paths."""
+    if runnables is None:
+        runnables = []
+    config = None
+    try:
+        kwds["daemon"] = True
+        config = serve(ctx, runnables, **kwds)
+        yield config
+    finally:
+        if config:
+            if ctx.verbose:
+                print("Galaxy Log:")
+                print(config.log_contents)
+            config.kill()
+            if not kwds.get("no_cleanup", False):
+                config.cleanup()
+
+
+def sleep_for_serve():
+    # This is bad, do something better...
+    time.sleep(1000000)
+
+
+__all__ = (
+    "serve",
+    "serve_daemon",
+    "shed_serve",
+)