diff env/lib/python3.7/site-packages/planemo/galaxy/serve.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/serve.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,116 @@
+"""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,
+)
+
+
+def serve(ctx, runnables=[], **kwds):
+    """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)
+        io.info("Installing repositories - this may take some time...")
+        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
+            )
+        config.wait_for_all_installed()
+        yield config
+
+
+@contextlib.contextmanager
+def serve_daemon(ctx, runnables=[], **kwds):
+    """Serve a daemonized Galaxy instance with artifacts defined by paths."""
+    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",
+)