'''
Library to handle the manipulation and generation of CWL tool
'''
# Import ------------------------------
# General libraries
import os
import six
import logging
# External libraries
import ruamel.yaml as ryaml
import cwlgen
logging.basicConfig(level=logging.INFO)
_LOGGER = logging.getLogger(__name__)
# Class(es) ------------------------------
[docs]def parse_cwl(cwl_path):
"""
Method that parses a CWL file and will a
:class:`cwlgen.Workflow` or :class:`cwlgen.CommandLineTool`.
Note: this will not import additional files.
:param cwl_path: PATH to the CWL file
:type cwl_path: str
:return: :class:`cwlgen.Workflow` | :class:`cwlgen.CommandLineTool`
"""
with open(cwl_path) as yaml_file:
cwl_dict = ryaml.load(yaml_file, Loader=ryaml.Loader)
return parse_cwl_dict(cwl_dict)
def parse_cwl_string(cwlstr):
cwl_dict = ryaml.load(cwlstr, Loader=ryaml.Loader)
return parse_cwl_dict(cwl_dict)
[docs]def parse_cwl_dict(cwl_dict):
"""
Method that parses a dictionary and will return a
:class:`cwlgen.Workflow` or :class:`cwlgen.CommandLineTool`.
:param cwl_dict: The dictionary to pass, must contain a 'class' field.
:type cwl_dict: :class:`dict`
:return: :class:`cwlgen.Workflow` | :class:`cwlgen.CommandLineTool`
"""
cl = cwl_dict.get("class")
if cl == "CommandLineTool":
return cwlgen.CommandLineTool.parse_dict(cwl_dict)
elif cl == "Workflow":
return cwlgen.Workflow.parse_dict(cwl_dict)
raise NotImplementedError("The CWL class '" + str(cl) + "' was not a recognised CWL class")