Example #1
0
async def test_api_post():
    cromwell = api.CromwellAPI(server="http://httpbin:80", version="v1")

    data = {
        "workflowSource": None,
        "workflowUrl": "http://my-test-url/hello.wdl",
        "workflowInputs": "{'hello.text': 'Hello, world!'}",
        "workflowOptions": "{}",
        "labels": "{}",
    }

    # pylint: disable=W0212
    (code, response) = await cromwell._api_call("/post", data=data, method="POST")

    assert code == 200
    assert response.get("files", {}).get("labels") == "{}"
    assert (
        response.get("files", {}).get("workflowInputs")
        == "{'hello.text': 'Hello, world!'}"
    )
    assert (
        response.get("files", {}).get("workflowUrl") == "http://my-test-url/hello.wdl"
    )
    assert response.get("files", {}).get("workflowOptions") == "{}"
    assert "workflowSource" not in response.get("files", {})

    await cromwell.close()
Example #2
0
async def test_errors_on_post_workflows_no_workflow_source():
    cromwell = api.CromwellAPI(server="http://httpbin", version="v1")

    with pytest.raises(SystemExit):
        await cromwell.post_workflows(workflowUrl=None, workflowSource=None)

    await cromwell.close()
Example #3
0
async def test_post_workflows_empty_params():
    cromwell = api.CromwellAPI(
        server="http://httpbin:80", version="v1", route_override="/post"
    )

    await cromwell.post_workflows(workflowUrl="https://foo/bar")
    await cromwell.close()
Example #4
0
async def test_errors_on_bad_response():
    cromwell = api.CromwellAPI(server="http://httpbin", version="v1")

    # pylint: disable=W0212
    with pytest.raises(SystemExit):
        await cromwell._api_call("/status/404")

    await cromwell.close()
Example #5
0
async def test_errors_on_unreachable_host():
    cromwell = api.CromwellAPI(server="http://foo", version="v1")

    # pylint: disable=W0212
    with pytest.raises(SystemExit):
        await cromwell._api_call("/bar")

    await cromwell.close()
Example #6
0
async def test_errors_on_unknown_http_method():
    cromwell = api.CromwellAPI(server="http://httpbin:80", version="v1")

    # pylint: disable=W0212
    with pytest.raises(SystemExit):
        await cromwell._api_call("/bar", method="BAZ")

    await cromwell.close()
Example #7
0
async def run() -> None:
    parser = argparse.ArgumentParser(
        description="An opinionated Cromwell orchestration system.")

    # Common arguments
    parser.add_argument("--cromwell-server", help="Cromwell host location.")
    parser.add_argument("--cromwell-api-version", help="Cromwell API version.")
    parser.add_argument(
        "-f",
        "--force",
        default=False,
        action="store_true",
        help="Force running even with missing parameters.",
    )
    _args.add_batches_interval_arg(parser)
    _args.add_loglevel_group(parser)

    # Subparsers
    subparsers = parser.add_subparsers(dest="subcommand")

    for name, module in SUBCOMMANDS.items():
        if not hasattr(module, "register_subparser") or not hasattr(
                module, "call"):
            errors.report(
                f"Subcommand does not have required methods: {name}!",
                fatal=True,
                exitcode=errors.ERROR_INTERNAL_ERROR,
            )
        subparser = cast(Any, module).register_subparser(subparsers)
        _args.add_loglevel_group(subparser)

    args = vars(parser.parse_args())

    for k, v in _config.read_config().items():
        # if the user has not supplied a parameter on the command line, add the default
        # value from the config to `args`.
        if not k in args or not args[k]:
            args[k] = v

    if not args.get("force") and args.get("subcommand") not in [
            "configure", "config"
    ]:
        ensure_required_args(args)

    if not args.get("subcommand"):
        parser.print_help()
        sys.exit(1)

    logzero.loglevel(logging.WARN)
    if args.get("verbose"):
        logzero.loglevel(logging.INFO)
    elif args.get("debug"):
        logzero.loglevel(logging.DEBUG)

    cromwell = api.CromwellAPI(server=args["cromwell_server"],
                               version=args["cromwell_api_version"])
    await args["func"](args, cromwell)
    await cromwell.close()
Example #8
0
async def test_get_workflows():
    cromwell = api.CromwellAPI(server="http://cromwell:8000", version="v1")
    results = await cromwell.get_workflows_query()

    assert len(results) == 5
    for result in results:
        assert result.get("status") == "Succeeded"

    await cromwell.close()
Example #9
0
async def test_api_get():
    cromwell = api.CromwellAPI(server="http://httpbin:80", version="v1")

    # pylint: disable=W0212
    (code, response) = await cromwell._api_call(
        "/get", params={"includeSubworkflows": "true"}
    )

    assert code == 200
    assert response.get("args", {}).get("includeSubworkflows") == "true"

    await cromwell.close()
Example #10
0
async def test_post_workflows_with_params():
    cromwell = api.CromwellAPI(
        server="http://httpbin:80", version="v1", route_override="/post"
    )
    input_dict = {"input": "foo"}
    option_dict = {"option": "bar"}
    label_dict = {"label": "baz"}
    response = await cromwell.post_workflows(
        workflowUrl="https://foo/bar",
        workflowInputs=json.dumps(input_dict),
        workflowOptions=json.dumps(option_dict),
        labels=json.dumps(label_dict),
    )

    assert json.loads(response.get("files").get("labels")) == label_dict
    assert json.loads(response.get("files").get("workflowInputs")) == input_dict
    assert json.loads(response.get("files").get("workflowOptions")) == option_dict
    await cromwell.close()
Example #11
0
async def test_get_workflows_backends_not_implemented():
    with pytest.raises(NotImplementedError):
        cromwell = api.CromwellAPI(server="http://cromwell:8000", version="v1")
        await cromwell.get_workflows_backends()
Example #12
0
async def test_post_workflows_query_not_implemented():
    with pytest.raises(NotImplementedError):
        cromwell = api.CromwellAPI(server="http://cromwell:8000", version="v1")
        await cromwell.post_workflows_query()