Esempio n. 1
0
    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
Esempio n. 2
0
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
Esempio n. 3
0
    def test_save_with_relative_url(self, tmpdir):
        wf = WorkflowGenerator()
        url = 'https://raw.githubusercontent.com/NLeSC/scriptcwl/master/' \
              'tests/data/tools/echo.cwl'
        wf.load(step_file=url)

        wfmessage = wf.add_input(wfmessage='string')
        echoed = wf.echo(message=wfmessage)
        wf.add_outputs(echoed=echoed)

        wf_filename = tmpdir.join('echo-wf.cwl').strpath
        wf.save(wf_filename, mode='rel')
Esempio n. 4
0
    def test_add_shebang_to_saved_cwl_file(self, tmpdir):
        wf = WorkflowGenerator()
        wf.load('tests/data/tools')

        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)

        with open(wf_filename) as f:
            shebang = f.readline()

        assert shebang == '#!/usr/bin/env cwl-runner\n'
Esempio n. 5
0
    def test_save_with_wd_no_wd(self, tmpdir):
        wf = WorkflowGenerator()

        assert wf.get_working_dir() is None

        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

        with pytest.raises(ValueError):
            wf.save(wf_filename, mode='wd')
Esempio n. 6
0
    def test_save_with_workflow(self, tmpdir):
        wf = WorkflowGenerator()
        wf.load('tests/data/workflows')

        wfmessage = wf.add_inputs(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)

        # make workflows contents relative to tests/data/tools directory
        actual = load_yaml(wf_filename, os.getcwd() + '/tests/data/workflows')
        expected_wf_filename = 'tests/data/echo-wc.workflowstep.cwl'
        expected = load_yaml(expected_wf_filename, '../workflows')

        assert actual == expected
Esempio n. 7
0
    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
Esempio n. 8
0
    def test_save_with_scattered_step(self, tmpdir):
        wf = WorkflowGenerator()
        wf.load('tests/data/tools')

        msgs = wf.add_inputs(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)

        # make workflows contents relative to tests/data/tools directory
        actual = load_yaml(wf_filename, os.getcwd() + '/tests/data/tools')
        expected_wf_filename = 'tests/data/echo.scattered.cwl'
        expected = load_yaml(expected_wf_filename, '../tools')

        assert actual == expected
Esempio n. 9
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
Esempio n. 10
0
    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
Esempio n. 11
0
    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