diff --git a/services/workflow/src/workflow/server.py b/services/workflow/src/workflow/server.py index 682c5ec6dc983418d476b6a1c75bd759a879ab51..e6ec1ac9ad9f5b1648cf774ad9d542184baa042c 100644 --- a/services/workflow/src/workflow/server.py +++ b/services/workflow/src/workflow/server.py @@ -4,6 +4,7 @@ from pyramid.renderers import JSONP from pyramid.request import Request from pyramid.view import view_config, view_defaults from pyramid_beaker import session_factory_from_settings +import json from workspaces.system.schema import get_engine, get_session_factory from workspaces.workflow.services.workflow_info import WorkflowInfo @@ -27,6 +28,11 @@ def lookup_workflow(request): return request.info.lookup_workflow_definition(request.matchdict["name"]) +def lookup_workflow_json(request): + req = request.json_body + return request.info.lookup_workflow_definition(req["workflow"]) + + def lookup_request(request): return request.info.lookup_workflow_request(request.matchdict["request_id"]) @@ -94,12 +100,9 @@ class WorkflowRequestRestService: Audience: front-end and CLI :return: """ - # all we should have to do here is take the WorkflowRequest from the context and - # hand it to WorkflowInfo to save it, but we're still conflating - # workflows and workflow requests right now - request = self.request.info.create_workflow_request( - self.request.context, self.request.GET.getall("args") - ) + + req = self.request.json_body + request = self.request.info.create_workflow_request(req["workflow"], req["args"]) return request @view_config(request_method="POST", route_name="submit_workflow_request") @@ -111,8 +114,9 @@ class WorkflowRequestRestService: :return: """ print(f"Submitting workflow {self.request.context}") + return self.request.workflows.execute( - self.request.context, self.request.GET.getall("files") + self.request.context, self.request.json_body["files"] ) @@ -246,10 +250,12 @@ def main(global_config, **settings): config.add_route("workflows", "/workflows") config.add_route("workflow", "/workflows/{name}", factory=lookup_workflow) + + # parameters are passed with json: {workflow:<name>, args: <args>} config.add_route( "create_workflow_request", - "/workflows/{name}/requests/create", - factory=lookup_workflow, + "/workflows/requests/create", + factory=lookup_workflow_json, ) config.add_route( "workflow_request", @@ -266,6 +272,9 @@ def main(global_config, **settings): "/workflows/requests/{request_id}/files/{filename}", factory=lookup_request, ) + + # parameters are passed with json: {files:{<name>}}. + # Use empty braces for no additional files config.add_route( "submit_workflow_request", "/workflows/requests/{request_id}/submit",