Skip to content

Commit ca503e3

Browse files
committed
switch to ruamel.yaml, use C loader if available, only load safely
1 parent 531358e commit ca503e3

File tree

7 files changed

+21
-12
lines changed

7 files changed

+21
-12
lines changed

cwltool/cwltest.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@
77
import sys
88
import shutil
99
import tempfile
10-
import yaml
11-
import yaml.scanner
10+
import ruamel.yaml as yaml
11+
try:
12+
from ruamel.yaml import CSafeLoader as SafeLoader
13+
except ImportError:
14+
from ruamel.yaml import SafeLoader
15+
1216
import pipes
1317
import logging
1418
import schema_salad.ref_resolver
@@ -86,7 +90,7 @@ def run_test(args, i, t): # type: (argparse.Namespace, Any, Dict[str,str]) -> i
8690
t["job"]]
8791

8892
outstr = subprocess.check_output(test_command)
89-
out = yaml.load(outstr)
93+
out = yaml.load(outstr, Loader=SafeLoader)
9094
if not isinstance(out, dict):
9195
raise ValueError("Non-dict value parsed from output string.")
9296
except ValueError as v:
@@ -155,7 +159,7 @@ def main(): # type: () -> int
155159
return 1
156160

157161
with open(args.test) as f:
158-
tests = yaml.load(f)
162+
tests = yaml.load(f, Loader=SafeLoader)
159163

160164
failures = 0
161165
unsupported = 0

cwltool/draft2tool.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
import os
77
from .pathmapper import PathMapper, DockerPathMapper
88
from .job import CommandLineJob
9-
import yaml
9+
import ruamel.yaml as yaml
10+
try:
11+
from ruamel.yaml import CSafeLoader as SafeLoader
12+
except ImportError:
13+
from ruamel.yaml import SafeLoader
1014
import glob
1115
import logging
1216
import hashlib
@@ -242,7 +246,7 @@ def collect_output_ports(self, ports, builder, outdir):
242246
custom_output = os.path.join(outdir, "cwl.output.json")
243247
if builder.fs_access.exists(custom_output):
244248
with builder.fs_access.open(custom_output, "r") as f:
245-
ret = yaml.load(f)
249+
ret = yaml.load(f, Loader=SafeLoader)
246250
_logger.debug(u"Raw output from %s: %s", custom_output, json.dumps(ret, indent=4))
247251
adjustFileObjs(ret, remove_hostfs)
248252
adjustFileObjs(ret,

cwltool/expression.py

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import logging
66
import os
77
from .errors import WorkflowException
8-
import yaml
98
import schema_salad.validate as validate
109
import schema_salad.ref_resolver
1110
from . import sandboxjs

cwltool/job.py

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import tempfile
55
import glob
66
import json
7-
import yaml
87
import logging
98
import sys
109
import requests

cwltool/main.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
import tempfile
1313
import schema_salad.jsonld_context
1414
import schema_salad.makedoc
15-
import yaml
15+
import ruamel.yaml as yaml
16+
try:
17+
from ruamel.yaml import CSafeLoader as SafeLoader
18+
except ImportError:
19+
from ruamel.yaml import SafeLoader
1620
import urlparse
1721
from . import process
1822
from . import job
@@ -413,7 +417,7 @@ def load_job_order(args, t, parser, stdin, print_input_deps=False, relative_deps
413417
if len(args.job_order) == 1 and args.job_order[0][0] != "-":
414418
job_order_file = args.job_order[0]
415419
elif len(args.job_order) == 1 and args.job_order[0] == "-":
416-
job_order_object = yaml.load(stdin)
420+
job_order_object = yaml.load(stdin, Loader=SafeLoader)
417421
job_order_object, _ = loader.resolve_all(job_order_object, "")
418422
else:
419423
job_order_file = None

cwltool/process.py

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import json
55
import schema_salad.validate as validate
66
import copy
7-
import yaml
87
import copy
98
import logging
109
import pprint

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
'schemas/draft-3/salad/schema_salad/metaschema/*.md']},
3333
install_requires=[
3434
'requests',
35-
'PyYAML',
35+
'ruamel.yaml',
3636
'rdflib >= 4.1.0',
3737
'rdflib-jsonld >= 0.3.0',
3838
'shellescape',

0 commit comments

Comments
 (0)