-
Notifications
You must be signed in to change notification settings - Fork 13
/
helloworld.py
202 lines (172 loc) · 7.04 KB
/
helloworld.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
from rodan.jobs.base import RodanTask
class HelloWorld(RodanTask):
name = 'Hello World'
author = 'Ryan Bannon'
description = 'Output string "Hello World"'
settings = {}
enabled = True
category = "Test"
interactive = False
input_port_types = (
{'name': 'Text input', 'minimum': 0, 'maximum': 1, 'resource_types': ['text/plain']},
)
output_port_types = (
{'name': 'Text output', 'minimum': 1, 'maximum': 1, 'resource_types': ['text/plain']},
)
def run_my_task(self, inputs, settings, outputs):
outfile_path = outputs['Text output'][0]['resource_path']
outfile = open(outfile_path, "w")
if 'Text input' in inputs:
infile_path = inputs['Text input'][0]['resource_path']
infile = open(infile_path, "r")
outfile.write(("Hello World {0}").format(infile.read()))
infile.close()
else:
outfile.write("Hello World")
outfile.close()
return True
def test_my_task(self, testcase):
inputs = {}
outputs = {
"Text output": [{"resource_types":"text/plain", "resource_path":testcase.new_available_path()}]
}
settings = {}
self.run_my_task(inputs, settings, outputs)
# The "Hello World" string should be written inside the output
with open(outputs["Text output"][0]['resource_path'], "r") as fp:
written_string = [l.strip() for l in fp.readlines()]
# There's only one line
testcase.assertEqual(len(written_string), 1)
# and it should be "Hello World"
testcase.assertEqual(written_string[0], "Hello World")
class HelloWorldMultiPort(RodanTask):
name = 'Hello World Multiple Ports'
author = 'Studio theYANG'
description = 'Concatenate all input files and append "Hello World MultiPort"'
settings = {}
enabled = True
category = "Test"
interactive = False
input_port_types = (
{
'name': 'Text input',
'minimum': 0,
'maximum': 10,
'resource_types': ['text/plain']
},
)
output_port_types = (
{
'name': 'Text output',
'minimum': 1,
'maximum': 10,
'resource_types': ['text/plain']
},
)
def run_my_task(self, inputs, settings, outputs):
concatenated = ""
for input_type in inputs:
for input in inputs[input_type]:
with open(input["resource_path"], "r") as infile:
concatenated += infile.read() + "\n"
for output_type in outputs:
for output in outputs[output_type]:
with open(output["resource_path"], "w") as outfile:
outfile.write(concatenated)
outfile.write("Hello World MultiPort")
def test_my_task(self, testcase):
inputs = {}
outputs = {
"Text output": [
{"resource_types":"text/plain", "resource_path":testcase.new_available_path()},
{"resource_types":"text/plain", "resource_path":testcase.new_available_path()},
{"resource_types":"text/plain", "resource_path":testcase.new_available_path()}
]
}
settings = {}
self.run_my_task(inputs, settings, outputs)
paths = [p["resource_path"] for p in outputs["Text output"]]
for path in paths:
# The "Hello World MultiPort" string should be written inside the output
with open(path, "r") as fp:
written_string = [l.strip() for l in fp.readlines()]
# There's only one line
testcase.assertEqual(len(written_string), 1)
# and it should be "Hello World MultiPort"
testcase.assertEqual(written_string[0], "Hello World MultiPort")
class HelloWorld3(RodanTask):
name = 'Hello World - Python3'
author = 'Alex Daigle'
description = 'Output string "Hello World", using a different celery queue. '
description += 'All you need is to specify the job_queue in the settings dictionary.'
settings = {'job_queue': 'Python3'}
enabled = True
category = "Test"
interactive = False
input_port_types = (
{'name': 'Text input', 'minimum': 0, 'maximum': 1, 'resource_types': ['text/plain']},
)
output_port_types = (
{'name': 'Text output', 'minimum': 1, 'maximum': 1, 'resource_types': ['text/plain']},
)
def run_my_task(self, inputs, settings, outputs):
outfile_path = outputs['Text output'][0]['resource_path']
outfile = open(outfile_path, "w")
if 'Text input' in inputs:
infile_path = inputs['Text input'][0]['resource_path']
infile = open(infile_path, "r")
outfile.write(("Hello World {0}").format(infile.read()))
infile.close()
else:
outfile.write("Hello World")
outfile.close()
return True
def test_my_task(self, testcase):
inputs = {}
outputs = {
"Text output": [{"resource_types":"text/plain", "resource_path":testcase.new_available_path()}]
}
settings = {}
self.run_my_task(inputs, settings, outputs)
# The "Hello World" string should be written inside the output
with open(outputs["Text output"][0]['resource_path'], "r") as fp:
written_string = [l.strip() for l in fp.readlines()]
# There's only one line
testcase.assertEqual(len(written_string), 1)
# and it should be "Hello World"
testcase.assertEqual(written_string[0], "Hello World")
# class HelloWorldInteractive(RodanTask):
# name = 'Hello World Interactive'
# author = 'Ryan Bannon'
# description = 'Interactive "Hello World"'
# settings = {}
# enabled = True
# category = 'Test'
# interactive = True
# input_port_types = (
# {'name': 'Text input', 'minimum': 0, 'maximum': 1, 'resource_types': ['text/plain']},
# )
# output_port_types = (
# {'name': 'Text output', 'minimum': 1, 'maximum': 1, 'resource_types': ['text/plain']},
# )
# def get_my_interface(self, inputs, settings):
# # Get input.
# input = 'there was no user input file'
# if 'Text input' in inputs:
# infile_path = inputs['Text input'][0]['resource_path']
# with open(infile_path, "r") as infile:
# input = infile.read()
# # Create data to pass.
# data = {'input': input}
# return ('interface.html', data)
# def run_my_task(self, inputs, settings, outputs):
# if '@done' not in settings:
# return self.WAITING_FOR_INPUT()
# outfile_path = outputs['Text output'][0]['resource_path']
# with open(outfile_path, "w") as outfile:
# outfile.write(("Hello World {0}").format(settings['@user_input']))
# return True
# def validate_my_user_input(self, inputs, settings, user_input):
# return { '@done': True, '@user_input': user_input['user_input'] }
# def my_error_information(self, exc, traceback):
# pass