From defaa234ca09f1c0a202a77d7660b75d3c12de02 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Fri, 16 Sep 2016 10:54:14 -0400 Subject: [PATCH] 10081: Custom extension of v1.0 schema to recognize RunInSingleContainer. --- sdk/cwl/arvados_cwl/__init__.py | 12 ++++++++++++ sdk/cwl/arvados_cwl/arv-cwl-schema.yml | 14 ++++++++++++++ sdk/cwl/setup.py | 1 + 3 files changed, 27 insertions(+) create mode 100644 sdk/cwl/arvados_cwl/arv-cwl-schema.yml diff --git a/sdk/cwl/arvados_cwl/__init__.py b/sdk/cwl/arvados_cwl/__init__.py index 1256260598..20bbc41bd3 100644 --- a/sdk/cwl/arvados_cwl/__init__.py +++ b/sdk/cwl/arvados_cwl/__init__.py @@ -15,6 +15,7 @@ import pkg_resources # part of setuptools from cwltool.errors import WorkflowException import cwltool.main import cwltool.workflow +import schema_salad import arvados import arvados.config @@ -364,6 +365,15 @@ def arg_parser(): # type: () -> argparse.ArgumentParser return parser +def add_arv_hints(): + cache = {} + res = pkg_resources.resource_stream(__name__, 'arv-cwl-schema.yml') + cache["https://w3id.org/cwl/arv-cwl-schema.yml"] = res.read() + res.close() + _, cwlnames, _, _ = cwltool.process.get_schema("v1.0") + _, extnames, _, _ = schema_salad.schema.load_schema("https://w3id.org/cwl/arv-cwl-schema.yml", cache=cache) + for n in extnames.names: + cwlnames.add_name("http://arvados.org/cwl#"+n, "", extnames.get_name(n, "")) def main(args, stdout, stderr, api_client=None): parser = arg_parser() @@ -373,6 +383,8 @@ def main(args, stdout, stderr, api_client=None): if (arvargs.create_template or arvargs.create_workflow or arvargs.update_workflow) and not arvargs.job_order: job_order_object = ({}, "") + add_arv_hints() + try: if api_client is None: api_client=arvados.api('v1', model=OrderedJsonModel()) diff --git a/sdk/cwl/arvados_cwl/arv-cwl-schema.yml b/sdk/cwl/arvados_cwl/arv-cwl-schema.yml new file mode 100644 index 0000000000..2e5044dc0a --- /dev/null +++ b/sdk/cwl/arvados_cwl/arv-cwl-schema.yml @@ -0,0 +1,14 @@ +$base: "http://arvados.org/cwl#" +$graph: +- name: RunInSingleContainer + type: record + doc: | + Indicates that a subworkflow should run in a single container + and not be scheduled as separate steps. + fields: + - name: class + type: string + doc: "Always 'arv:RunInSingleContainer'" + jsonldPredicate: + _id: "@type" + _type: "@vocab" diff --git a/sdk/cwl/setup.py b/sdk/cwl/setup.py index a6e4c5e294..b558744771 100644 --- a/sdk/cwl/setup.py +++ b/sdk/cwl/setup.py @@ -25,6 +25,7 @@ setup(name='arvados-cwl-runner', download_url="https://github.com/curoverse/arvados.git", license='Apache 2.0', packages=find_packages(), + package_data={'arvados_cwl': ['arv-cwl-schema.yml']}, scripts=[ 'bin/cwl-runner', 'bin/arvados-cwl-runner' -- 2.30.2