Skip to content

Commit 097e336

Browse files
committed
cwl:requirements needs cwlVersion >= v1.1
add cwltool:requirements for v1.0 users
1 parent e5a2f80 commit 097e336

9 files changed

+102
-10
lines changed

cwltool/executors.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,29 @@ def execute(self,
7878

7979
job_reqs = None
8080
if "https://w3id.org/cwl/cwl#requirements" in job_order_object:
81+
if process.metadata["cwlVersion"] == 'v1.0':
82+
raise WorkflowException(
83+
"`cwl:requirements` in the input object is not part of CWL "
84+
"v1.0. You can use `cwltool:requirements` instead; or you "
85+
"can set the cwlVersion to v1.1.0-dev1 or greater and re-run with "
86+
"--enable-dev.")
8187
job_reqs = job_order_object["https://w3id.org/cwl/cwl#requirements"]
88+
elif "http://commonwl.org/cwltool#requirements" in job_order_object:
89+
job_reqs = job_order_object["http://commonwl.org/cwltool#requirements"]
8290
elif ("cwl:defaults" in process.metadata
8391
and "https://w3id.org/cwl/cwl#requirements"
8492
in process.metadata["cwl:defaults"]):
93+
if process.metadata["cwlVersion"] == 'v1.0':
94+
raise WorkflowException(
95+
"`cwl:requirements` in the input object is not part of CWL "
96+
"v1.0. You can use `cwltool:requirements` instead; or you "
97+
"can set the cwlVersion to v1.1.0-dev1 or greater and re-run with "
98+
"--enable-dev.")
8599
job_reqs = process.metadata["cwl:defaults"]["https://w3id.org/cwl/cwl#requirements"]
100+
elif ("cwl:defaults" in process.metadata
101+
and "http://commonwl.org/cwltool#requirements"
102+
in process.metadata["cwl:defaults"]):
103+
job_reqs = process.metadata["cwl:defaults"]["http://commonwl.org/cwltool#requirements"]
86104
if job_reqs is not None:
87105
for req in job_reqs:
88106
process.requirements.append(req)

cwltool/extensions.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ $graph:
5656
refScope: 0
5757

5858

59-
- type: record
60-
name: TimeLimit
59+
- name: TimeLimit
60+
type: record
6161
inVocab: false
6262
extends: cwl:ProcessRequirement
6363
doc: |
@@ -79,8 +79,8 @@ $graph:
7979
time limit. Negative time limits are an error.
8080
8181
82-
- type: record
83-
name: WorkReuse
82+
- name: WorkReuse
83+
type: record
8484
inVocab: false
8585
extends: cwl:ProcessRequirement
8686
doc: |
@@ -105,8 +105,8 @@ $graph:
105105
#default: true
106106

107107

108-
- type: record
109-
name: NetworkAccess
108+
- name: NetworkAccess
109+
type: record
110110
inVocab: false
111111
extends: cwl:ProcessRequirement
112112
doc: |

tests/override/env-tool_requirement_override_default.yaml renamed to tests/override/env-tool_cwl-requirement_override_default.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
in: "hello test env"
2-
cwl:tool: env-tool.cwl
2+
cwl:tool: env-tool_v1.1.0-dev1.cwl
33
cwl:requirements:
44
- class: EnvVarRequirement
55
envDef:
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
in: "hello test env"
2+
cwl:tool: env-tool.cwl
3+
cwl:requirements: # prefixed, private extension
4+
- class: EnvVarRequirement
5+
envDef:
6+
- envName: TEST_ENV
7+
envValue: $(inputs.in)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
in: "hello test env"
2+
cwltool:requirements:
3+
- class: EnvVarRequirement
4+
envDef:
5+
- envName: TEST_ENV
6+
envValue: $(inputs.in)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
in: "hello test env"
2+
cwl:tool: env-tool.cwl
3+
cwltool:requirements: # prefixed, private extension
4+
- class: EnvVarRequirement
5+
envDef:
6+
- envName: TEST_ENV
7+
envValue: $(inputs.in)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class: CommandLineTool
2+
cwlVersion: v1.1.0-dev1
3+
inputs:
4+
in: string
5+
outputs:
6+
value: string
7+
8+
baseCommand: ["/bin/bash", "-c", 'echo {\"value\": \"$TEST_ENV\"}']
9+
10+
stdout: cwl.output.json

tests/test_override.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66

77
from cwltool.main import main
8-
8+
from cwltool import load_tool
99
from .util import get_data, needs_docker
1010

1111
override_parameters = [
@@ -45,18 +45,62 @@
4545
{"out": "zing hello6\n"}
4646
),
4747
([get_data('tests/override/env-tool.cwl'),
48-
get_data('tests/override/env-tool_requirement_override.yaml')],
48+
get_data('tests/override/env-tool_cwltool-requirement_override.yaml')],
49+
{"value": "hello test env"}
50+
),
51+
(["--enable-dev", get_data('tests/override/env-tool_v1.1.0-dev1.cwl'),
52+
get_data('tests/override/env-tool_cwl-requirement_override.yaml')],
53+
{"value": "hello test env"}
54+
),
55+
([get_data('tests/override/env-tool_cwltool-requirement_override_default.yaml')],
4956
{"value": "hello test env"}
5057
),
51-
([get_data('tests/override/env-tool_requirement_override_default.yaml')],
58+
(["--enable-dev",
59+
get_data('tests/override/env-tool_cwl-requirement_override_default.yaml')],
5260
{"value": "hello test env"}
5361
),
5462
]
5563

