def test_save_with_inline_tools(self, tmpdir): wf = WorkflowGenerator() wf.load('tests/data/tools') wf.set_documentation('Counts words of a message via echo and wc') wfmessage = wf.add_input(wfmessage='string') echoed = wf.echo(message=wfmessage) wced = wf.wc(file2count=echoed) wf.add_outputs(wfcount=wced) wf_filename = tmpdir.join('echo-wc.cwl').strpath wf.save(wf_filename, inline=True) # Strip absolute paths from ids actual = load_yaml(wf_filename) expected_wf_filename = 'tests/data/workflows/echo-wc_inline.cwl' expected = load_yaml(expected_wf_filename) # Random id's will differ and that's ok, so just remove them def remove_random_ids(step): del(step['outputs'][0]['outputBinding']['glob']) del(step['stdout']) remove_random_ids(actual['steps']['wc']['run']) remove_random_ids(actual['steps']['echo']['run']) remove_random_ids(expected['steps']['wc']['run']) remove_random_ids(expected['steps']['echo']['run']) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_print_wf_absolute_paths(self, tmpdir): wf = setup_workflowgenerator(tmpdir) wf.load(steps_dir=tmpdir.join('tools').strpath) wf.set_documentation('Counts words of a message via echo and wc') wfmessage = wf.add_input(wfmessage='string') echoed = wf.echo(message=wfmessage) wced = wf.wc(file2count=echoed) wf.add_outputs(wfcount=wced) actual = wf.__str__() # make workflows contents relative to tests/data/tools directory actual = yaml.safe_load(actual) def fix_path(path): res = path.rsplit(os.sep, 2) res[0] = '..' return (os.sep).join(res) actual['steps']['echo']['run'] = \ fix_path(actual['steps']['echo']['run']) actual['steps']['wc']['run'] = fix_path(actual['steps']['wc']['run']) expected_wf_filename = 'tests/data/workflows/echo-wc.cwl' expected = load_yaml(expected_wf_filename) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_save_with_workflow(self, tmpdir): wf = setup_workflowgenerator(tmpdir) wf.load(tmpdir.join('workflows').strpath) wfmessage = wf.add_input(wfmessage='string') wced = wf.echo_wc(wfmessage=wfmessage) wf.add_outputs(wfcount=wced) wf_filename = tmpdir.join('echo-wc.cwl').strpath wf.save(wf_filename, mode='rel') # make workflows contents relative to tests/data/tools directory actual = load_yaml(wf_filename) expected_wf_filename = 'tests/data/echo-wc.workflowstep.cwl' expected = load_yaml(expected_wf_filename) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_save_with_wd(self, tmpdir): wf = WorkflowGenerator(working_dir=tmpdir.join('wd').strpath) wf.load('tests/data/tools') wfmessage = wf.add_input(wfmessage='string') echoed = wf.echo(message=wfmessage) wced = wf.wc(file2count=echoed) wf.add_outputs(wfcount=wced) wf_filename = tmpdir.join('echo-wc.cwl').strpath wf.save(wf_filename, mode='wd') actual = load_yaml(wf_filename) expected_wf_filename = 'tests/data/workflows/echo-wc_wd.cwl' expected = load_yaml(expected_wf_filename) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_save_with_tools(self, tmpdir): wf = setup_workflowgenerator(tmpdir) wf.load(steps_dir=tmpdir.join('tools').strpath) wf.set_documentation('Counts words of a message via echo and wc') wfmessage = wf.add_input(wfmessage='string') echoed = wf.echo(message=wfmessage) wced = wf.wc(file2count=echoed) wf.add_outputs(wfcount=wced) wf_filename = tmpdir.join('workflows/echo-wc.cwl').strpath wf.save(wf_filename, mode='rel') # make workflows contents relative to tests/data/tools directory actual = load_yaml(wf_filename) expected_wf_filename = 'tests/data/workflows/echo-wc.cwl' expected = load_yaml(expected_wf_filename) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_save_with_scattered_step(self, tmpdir): wf = setup_workflowgenerator(tmpdir) wf.load(tmpdir.join('tools').strpath) msgs = wf.add_input(wfmessages='string[]') echoed = wf.echo( message=msgs, scatter='message', scatter_method='nested_crossproduct') wf.add_outputs(out_files=echoed) wf_filename = tmpdir.join('echo-scattered.cwl').strpath wf.save(wf_filename, mode='rel') # make workflows contents relative to tests/data/tools directory actual = load_yaml(wf_filename) expected_wf_filename = 'tests/data/echo.scattered.cwl' expected = load_yaml(expected_wf_filename) print(' actual:', actual) print('expected:', expected) assert actual == expected
def test_load_yaml_packed(datafiles): cwl_file = str(datafiles.listdir()[0]) assert {} == load_yaml(cwl_file)