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

Commit f002b88

Browse files
authored
Merge pull request #3 from joezuntz/master
Export DockerRequirement and always include input/output dicts
2 parents 109977f + 565886e commit f002b88

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

cwlgen/__init__.py

+31-8
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,14 @@ def export(self, outfile=None):
102102
if self.doc:
103103
cwl_tool['doc'] = literal(self.doc)
104104
# Add Inputs
105-
if self.inputs:
106-
cwl_tool['inputs'] = {}
107-
for in_param in self.inputs:
108-
cwl_tool['inputs'][in_param.id] = in_param.get_dict()
105+
cwl_tool['inputs'] = {}
106+
for in_param in self.inputs:
107+
cwl_tool['inputs'][in_param.id] = in_param.get_dict()
109108

110109
# Add Outputs
111-
if self.outputs:
112-
cwl_tool['outputs'] = {}
113-
for out_param in self.outputs:
114-
cwl_tool['outputs'][out_param.id] = out_param.get_dict()
110+
cwl_tool['outputs'] = {}
111+
for out_param in self.outputs:
112+
cwl_tool['outputs'][out_param.id] = out_param.get_dict()
115113

116114
# If metadata are present in the description
117115
if getattr(self, 'metadata', None):
@@ -122,6 +120,14 @@ def export(self, outfile=None):
122120
for k, v in self.namespaces.__dict__.items():
123121
if '$' not in v:
124122
cwl_tool[self.namespaces.name][k] = v
123+
124+
# Add requirements.
125+
requirements = {}
126+
for requirement in self.requirements:
127+
requirement.add(requirements)
128+
129+
if requirements:
130+
cwl_tool['requirements'] = requirements
125131

126132
# Write CWL file in YAML
127133
if outfile is None:
@@ -367,6 +373,13 @@ def __init__(self, req_class):
367373
'''
368374
self.req_class = req_class
369375

376+
def add(self, tool):
377+
tool[self.req_class] = self._to_dict()
378+
379+
def _to_dict(self):
380+
raise NotImplementedError("Requirement subclass {} not fully implemented".format(
381+
self.req_class))
382+
370383

371384
class InlineJavascriptReq(Requirement):
372385
'''
@@ -412,6 +425,16 @@ def __init__(self, docker_pull=None, docker_load=None, docker_file=None,
412425
self.dockerImageId = docker_image_id
413426
self.dockerOutputDir = docker_output_dir
414427

428+
def _to_dict(self):
429+
"""
430+
Add this requirement to a dictionary description of a
431+
tool generated in an export method.
432+
433+
"""
434+
return {p:v for p,v in vars(self).items() if p.startswith('docker') and v is not None}
435+
436+
437+
415438

416439
class Namespaces(object):
417440
"""

test/test_unit_cwlgen.py

+6
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ def test_init(self):
208208
self.assertEqual(self.dock_req.dockerImageId, 'id')
209209
self.assertEqual(self.dock_req.dockerOutputDir, 'dir')
210210

211+
def test_export(self):
212+
d = self.dock_req._to_dict()
213+
assert d == dict(dockerPull='pull', dockerLoad='load',\
214+
dockerFile='file', dockerImport='import',\
215+
dockerImageId='id', dockerOutputDir='dir')
216+
211217

212218
########### Main ###########
213219

0 commit comments

Comments
 (0)