From d5bf626f0039c08fb599025dba65671ae4855777 Mon Sep 17 00:00:00 2001 From: chausman <chausman@nrao.edu> Date: Tue, 13 Oct 2020 10:14:03 -0600 Subject: [PATCH] workflow file persistence work --- services/workflow/src/workflow/server.py | 11 +++++++- shared/workspaces/src/workspaces/schema.py | 2 +- shared/workspaces/src/workspaces/services.py | 27 ++++++++++++++++---- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/services/workflow/src/workflow/server.py b/services/workflow/src/workflow/server.py index 1dfd6086b..a3a066f0d 100644 --- a/services/workflow/src/workflow/server.py +++ b/services/workflow/src/workflow/server.py @@ -24,6 +24,10 @@ def lookup_workflow(request): return request.info.lookup_workflow_definition(request.matchdict['name']) +# def lookup_request(request): +# return request.info.lookup_workflow_request(request.matchdict['requests']) + + def lookup_file(request): return lookup_workflow(request)['files'][request.matchdict['filename']] @@ -93,7 +97,7 @@ class WorkflowFilesRestService: def __init__(self, request): self.request = request - @view_config(request_method='POST') + @view_config(request_method='POST', route_name='add_file') def add_file(self): """ Add a file to this workflow request. @@ -101,6 +105,10 @@ class WorkflowFilesRestService: Audience: front-end and CLI """ print('Adding a file') + file = self.request.info.save_file(request_id=self.request.GET.get("request"), + filename=self.request.GET.get("filename"), + content=self.request.GET.get("content")) + return file @view_config(request_method='GET') def get_files(self): @@ -190,6 +198,7 @@ def main(global_config, **settings): config.add_route('workflow', '/workflows/{name}', factory=lookup_workflow) config.add_route('create_workflow', '/workflows/{name}/create', factory=lookup_workflow) config.add_route('submit_workflow', '/workflows/{name}/submit', factory=lookup_workflow) + config.add_route('add_file', '/workflows/file') config.add_route('workflow_files', '/workflows/{name}/files', factory=lookup_workflow) config.add_route('workflow_file', '/workflows/{name}/files/{filename}', factory=lookup_file) diff --git a/shared/workspaces/src/workspaces/schema.py b/shared/workspaces/src/workspaces/schema.py index 587bac84d..5ccca9afd 100644 --- a/shared/workspaces/src/workspaces/schema.py +++ b/shared/workspaces/src/workspaces/schema.py @@ -431,7 +431,7 @@ class WorkflowRequest(Base): @request.setter def create_request(self, request: AbstractRequest): - self.workflow_name, self.argument = request.workflow_name, request.argument + self.workflow_name, self.argument = request.name, request.argument # TODO: create following fields in table def update_status(self, status: str): diff --git a/shared/workspaces/src/workspaces/services.py b/shared/workspaces/src/workspaces/services.py index 5aef369af..d3b3959f5 100644 --- a/shared/workspaces/src/workspaces/services.py +++ b/shared/workspaces/src/workspaces/services.py @@ -48,7 +48,7 @@ from .schema import ( AbstractFile, CapabilityEvent, CapabilityVersion, - Base, + Base, WorkflowRequestFile, ) from channels.amqp_helpers import ( workflow_events, @@ -556,12 +556,16 @@ class WorkflowInfo(WorkflowInfoIF): def lookup_workflow_definition(self, name: str) -> Workflow: return self.session.query(Workflow).get(name) + def lookup_workflow_request(self, request_id: int) -> Workflow: + return self.session.query(WorkflowRequest).get(request_id) + def all_workflows(self) -> List[Workflow]: return self.session.query(Workflow).all() def create_workflow_request( - self, workflow_name: str, argument: Dict - ) -> WorkflowRequest: + self, + workflow_name: str, + argument: Dict) -> WorkflowRequest: """ Create new workflow request and save to database :param workflow_name: name of workflow to run @@ -575,8 +579,21 @@ class WorkflowInfo(WorkflowInfoIF): def save_request(self, request: WorkflowRequest): """ Save a given entity and return an integer identifier for it - :param entity: the entity to save - :return: the entity's identifier + :param request: request to save + :return: the entity's identifier """ self.session.add(request) self.session.flush() + + def save_file(self, request_id: int, filename: str, content: str): + """ + Save a given List of request files + :param request_id: + :param content: + :param filename: + :return: + """ + wrf = WorkflowRequestFile(workflow_request_id=request_id, filename=filename, content=content.encode()) + self.session.add(wrf) + self.session.flush() + -- GitLab