comparison env/lib/python3.7/site-packages/planemo/galaxy/ephemeris_sleep.py @ 2:6af9afd405e9 draft

"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author shellac
date Thu, 14 May 2020 14:56:58 -0400
parents 26e78fe6e8c4
children
comparison
equal deleted inserted replaced
1:75ca89e9b81c 2:6af9afd405e9
1 #!/usr/bin/env python
2 '''Utility to do a blocking sleep until a Galaxy instance is responsive.
3 This is useful in docker images, in RUN steps, where one needs to wait
4 for a currently starting Galaxy to be alive, before API requests can be
5 made successfully.
6 The script functions by making repeated requests to
7 ``http(s)://fqdn/api/version``, an API which requires no authentication
8 to access.'''
9
10 import sys
11 import time
12 from argparse import ArgumentParser
13
14 import requests
15 from galaxy.util import unicodify
16
17 try:
18 from .common_parser import get_common_args
19 except ImportError:
20 # This won't stay in Planemo long, main no longer functional.
21 get_common_args = None
22
23
24 def _parser():
25 '''Constructs the parser object'''
26 parent = get_common_args(login_required=False)
27 parser = ArgumentParser(parents=[parent], usage="usage: python %(prog)s <options>",
28 description="Script to sleep and wait for Galaxy to be alive.")
29 parser.add_argument("--timeout",
30 default=0, type=int,
31 help="Galaxy startup timeout in seconds. The default value of 0 waits forever")
32 return parser
33
34
35 def _parse_cli_options():
36 """
37 Parse command line options, returning `parse_args` from `ArgumentParser`.
38 """
39 parser = _parser()
40 return parser.parse_args()
41
42
43 def sleep(galaxy_url, verbose=False, timeout=0):
44 count = 0
45 while True:
46 try:
47 result = requests.get(galaxy_url + '/api/version')
48 try:
49 result = result.json()
50 if verbose:
51 sys.stdout.write("Galaxy Version: %s\n" % result['version_major'])
52 break
53 except ValueError:
54 if verbose:
55 sys.stdout.write("[%02d] No valid json returned... %s\n" % (count, result.__str__()))
56 sys.stdout.flush()
57 except requests.exceptions.ConnectionError as e:
58 if verbose:
59 sys.stdout.write("[%02d] Galaxy not up yet... %s\n" % (count, unicodify(e)[:100]))
60 sys.stdout.flush()
61 count += 1
62
63 # If we cannot talk to galaxy and are over the timeout
64 if timeout != 0 and count > timeout:
65 sys.stderr.write("Failed to contact Galaxy\n")
66 return False
67
68 time.sleep(1)
69
70 return True
71
72
73 def main():
74 """
75 Main function
76 """
77 options = _parse_cli_options()
78
79 galaxy_alive = sleep(galaxy_url=options.galaxy, verbose=options.verbose, timeout=options.timeout)
80 exit_code = 0 if galaxy_alive else 1
81 sys.exit(exit_code)
82
83
84 if __name__ == "__main__":
85 main()