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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()