5664
@needs_docker
5765
@pytest.mark.parametrize('parameters,result', override_parameters)
5866
def test_overrides(parameters, result):
67+
load_tool.loaders = {}
5968
sio = StringIO()
6069

6170
assert main(parameters, stdout=sio) == 0
6271
assert json.loads(sio.getvalue()) == result
72+
73+
failing_override_parameters = [
74+
([get_data('tests/override/env-tool.cwl'),
75+
get_data('tests/override/env-tool_cwl-requirement_override.yaml')],
76+
"`cwl:requirements` in the input object is not part of CWL v1.0. You can "
77+
"use `cwltool:requirements` instead; or you can set the cwlVersion to "
78+
"v1.1.0-dev1 or greater and re-run with --enable-dev."
79+
),
80+
([get_data('tests/override/env-tool_v1.1.0-dev1.cwl'),
81+
get_data('tests/override/env-tool_cwl-requirement_override.yaml')],
82+
"Version 'v1.1.0-dev1' is a development or deprecated version.\n"
83+
" Update your document to a stable version (v1.0) or use --enable-dev to "
84+
"enable support for development and deprecated versions."
85+
),
86+
([get_data('tests/override/env-tool_cwl-requirement_override_default_wrongver.yaml')],
87+
"`cwl:requirements` in the input object is not part of CWL v1.0. You can "
88+
"use `cwltool:requirements` instead; or you can set the cwlVersion to "
89+
"v1.1.0-dev1 or greater and re-run with --enable-dev."
90+
),
91+
([get_data('tests/override/env-tool_cwl-requirement_override_default.yaml')],
92+
"Version 'v1.1.0-dev1' is a development or deprecated version.\n"
93+
" Update your document to a stable version (v1.0) or use --enable-dev to "
94+
"enable support for development and deprecated versions."
95+
),
96+
]
97+
98+
@needs_docker
99+
@pytest.mark.parametrize('parameters,expected_error', failing_override_parameters)
100+
def test_overrides_fails(parameters, expected_error):
101+
load_tool.loaders = {}
102+
sio = StringIO()
103+
104+
assert main(parameters, stderr=sio) == 1
105+
stderr = sio.getvalue()
106+
assert expected_error in stderr, stderr

0 commit comments

Comments
 (0)