Skip to content

Draft 4 support #75

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 143 commits into from
May 10, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
bcfc876
Improve README.rst
Jan 27, 2016
b86a0a5
Fix block indent
Jan 27, 2016
a5877dd
Fix spec link.
Jan 27, 2016
2749d4f
Start working on user guide
Jan 29, 2016
d382c03
Support RDF schemas defined in turtle.
Feb 2, 2016
9635289
Merge branch 'master' into userguide2
Feb 9, 2016
3a902d5
User guide WIP
Feb 10, 2016
4606c70
User guide work in progress.
Feb 11, 2016
a89ca87
Setup flake8 rules for this project...
jmchilton Feb 15, 2016
35addda
Add tox.ini file to run lint in isolated environment.
jmchilton Feb 15, 2016
dcf28e5
Add Travis profile for this project.
jmchilton Feb 15, 2016
33e6dc6
Add tox to .gitignore.
jmchilton Feb 15, 2016
0792960
Enable Python 2.6 to load schema salad...
jmchilton Feb 15, 2016
ce4db11
Add missing tests init file requires for tests.
jmchilton Feb 15, 2016
d94e603
Add unit tests to tox.
jmchilton Feb 15, 2016
803254c
Add more tox generated files to .gitignore.
jmchilton Feb 15, 2016
2def3a1
Add more travis testing.
jmchilton Feb 15, 2016
6f95dcf
Merge pull request #13 from jmchilton/lint
mr-c Feb 15, 2016
4c008ed
Merge pull request #14 from jmchilton/python26
mr-c Feb 15, 2016
1b0707c
More user guide work
Feb 16, 2016
f4fe262
add optional static typing
mr-c Feb 22, 2016
ea41264
fix comment formatting
mr-c Feb 22, 2016
89a10b5
break import cycle; add some py3 compat
mr-c Feb 22, 2016
206e1cd
backout some changes
mr-c Feb 22, 2016
4ee800a
py3 compat
mr-c Feb 23, 2016
cdafe99
restore py2.6 compat
mr-c Feb 23, 2016
b554957
fix py version test logic
mr-c Feb 23, 2016
55a6bac
drop non-functioning codepaths
mr-c Feb 23, 2016
ee31829
update travis+tox
mr-c Feb 23, 2016
57dad1e
travis doesn't have py3.5 yet
mr-c Feb 23, 2016
c4e4c90
Tidy versioned dependencies
mr-c Feb 23, 2016
66665d0
commas, sheesh
mr-c Feb 23, 2016
7983b1d
right, more quoting, okay
mr-c Feb 23, 2016
9ef003e
apply wisdom from @jmchilton
mr-c Feb 23, 2016
6e7c30b
Merge pull request #15 from common-workflow-language/static-typing
jmchilton Feb 23, 2016
26a3afb
run_test.sh add -l to list tests.
Mar 4, 2016
958d92b
drop unused import
mr-c Mar 7, 2016
e7ef703
update URL
mr-c Mar 7, 2016
12ae120
add classifiers to signal py3 compat
mr-c Mar 7, 2016
0c529ff
u+x setup.py
mr-c Mar 7, 2016
d181861
create universal wheel
mr-c Mar 7, 2016
1a8f81b
bump version
mr-c Mar 7, 2016
1aa3455
Merge pull request #16 from common-workflow-language/add-classifiers
mr-c Mar 7, 2016
99f4b26
fix typo
mr-c Mar 7, 2016
5bd04b1
Merge branch 'master' of github.com:common-workflow-language/common-w…
Mar 7, 2016
ff4f93e
Add tests for interaction of input valueFrom expression and different…
Mar 7, 2016
5ac4858
fix title on commonwl.org
mr-c Mar 13, 2016
dadd017
make this easier to run
mr-c Mar 15, 2016
a72ad5e
Merge pull request #191 from common-workflow-language/mr-c-patch-1
mr-c Mar 15, 2016
aeda57e
Add missing gittaggers.py to produce timestamped version numbers.
Mar 15, 2016
f9edc57
Update README.md
stain Mar 16, 2016
b2525a6
Update README.md
stain Mar 16, 2016
94d290b
Add ez_setup.py to bootstrap recent setuptools.
Mar 16, 2016
a147a2c
Add MANIFEST.in
Mar 16, 2016
04a956d
Take out :python_version and remove extras_require because of setuptools
Mar 16, 2016
56c33e2
Userguide wip
Mar 17, 2016
cc0f52b
Add margin to <pre> sections in generated documentation.
Mar 18, 2016
3e8878a
Exit gracefully on run_tests.sh -l
Mar 16, 2016
031f9bc
Expand discussion of input parameters, start discussing output parame…
Mar 23, 2016
960eb84
Discussion output parameters and capturing stdout.
Mar 23, 2016
521add7
Discuss parameter references.
Mar 23, 2016
101067c
Update tests for workflow scatter+valueFrom to test valueFrom on non-…
Mar 23, 2016
8582797
"Brand" link now uses CWL logo.
Mar 23, 2016
0914ea8
Merge branch 'master' into userguide2
Mar 23, 2016
15c994c
Create correct directory structure for site when running linkchecker.
Mar 24, 2016
72b175f
Add cwlpath.js
Mar 25, 2016
0ea827a
Merge branch 'master' into userguide2
Mar 25, 2016
53e9890
Move examples to draft-3/examples instead of mixing in with conforman…
Mar 25, 2016
f011a46
Fix to use relative paths.
Mar 25, 2016
ab7b1e4
Add section on DockerRequirement, begin discussion of arguments.
Mar 26, 2016
759e0f9
Add "arguments", array examples.
Mar 28, 2016
390dade
Talking about records
Mar 28, 2016
e42b078
Added cwlVersion to examples
Mar 29, 2016
d02a18a
Merge branch 'userguide2'
Mar 29, 2016
c47ad23
Update userguide input dependencies.
Mar 29, 2016
6530959
Add missing file.
Mar 29, 2016
984ab9c
Fix makedoc section header bug.
Mar 29, 2016
af7a419
Support id maps in preprocessing.
Mar 29, 2016
a01b16d
Branched draft-4 spec.
Mar 29, 2016
961f89d
Initial support for multiple versions, draft-4.
Mar 30, 2016
65f0654
Merge branch 'master' into draft-4
Apr 12, 2016
773c545
Select which schema to load based on version. Record document metada…
Apr 12, 2016
e864761
Merge commit 'a01b16d6f390280016d0957b8082687b515be2cf' into draft-4
Apr 12, 2016
2b00752
Turn idMap into mapSubject and mapPredicate.
Apr 12, 2016
e21aa9e
Add 'draft-4/salad/' from commit '2b0075278371cd47b3327961df60b133726…
Apr 12, 2016
bf8fbc8
Working on supporting multiple versions.
Apr 12, 2016
706218a
Merge commit 'e21aa9e8c2b0476b8ece06ff737825177f9ff953' into draft-4
Apr 12, 2016
3c05b12
Add mapSubject and mapPredicate annotations.
Apr 13, 2016
2da084e
Add mapSubject and mapPredicate to metaschema.
Apr 13, 2016
82bd2bc
Merge commit '2da084ef58f553039161cc68d6ecb8ab9372825f' into draft-4
Apr 13, 2016
9ac00d3
Load and run both draft-3 and draft-4, validated separately.
Apr 13, 2016
2444c8c
Merge commit '82bd2bcd192d13cc46f7e5e1a633fc700fdf774a' into draft-4
Apr 13, 2016
b0b7ce5
Bump schema salad dependency
Apr 13, 2016
bc5b0e3
Split out load_tool into its own file.
May 1, 2016
44283b4
Merge branch 'master' into draft-4
May 4, 2016
06a88a6
Delete before re-addding
May 4, 2016
74a1fb5
Merge commit '07c08cc4beef84f9490c30b6895b1fedf9ad1fa7' as 'cwltool/s…
May 4, 2016
07c08cc
Squashed 'cwltool/schemas/' content from commit ee1cf15
May 4, 2016
16a0843
Merge commit '646068a50ad577734b4a7c41e349a75f911a0996' into draft-4
May 4, 2016
646068a
Squashed 'cwltool/schemas/' changes from ee1cf15..d13091a
May 4, 2016
d2552c0
Merge commit '8665ea5ada7b9eda8b4a820016037bde8909b4a0' into draft-4
May 4, 2016
8665ea5
Squashed 'cwltool/schemas/' changes from d13091a..4e24484
May 4, 2016
f021126
Major refactor of document loading to validate draft-3 and draft-4 ac…
May 5, 2016
62ac273
Updater to draft-4.dev1 works, can run draft-2 with --enable-dev.
May 5, 2016
ad7c7d7
Merge commit '797fa95a0ecb2f7fbaeaa5c369be30ad9da2052e' into draft-4
May 5, 2016
797fa95
Squashed 'cwltool/schemas/' changes from 4e24484..d674994
May 5, 2016
7e814a1
Separate version checking from updater.
May 5, 2016
2bc2330
Merge commit '7e240decf6c17b8e02433f6ec3c676dbf1613b83' into draft-4
May 5, 2016
7e240de
Squashed 'cwltool/schemas/' changes from d674994..d4fd68c
May 5, 2016
2041cb7
Fix schema salad pin. Don't reload whole schema for every process ob…
May 5, 2016
30cffd7
Bump schema salad pin.
May 5, 2016
7ddcf0d
Merge commit '3805604d865f2ef900418b84fe08b27cbcbf5727' into draft-4
May 5, 2016
3805604
Squashed 'cwltool/schemas/' changes from d4fd68c..ab086ad
May 5, 2016
dec31c6
Merge commit 'fb85be5a2c3d38ce7eab38922f58a918f700ee8b' into draft-4
May 5, 2016
fb85be5
Squashed 'cwltool/schemas/' changes from ab086ad..c344fa4
May 5, 2016
348e7fb
WIP support validating draft-2
May 5, 2016
b3a1d18
Merge commit '8c5c540b446c5b0af30fc54db8312c4fb49ff91d' into draft-4
May 5, 2016
8c5c540
Squashed 'cwltool/schemas/' changes from c344fa4..19ca76c
May 5, 2016
346458d
Need to apply update to draft-2 to handle import and include.
May 5, 2016
93f6c70
Merge commit 'f3aab8ff92ac82d492cfaf3c80993fe4ea1b6423' into draft-4
May 5, 2016
f3aab8f
Squashed 'cwltool/schemas/' changes from 19ca76c..fd37b4b
May 5, 2016
98731e4
Merge commit '630ad5a7e8396a9ada41d60c44a31e3538ffc07a' into draft-4
May 5, 2016
630ad5a
Squashed 'cwltool/schemas/' changes from fd37b4b..d5c4ef4
May 5, 2016
94f9d2c
Almost passing draft-2 conformance with validation.
May 5, 2016
5423a1d
Merge commit '8d8df37758840ba726c1a051b5c28e7745565e1f' into draft-4
May 5, 2016
8d8df37
Squashed 'cwltool/schemas/' changes from d5c4ef4..b31130f
May 5, 2016
42b9e3d
Merge commit '7d44db4849525e3a5512d0c1520ed4a2dcee58d8' into draft-4
May 5, 2016
7d44db4
Squashed 'cwltool/schemas/' changes from b31130f..e8a458b
May 5, 2016
a3f1490
Merge commit '091d3afcd8bcd4c5fd86fb0adb68d357116f3cd9' into draft-4
May 5, 2016
091d3af
Squashed 'cwltool/schemas/' changes from e8a458b..6346fdf
May 5, 2016
0f5761e
Merge commit '0a4b218b63c90fea5808dd7fa456b593e4439c6a' into draft-4
May 5, 2016
0a4b218
Squashed 'cwltool/schemas/' changes from 6346fdf..712bf65
May 5, 2016
7a3e9ce
Merge commit '5b37cf23199b7419956cfd8f482a8de76066d876' into draft-4
May 6, 2016
5b37cf2
Squashed 'cwltool/schemas/' changes from 712bf65..ca31436
May 6, 2016
3121bcd
Merge commit 'b78d1ab89c7e5a93101faf691b574907e4e50f19' into draft-4
May 6, 2016
b78d1ab
Squashed 'cwltool/schemas/' changes from ca31436..c4cfafb
May 6, 2016
668e6ca
Fix --print-pre to print document prior to validation. Bump salad ve…
May 6, 2016
4cadc61
Squashed 'cwltool/schemas/' changes from c4cfafb..f027dbb
May 6, 2016
f1901b9
Merge commit '4cadc611dfced4e1a818e6afbb215270fc2561b3' into draft-4
May 6, 2016
2231714
type and lint cleanups
mr-c May 10, 2016
85003b1
Merge remote-tracking branch 'origin/master' into draft-4-pa
mr-c May 10, 2016
ac3037a
fix exception message
mr-c May 10, 2016
6408a40
odd, where did that come from?
mr-c May 10, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cwltool/cwlrdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from typing import Any, Union, Dict, IO

