Skip to content

Commit 41740a2

Browse files
author
Peter Amstutz
committed
Expand server and client to have proper command line interface.
1 parent 1d6d2cf commit 41740a2

File tree

4 files changed

+64
-21
lines changed

4 files changed

+64
-21
lines changed

setup.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
url="https://github.com/common-workflow-language/cwltool-service",
2020
download_url="https://github.com/common-workflow-language/cwltool-service",
2121
license='Apache 2.0',
22-
py_modules=["cwl_runner_wes"],
22+
packages=["wes_service"],
23+
package_data={'wes_service': ['swagger/proto/workflow_execution.swagger.json']},
24+
include_package_data=True,
2325
install_requires=[
2426
'connexion',
2527
'bravado'

wes_client.py

Lines changed: 53 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,64 @@
66
import time
77
import pprint
88
import sys
9+
import os
10+
import argparse
11+
import logging
912

10-
f = open("swagger/proto/workflow_execution.swagger.json")
11-
client = SwaggerClient.from_spec(json.load(f), origin_url="http://localhost:8080")
13+
def main(argv=sys.argv[1:]):
1214

13-
with open(sys.argv[2]) as f:
14-
input = json.load(f)
15+
parser = argparse.ArgumentParser(description='Workflow Execution Service')
16+
parser.add_argument("--host", type=str, default=os.environ.get("WES_API_HOST"))
17+
parser.add_argument("--auth", type=str, default=os.environ.get("WES_API_TOKEN"))
18+
parser.add_argument("--proto", type=str, default="https")
19+
parser.add_argument("--quiet", action="store_true", default=False)
20+
parser.add_argument("workflow_url", type=str)
21+
parser.add_argument("job_order", type=str)
22+
args = parser.parse_args(argv)
1523

16-
r = client.WorkflowExecutionService.RunWorkflow(body={
17-
"workflow_url": sys.argv[1],
18-
"workflow_params": input,
19-
"workflow_type": "CWL",
20-
"workflow_type_version": "v1.0"}).result()
24+
http_client = RequestsClient()
25+
http_client.set_api_key(
26+
args.host, args.auth,
27+
param_name='Authorization', param_in='header')
28+
client = SwaggerClient.from_url("%s://%s/swagger.json" % (args.proto, args.host), http_client=http_client)
2129

22-
sys.stderr.write(r.workflow_id+"\n")
30+
with open(args.job_order) as f:
31+
input = json.load(f)
32+
33+
workflow_url = args.workflow_url
34+
if not workflow_url.startswith("/") or ":" in workflow_url:
35+
workflow_url = os.path.abspath(workflow_url)
36+
37+
if args.quiet:
38+
logging.basicConfig(level=logging.WARNING)
39+
else:
40+
logging.basicConfig(level=logging.INFO)
41+
42+
r = client.WorkflowExecutionService.RunWorkflow(body={
43+
"workflow_url": workflow_url,
44+
"workflow_params": input,
45+
"workflow_type": "CWL",
46+
"workflow_type_version": "v1.0"}).result()
47+
48+
logging.info("Workflow id is %s", r.workflow_id)
2349

24-
r = client.WorkflowExecutionService.GetWorkflowStatus(workflow_id=r.workflow_id).result()
25-
while r.state == "Running":
26-
time.sleep(1)
2750
r = client.WorkflowExecutionService.GetWorkflowStatus(workflow_id=r.workflow_id).result()
51+
while r.state == "Running":
52+
time.sleep(1)
53+
r = client.WorkflowExecutionService.GetWorkflowStatus(workflow_id=r.workflow_id).result()
54+
55+
logging.info("State is %s", r.state)
56+
57+
s = client.WorkflowExecutionService.GetWorkflowLog(workflow_id=r.workflow_id).result()
58+
logging.info(s.workflow_log.stderr)
59+
60+
d = {k: s.outputs[k] for k in s.outputs if k != "fields"}
61+
json.dump(d, sys.stdout, indent=4)
2862

29-
s = client.WorkflowExecutionService.GetWorkflowLog(workflow_id=r.workflow_id).result()
30-
sys.stderr.write(s.workflow_log.stderr+"\n")
63+
if r.state == "Complete":
64+
return 0
65+
else:
66+
return 1
3167

32-
d = {k: s.outputs[k] for k in s.outputs if k != "fields"}
33-
json.dump(d, sys.stdout, indent=4)
68+
if __name__ == "__main__":
69+
sys.exit(main(sys.argv[1:]))

wes_service.py renamed to wes_service/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import json
1111
import urllib
1212

13+
from pkg_resources import resource_stream
14+
1315
class Workflow(object):
1416
def __init__(self, workflow_id):
1517
super(Workflow, self).__init__()
@@ -92,6 +94,7 @@ def getlog(self):
9294
with open(os.path.join(self.workdir, "stderr"), "r") as f:
9395
stderr = f.read()
9496

97+
outputobj = {}
9598
if state == "Complete":
9699
with open(os.path.join(self.workdir, "cwl.output.json"), "r") as outputtemp:
97100
outputobj = json.load(outputtemp)
@@ -163,11 +166,12 @@ def GetWorkflowStatus(workflow_id):
163166
return job.getstatus()
164167

165168
def main():
166-
app = connexion.App(__name__, specification_dir='swagger/')
169+
app = connexion.App(__name__)
167170
def rs(x):
168171
return utils.get_function_from_name("wes_service." + x)
169172

170-
app.add_api('proto/workflow_execution.swagger.json', resolver=Resolver(rs))
173+
res = resource_stream(__name__, 'swagger/proto/workflow_execution.swagger.json')
174+
app.add_api(json.load(res), resolver=Resolver(rs))
171175

172176
app.run(port=8080)
173177

swagger/proto/workflow_execution.swagger.json renamed to wes_service/swagger/proto/workflow_execution.swagger.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
2-
"swagger": "2.0",
2+
"swagger": "2.0",
3+
"basePath": "/",
34
"info": {
45
"title": "workflow_execution.proto",
56
"version": "version not set"

0 commit comments

Comments
 (0)