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_multiline_output(tmpdir): wf = WorkflowGenerator() wf.set_documentation('Testing a multiline\ndocumentation string') tmpfile = os.path.join(str(tmpdir), 'test.cwl') wf.save(tmpfile, mode='abs') with open(tmpfile) as f: contents = f.readlines() assert len(contents) > 7
def test_save_with_pack(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, mode='pack') with WorkflowGenerator() as wf2: wf2.load(wf_filename) # wf_filename shouldn't be in the steps library, because it is a # packed workflow assert len(wf2.steps_library.steps.keys()) == 0
def test_save_with_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_inputs(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) # make workflows contents relative to tests/data/tools directory actual = load_yaml(wf_filename, os.getcwd() + '/tests/data/tools') expected_wf_filename = 'tests/data/workflows/echo-wc.cwl' expected = load_yaml(expected_wf_filename, '../tools') assert actual == expected
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 with pytest.warns(DeprecationWarning): wf.save(wf_filename, mode='inline') # save with inline=True should result in a packed workflow (that isn't # loaded). with WorkflowGenerator() as wf2: wf2.load(wf_filename) # wf_filename shouldn't be in the steps library, because it is a # packed workflow assert len(wf2.steps_library.steps.keys()) == 0