annotate refinery_test_tool.py @ 1:b87749d7a24c draft default tip

planemo upload commit 4fb0a789956149e5a58f4e370d7fe14f4e8bcf79
author refinery-platform
date Thu, 22 Feb 2018 14:14:03 -0500
parents 5b28174e774d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
1 #!/usr/bin/env python
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
2
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
3 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
4 Test tool for running Galaxy workflows from Refinery
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
5
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
6 @author: Ilya Sytchev
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
7
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
8 Input: one or more text files
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
9 Output: concatenated input file(s) plus annotation
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
10
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
11 Requires Python v2.7
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
12
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
13 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
14
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
15
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
16 import argparse
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
17 import random
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
18 import sys
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
19 import time
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
20
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
21
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
22 def main(args):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
23 time.sleep(args.seconds)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
24
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
25 if check_fail(args.p_fail):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
26 cleanup(args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
27 quit("Processing failed by request", args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
28
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
29 input = read_files(args.input_files)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
30 try:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
31 for out_file in args.output_files:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
32 if args.empty_outfile:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
33 output = ''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
34 else:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
35 output = "Output file name: " + out_file.name + "\n\n" + input
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
36 out_file.write(output)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
37 except IOError as e:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
38 cleanup(args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
39 parser.error(e)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
40 else:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
41 cleanup(args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
42
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
43
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
44 def check_fail(p_fail):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
45 '''Determine success/failure state given a probability of failure
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
46
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
47 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
48 random.seed()
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
49 if random.random() < p_fail:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
50 return True
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
51 else:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
52 return False
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
53
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
54
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
55 def read_files(file_list):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
56 '''Read files from disk into a string
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
57
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
58 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
59 str = ''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
60 for in_file in file_list:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
61 str += "Input file name: " + in_file.name + "\n\n"
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
62 str += in_file.read()
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
63 return str
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
64
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
65
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
66 def cleanup(args):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
67 '''Close all open file handles
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
68
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
69 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
70 file_list = []
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
71 if args.input_files:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
72 file_list.extend(args.input_files)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
73 if args.output_files:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
74 file_list.extend(args.output_files)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
75 for fh in file_list:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
76 try:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
77 fh.close()
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
78 except AttributeError:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
79 continue
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
80
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
81
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
82 def quit(message, args):
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
83 '''Exit and optionally write to stdout and/or stderr
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
84
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
85 '''
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
86 if args.stdout:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
87 sys.stdout.write(message + '\n')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
88 if args.stderr:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
89 sys.stderr.write(message + '\n')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
90 sys.exit(args.exit_code)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
91
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
92
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
93 if __name__ == '__main__':
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
94 version = "%(prog)s 0.1"
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
95 description = "Test tool for running workflows on Galaxy platform from Refinery"
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
96 parser = argparse.ArgumentParser(description=description, version=version)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
97
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
98 parser.add_argument('-i', '--in-file', dest='input_files', nargs='+',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
99 type=file, metavar='INPUT_FILE', required=True,
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
100 help='name of the input file')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
101 parser.add_argument('-o', '--out-file', dest='output_files', nargs='+',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
102 type=argparse.FileType('w'), metavar='OUTPUT_FILE',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
103 required=True, help='name of the output file')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
104 parser.add_argument('-e', '--exit_code', type=int, default=0,
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
105 help='code to return on exit, default: %(default)s')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
106 parser.add_argument('--stdout', action='store_true',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
107 help='write a message to stdout')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
108 parser.add_argument('--stderr', action='store_true',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
109 help='write a message to stderr')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
110 parser.add_argument('--empty_outfile', action='store_true',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
111 help='produce empty output file(s)')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
112 parser.add_argument('-p', '--p-fail', type=float, default=0.0,
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
113 help='probability of execution failure, default: %(default)s')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
114 parser.add_argument('-s', '--sleep', dest='seconds', type=int, default=0,
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
115 metavar='SECONDS',
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
116 help='number of seconds to sleep, default: %(default)s')
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
117
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
118 # check argument values for errors
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
119 try:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
120 args = parser.parse_args()
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
121 except IOError as e:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
122 parser.error(e)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
123
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
124 if args.exit_code < 0 or args.exit_code > 255:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
125 cleanup(args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
126 parser.error("Exit code value must be between 0 and 255")
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
127
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
128 if args.p_fail < 0.0 or args.p_fail > 1.0:
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
129 cleanup(args)
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
130 parser.error("Probability value must be between 0.0 and 1.0 inclusive")
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
131
5b28174e774d Uploaded
refinery-platform
parents:
diff changeset
132 main(args)