comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 """Abstractions for serving out development Galaxy servers."""
2 from __future__ import print_function
3
4 import contextlib
5 import os
6 import time
7
8 from planemo import (
9 io,
10 network_util
11 )
12 from .config import galaxy_config
13 from .ephemeris_sleep import sleep
14 from .run import (
15 run_galaxy_command,
16 )
17
18
19 def serve(ctx, runnables=[], **kwds):
20 """Serve a Galaxy instance with artifacts defined by paths."""
21 try:
22 return _serve(ctx, runnables, **kwds)
23 except Exception as e:
24 ctx.vlog("Problem serving Galaxy", exception=e)
25 raise
26
27
28 def _serve(ctx, runnables, **kwds):
29 engine = kwds.get("engine", "galaxy")
30 if engine == "docker_galaxy":
31 kwds["dockerize"] = True
32
33 daemon = kwds.get("daemon", False)
34 if daemon:
35 kwds["no_cleanup"] = True
36
37 port = kwds.get("port", None)
38 if port is None:
39 port = network_util.get_free_port()
40 kwds["port"] = port
41
42 with galaxy_config(ctx, runnables, **kwds) as config:
43 cmd = config.startup_command(ctx, **kwds)
44 action = "Starting Galaxy"
45 exit_code = run_galaxy_command(
46 ctx,
47 cmd,
48 config.env,
49 action,
50 )
51 if exit_code:
52 message = "Problem running Galaxy command [%s]." % config.log_contents
53 io.warn(message)
54 raise Exception(message)
55 host = kwds.get("host", "127.0.0.1")
56
57 timeout = 500
58 galaxy_url = "http://%s:%s" % (host, port)
59 galaxy_alive = sleep(galaxy_url, verbose=ctx.verbose, timeout=timeout)
60 if not galaxy_alive:
61 raise Exception("Attempted to serve Galaxy at %s, but it failed to start in %d seconds." % (galaxy_url, timeout))
62 config.install_workflows()
63 if kwds.get("pid_file"):
64 real_pid_file = config.pid_file
65 if os.path.exists(config.pid_file):
66 os.symlink(real_pid_file, kwds["pid_file"])
67 else:
68 io.warn("Can't find Galaxy pid file [%s] to link" % real_pid_file)
69 return config
70
71
72 @contextlib.contextmanager
73 def shed_serve(ctx, install_args_list, **kwds):
74 """Serve a daemon instance of Galaxy with specified repositories installed."""
75 with serve_daemon(ctx, **kwds) as config:
76 install_deps = not kwds.get("skip_dependencies", False)
77 io.info("Installing repositories - this may take some time...")
78 for install_args in install_args_list:
79 install_args["install_tool_dependencies"] = install_deps
80 install_args["install_repository_dependencies"] = True
81 install_args["new_tool_panel_section_label"] = "Shed Installs"
82 config.install_repo(
83 **install_args
84 )
85 config.wait_for_all_installed()
86 yield config
87
88
89 @contextlib.contextmanager
90 def serve_daemon(ctx, runnables=[], **kwds):
91 """Serve a daemonized Galaxy instance with artifacts defined by paths."""
92 config = None
93 try:
94 kwds["daemon"] = True
95 config = serve(ctx, runnables, **kwds)
96 yield config
97 finally:
98 if config:
99 if ctx.verbose:
100 print("Galaxy Log:")
101 print(config.log_contents)
102 config.kill()
103 if not kwds.get("no_cleanup", False):
104 config.cleanup()
105
106
107 def sleep_for_serve():
108 # This is bad, do something better...
109 time.sleep(1000000)
110
111
112 __all__ = (
113 "serve",
114 "serve_daemon",
115 "shed_serve",
116 )