Skip to content
This repository was archived by the owner on Jun 9, 2020. It is now read-only.

Commit fc563e8

Browse files
authored
Merge pull request #8 from dleehr/workflow-requirements
Support for workflow requirements
2 parents ab021ee + a1055c5 commit fc563e8

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

cwlgen/__init__.py

+15
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,12 @@ def __init__(self, expression_lib=None):
337337
Requirement.__init__(self, 'InlineJavascriptRequirement')
338338
self.expressionLib = expression_lib
339339

340+
def _to_dict(self):
341+
if self.expressionLib:
342+
return {'expressionLib': [self.expressionLib]}
343+
else:
344+
return {}
345+
340346

341347
class DockerRequirement(Requirement):
342348
'''
@@ -377,6 +383,15 @@ def _to_dict(self):
377383
return {p: v for p, v in vars(self).items() if p.startswith('docker') and v is not None}
378384

379385

386+
class SubworkflowFeatureRequirement(Requirement):
387+
388+
def __init__(self):
389+
Requirement.__init__(self, 'SubworkflowFeatureRequirement')
390+
391+
def _to_dict(self):
392+
return dict()
393+
394+
380395
class Namespaces(object):
381396
"""
382397
Define different namespace for the description.

cwlgen/workflow.py

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def __init__(self):
1515
self.steps = []
1616
self.inputs = []
1717
self.outputs = []
18+
self.requirements = []
1819
self._path = None
1920

2021

@@ -47,6 +48,14 @@ def export(self, outfile=None):
4748
for out in self.outputs:
4849
cwl_workflow['outputs'][out.id] = out.get_dict()
4950

51+
# Add requirements.
52+
requirements = {}
53+
for requirement in self.requirements:
54+
requirement.add(requirements)
55+
56+
if requirements:
57+
cwl_workflow['requirements'] = requirements
58+
5059
# Write CWL file in YAML
5160
if outfile is None:
5261
six.print_(CWL_SHEBANG, "\n", sep='')

test/test_unit_cwlgen.py

+23
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,18 @@ def test_init(self):
193193
self.assertEqual(self.js_req.req_class, 'InlineJavascriptRequirement')
194194
self.assertEqual(self.js_req.expressionLib, 'expression')
195195

196+
def test_add(self):
197+
tool = {}
198+
self.js_req.add(tool)
199+
self.assertEqual(tool, {'InlineJavascriptRequirement': {'expressionLib': ['expression']}})
200+
201+
def test_add_without_lib(self):
202+
tool = {}
203+
req = cwlgen.InlineJavascriptReq()
204+
req.add(tool)
205+
self.assertEqual(tool, {'InlineJavascriptRequirement': {}})
206+
207+
196208
class TestDockerRequirement(unittest.TestCase):
197209

198210
def setUp(self):
@@ -215,6 +227,17 @@ def test_export(self):
215227
dockerImageId='id', dockerOutputDir='dir')
216228

217229

230+
class TestSubworkflowFeatureRequirement(unittest.TestCase):
231+
232+
def setUp(self):
233+
self.req = cwlgen.SubworkflowFeatureRequirement()
234+
235+
def test_add(self):
236+
tool = {}
237+
self.req.add(tool)
238+
self.assertEqual(tool, {'SubworkflowFeatureRequirement': {}})
239+
240+
218241
########### Main ###########
219242

220243
if __name__ == "__main__":

test/test_unit_workflow.py

+14
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,19 @@ def test_generates_workflow_int_inputs(self):
8686
self.assertEqual(expected, generated)
8787

8888

89+
def test_add_requirements(self):
90+
w = cwlgen.Workflow()
91+
req = cwlgen.InlineJavascriptReq()
92+
w.requirements.append(req)
93+
generated = self.capture_tempfile(w.export)
94+
expected = b"""#!/usr/bin/env cwl-runner
8995
96+
class: Workflow
97+
cwlVersion: v1.0
98+
inputs: {}
99+
outputs: {}
100+
requirements:
101+
InlineJavascriptRequirement: {}
102+
"""
103+
self.assertEqual(expected, generated)
90104

0 commit comments

Comments
 (0)