def makerdf(workflow, wf, ctx):
# type: (str, Dict[str,Any], Loader.ContextType) -> Graph
# type: (Union[str, unicode], Dict[str,Any], Loader.ContextType) -> Graph
prefixes = {}
for k,v in ctx.iteritems():
if isinstance(v, dict):
Expand All @@ -31,7 +31,7 @@ def makerdf(workflow, wf, ctx):
return g

def printrdf(workflow, wf, ctx, sr, stdout):
# type: (str, Dict[str,Any], Loader.ContextType, str, IO[Any]) -> None
# type: (Union[str, unicode], Dict[str, Any], Loader.ContextType, str, IO[Any]) -> None
stdout.write(makerdf(workflow, wf, ctx).serialize(format=sr))

def lastpart(uri): # type: (Any) -> str
Expand Down Expand Up @@ -172,7 +172,7 @@ def dot_without_parameters(g, stdout): # type: (Graph, IO[Any]) -> None


def printdot(workflow, wf, ctx, stdout, include_parameters=False):
# type: (str, Dict[str,Any], Loader.ContextType, Any, bool) -> None
# type: (Union[str, unicode], Dict[str, Any], Loader.ContextType, Any, bool) -> None
g = makerdf(workflow, wf, ctx)

stdout.write("digraph {")
Expand Down
10 changes: 6 additions & 4 deletions cwltool/factory.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from . import main
from . import load_tool
from . import workflow
import os
from .process import Process
Expand All @@ -23,8 +24,9 @@ def __init__(self, makeTool=workflow.defaultMakeTool,
self.executor = executor
self.execkwargs = execkwargs

def make(self, cwl, frag=None, debug=False):
l = main.load_tool(cwl, False, True, self.makeTool, debug, urifrag=frag)
if type(l) == int:
def make(self, cwl):
"""Instantiate a CWL object from a CWl document."""
load = load_tool.load_tool(cwl, self.makeTool)
if isinstance(load, int):
raise Exception("Error loading tool")
return Callable(l, self)
return Callable(load, self)
151 changes: 151 additions & 0 deletions cwltool/load_tool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# pylint: disable=unused-import
"""Loads a CWL document."""

import os
import logging
import re
import urlparse
from schema_salad.ref_resolver import Loader
import schema_salad.validate as validate
import schema_salad.schema as schema
from avro.schema import Names
from . import update
from . import process
from .process import Process, shortname
from .errors import WorkflowException
from typing import Any, Callable, cast, Dict, Tuple, Union


def fetch_document(argsworkflow):
# type: (Union[str, unicode, dict[unicode, Any]]) -> Tuple[Loader, Dict[unicode, Any], unicode]
"""Retrieve a CWL document."""
document_loader = Loader({"cwl": "https://w3id.org/cwl/cwl#", "id": "@id"})

uri = None # type: unicode
workflowobj = None # type: Dict[unicode, Any]
if isinstance(argsworkflow, (str, unicode)):
split = urlparse.urlsplit(argsworkflow)
if split.scheme:
uri = argsworkflow
else:
uri = "file://" + os.path.abspath(argsworkflow)
fileuri = urlparse.urldefrag(uri)[0]
workflowobj = document_loader.fetch(fileuri)
elif isinstance(argsworkflow, dict):
workflowobj = argsworkflow
uri = "#" + str(id(argsworkflow))
else:
raise validate.ValidationException(
"Must be URI or object: '%s'" % argsworkflow)

return document_loader, workflowobj, uri


def validate_document(document_loader, workflowobj, uri,
enable_dev=False, strict=True, preprocess_only=False):
# type: (Loader, Dict[unicode, Any], unicode, bool, bool, bool) -> Tuple[Loader, Names, Any, Dict[str, str], unicode]
"""Validate a CWL document."""
jobobj = None
if "cwl:tool" in workflowobj:
jobobj = workflowobj
uri = urlparse.urljoin(uri, jobobj["cwl:tool"])
del jobobj["cwl:tool"]
workflowobj = fetch_document(uri)[1]

if isinstance(workflowobj, list):
workflowobj = {
"$graph": workflowobj
}

fileuri = urlparse.urldefrag(uri)[0]

if "cwlVersion" in workflowobj:
workflowobj["cwlVersion"] = re.sub(
r"^(?:cwl:|https://w3id.org/cwl/cwl#)", "",
workflowobj["cwlVersion"])
else:
workflowobj["cwlVersion"] = "draft-2"

if workflowobj["cwlVersion"] == "draft-2":
workflowobj = update._draft2toDraft3dev1(
workflowobj, document_loader, uri, update_steps=False)
if "@graph" in workflowobj:
workflowobj["$graph"] = workflowobj["@graph"]
del workflowobj["@graph"]

(document_loader, avsc_names) = \
process.get_schema(workflowobj["cwlVersion"])[:2]

if isinstance(avsc_names, Exception):
raise avsc_names

workflowobj["id"] = fileuri
processobj, metadata = document_loader.resolve_all(workflowobj, fileuri)

if preprocess_only:
return document_loader, avsc_names, processobj, metadata, uri

document_loader.validate_links(processobj)
schema.validate_doc(avsc_names, processobj, document_loader, strict)

if not metadata:
metadata = {"$namespaces": processobj.get("$namespaces", {}),
"$schemas": processobj.get("$schemas", []),
"cwlVersion": processobj["cwlVersion"]}

if metadata.get("cwlVersion") != update.LATEST:
processobj = update.update(
processobj, document_loader, fileuri, enable_dev, metadata)

if jobobj:
metadata["cwl:defaults"] = jobobj

return document_loader, avsc_names, processobj, metadata, uri


def make_tool(document_loader, avsc_names, processobj, metadata, uri, makeTool,
kwargs):
# type: (Loader, Names, Dict[str, Any], Dict[str, Any], unicode, Callable[..., Process], Dict[str, Any]) -> Process
"""Make a Python CWL object."""
resolveduri = document_loader.resolve_ref(uri)[0]

if isinstance(resolveduri, list):
if len(resolveduri) == 1:
processobj = resolveduri[0]
else:
raise WorkflowException(
u"Tool file contains graph of multiple objects, must specify "
"one of #%s" % ", #".join(
urlparse.urldefrag(i["id"])[1] for i in resolveduri
if "id" in i))
else:
processobj = cast(Dict[str, Any], resolveduri)

kwargs = kwargs.copy()
kwargs.update({
"makeTool": makeTool,
"loader": document_loader,
"avsc_names": avsc_names,
"metadata": metadata
})
tool = makeTool(processobj, **kwargs)

if "cwl:defaults" in metadata:
jobobj = metadata["cwl:defaults"]
for inp in tool.tool["inputs"]:
if shortname(inp["id"]) in jobobj:
inp["default"] = jobobj[shortname(inp["id"])]

return tool


def load_tool(argsworkflow, makeTool, kwargs=None,
enable_dev=False,
strict=True):
# type: (Union[str,unicode,dict[unicode,Any]], Callable[...,Process], Dict[str, Any], bool, bool) -> Any
document_loader, workflowobj, uri = fetch_document(argsworkflow)
document_loader, avsc_names, processobj, metadata, uri = validate_document(
document_loader, workflowobj, uri, enable_dev=enable_dev,
strict=strict)
return make_tool(document_loader, avsc_names, processobj, metadata, uri,
makeTool, kwargs if kwargs else {})
Loading