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