Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/cwltool/tests/test_pack.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 import json | |
2 from ruamel import yaml | |
3 import os | |
4 import tempfile | |
5 from functools import partial | |
6 | |
7 from six import StringIO | |
8 import pytest | |
9 | |
10 import cwltool.pack | |
11 import cwltool.workflow | |
12 from cwltool import load_tool | |
13 from cwltool.load_tool import fetch_document, resolve_and_validate_document | |
14 from cwltool.main import main, make_relative, print_pack | |
15 from cwltool.pathmapper import adjustDirObjs, adjustFileObjs | |
16 from cwltool.resolver import tool_resolver | |
17 from cwltool.context import LoadingContext | |
18 | |
19 from .util import get_data, needs_docker | |
20 | |
21 | |
22 def test_pack(): | |
23 loadingContext, workflowobj, uri = fetch_document(get_data("tests/wf/revsort.cwl")) | |
24 loadingContext.do_update = False | |
25 loadingContext, uri = resolve_and_validate_document( | |
26 loadingContext, workflowobj, uri) | |
27 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
28 | |
29 with open(get_data("tests/wf/expect_packed.cwl")) as packed_file: | |
30 expect_packed = yaml.safe_load(packed_file) | |
31 | |
32 packed = cwltool.pack.pack(loadingContext.loader, processobj, uri, loadingContext.metadata) | |
33 adjustFileObjs(packed, partial(make_relative, os.path.abspath(get_data("tests/wf")))) | |
34 adjustDirObjs(packed, partial(make_relative, os.path.abspath(get_data("tests/wf")))) | |
35 | |
36 assert "$schemas" in packed | |
37 assert len(packed["$schemas"]) == len(expect_packed["$schemas"]) | |
38 del packed["$schemas"] | |
39 del expect_packed["$schemas"] | |
40 | |
41 assert packed == expect_packed | |
42 | |
43 | |
44 def test_pack_single_tool(): | |
45 loadingContext, workflowobj, uri = fetch_document( | |
46 get_data("tests/wf/formattest.cwl")) | |
47 loadingContext.do_update = False | |
48 loadingContext, uri = resolve_and_validate_document( | |
49 loadingContext, workflowobj, uri) | |
50 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
51 | |
52 packed = cwltool.pack.pack(loadingContext.loader, processobj, uri, loadingContext.metadata) | |
53 assert "$schemas" in packed | |
54 | |
55 def test_pack_rewrites(): | |
56 rewrites = {} | |
57 | |
58 loadingContext, workflowobj, uri = fetch_document(get_data("tests/wf/default-wf5.cwl")) | |
59 loadingContext.do_update = False | |
60 loadingContext, uri = resolve_and_validate_document( | |
61 loadingContext, workflowobj, uri) | |
62 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
63 | |
64 cwltool.pack.pack(loadingContext.loader, processobj, uri, loadingContext.metadata, rewrite_out=rewrites) | |
65 | |
66 assert len(rewrites) == 6 | |
67 | |
68 cwl_missing_version_paths = [ | |
69 "tests/wf/hello_single_tool.cwl", | |
70 "tests/wf/hello-workflow.cwl" | |
71 ] | |
72 | |
73 @pytest.mark.parametrize('cwl_path', cwl_missing_version_paths) | |
74 def test_pack_missing_cwlVersion(cwl_path): | |
75 """Ensure the generated pack output is not missing the `cwlVersion` in case of single tool workflow and single step workflow.""" | |
76 # Testing single tool workflow | |
77 loadingContext, workflowobj, uri = fetch_document(get_data(cwl_path)) | |
78 loadingContext.do_update = False | |
79 loadingContext, uri = resolve_and_validate_document( | |
80 loadingContext, workflowobj, uri) | |
81 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
82 | |
83 # generate pack output dict | |
84 packed = json.loads(print_pack(loadingContext.loader, processobj, uri, loadingContext.metadata)) | |
85 | |
86 assert packed["cwlVersion"] == 'v1.0' | |
87 | |
88 def test_pack_idempotence_tool(): | |
89 """Ensure that pack produces exactly the same document for an already packed CommandLineTool.""" | |
90 _pack_idempotently("tests/wf/hello_single_tool.cwl") | |
91 | |
92 def test_pack_idempotence_workflow(): | |
93 """Ensure that pack produces exactly the same document for an already packed workflow.""" | |
94 _pack_idempotently("tests/wf/count-lines1-wf.cwl") | |
95 | |
96 def _pack_idempotently(document): | |
97 loadingContext, workflowobj, uri = fetch_document( | |
98 get_data(document)) | |
99 loadingContext.do_update = False | |
100 loadingContext, uri = resolve_and_validate_document( | |
101 loadingContext, workflowobj, uri) | |
102 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
103 | |
104 # generate pack output dict | |
105 packed = json.loads(print_pack(loadingContext.loader, processobj, uri, loadingContext.metadata)) | |
106 | |
107 loadingContext, workflowobj, uri2 = fetch_document(packed) | |
108 loadingContext.do_update = False | |
109 loadingContext, uri2 = resolve_and_validate_document( | |
110 loadingContext, workflowobj, uri) | |
111 processobj = loadingContext.loader.resolve_ref(uri2)[0] | |
112 double_packed = json.loads(print_pack(loadingContext.loader, processobj, uri2, loadingContext.metadata)) | |
113 assert packed == double_packed | |
114 | |
115 cwl_to_run = [ | |
116 ("tests/wf/count-lines1-wf.cwl", | |
117 "tests/wf/wc-job.json", | |
118 False | |
119 ), | |
120 ("tests/wf/formattest.cwl", | |
121 "tests/wf/formattest-job.json", | |
122 True | |
123 ), | |
124 ] | |
125 | |
126 @needs_docker | |
127 @pytest.mark.parametrize('wf_path,job_path,namespaced', cwl_to_run) | |
128 def test_packed_workflow_execution(wf_path, job_path, namespaced, tmpdir): | |
129 loadingContext = LoadingContext() | |
130 loadingContext.resolver = tool_resolver | |
131 loadingContext, workflowobj, uri = fetch_document( | |
132 get_data(wf_path), loadingContext) | |
133 loadingContext.do_update = False | |
134 loadingContext, uri = resolve_and_validate_document( | |
135 loadingContext, workflowobj, uri) | |
136 processobj = loadingContext.loader.resolve_ref(uri)[0] | |
137 packed = json.loads(print_pack(loadingContext.loader, processobj, uri, loadingContext.metadata)) | |
138 | |
139 assert not namespaced or "$namespaces" in packed | |
140 | |
141 wf_packed_handle, wf_packed_path = tempfile.mkstemp() | |
142 with open(wf_packed_path, 'w') as temp_file: | |
143 json.dump(packed, temp_file) | |
144 | |
145 normal_output = StringIO() | |
146 packed_output = StringIO() | |
147 | |
148 normal_params = ['--outdir', str(tmpdir), get_data(wf_path), get_data(job_path)] | |
149 packed_params = ['--outdir', str(tmpdir), '--debug', wf_packed_path, get_data(job_path)] | |
150 | |
151 assert main(normal_params, stdout=normal_output) == 0 | |
152 assert main(packed_params, stdout=packed_output) == 0 | |
153 | |
154 assert json.loads(packed_output.getvalue()) == json.loads(normal_output.getvalue()) | |
155 | |
156 os.close(wf_packed_handle) | |
157 os.remove(wf_packed_path) |