From 09f9cc4778315aee62b89ef15ea3a418a90dbde2 Mon Sep 17 00:00:00 2001
From: Daniel K Lyons <dlyons@nrao.edu>
Date: Tue, 13 Oct 2020 11:37:32 -0600
Subject: [PATCH] Make add_file work

---
 services/workflow/src/workflow/server.py     | 14 +++++++-------
 shared/workspaces/src/workspaces/schema.py   |  3 +++
 shared/workspaces/src/workspaces/services.py |  5 +++--
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/services/workflow/src/workflow/server.py b/services/workflow/src/workflow/server.py
index 544248f4b..452a7b7e6 100644
--- a/services/workflow/src/workflow/server.py
+++ b/services/workflow/src/workflow/server.py
@@ -29,7 +29,7 @@ def lookup_request(request):
 
 
 def lookup_file(request):
-    return next(file for file in lookup_workflow(request).files if file.filename == request.matchdict['filename'])
+    return next(file for file in lookup_request(request).files if file.filename == request.matchdict['filename'])
 
 
 @view_defaults(route_name='workflows', renderer='json')
@@ -109,7 +109,7 @@ class WorkflowFilesRestService:
     def __init__(self, request):
         self.request = request
 
-    @view_config(request_method='PUT', route_name='add_file_to_workflow_request')
+    @view_config(request_method='PUT', route_name='workflow_request_file')
     def add_file(self):
         """
         Add a file to this workflow request.
@@ -132,7 +132,7 @@ class WorkflowFilesRestService:
         """
         return self.request.context['files']
 
-    @view_config(request_method='GET', route_name='workflow_file', accept='json', renderer='string')
+    @view_config(request_method='GET', accept='text/plain', route_name='workflow_request_file')
     def get_file_text(self):
         """
         Get the text contents of this file
@@ -140,9 +140,10 @@ class WorkflowFilesRestService:
         Audience: ???
         :return:
         """
-        return self.request.context['content']
+        self.request.response.body = self.request.context.content
+        return self.request.response
 
-    @view_config(request_method='GET', route_name='workflow_file', accept='application/json')
+    @view_config(request_method='GET', accept='application/json', route_name='workflow_request_file')
     def get_file_json(self):
         """
         Get a JSON representation of this file
@@ -217,9 +218,8 @@ def main(global_config, **settings):
         config.add_route('create_workflow_request', '/workflows/{name}/requests/create', factory=lookup_workflow)
         config.add_route('workflow_request', '/workflows/requests/{request_id}', factory=lookup_request)
         config.add_route('workflow_request_files', '/workflows/requests/{request_id}/files', factory=lookup_request)
-        config.add_route('add_file_to_workflow_request', '/workflows/requests/{request_id}/files/{filename}', factory=lookup_request)
+        config.add_route('workflow_request_file', '/workflows/requests/{request_id}/files/{filename}', factory=lookup_file)
         config.add_route('submit_workflow_request', '/workflows/requests/{request_id}/submit', factory=lookup_request)
-        config.add_route('workflow_file', '/workflows/requests/{request_id}/files/{filename}', factory=lookup_file)
 
         config.include('pyramid_beaker')
         config.scan('.')
diff --git a/shared/workspaces/src/workspaces/schema.py b/shared/workspaces/src/workspaces/schema.py
index 5ccca9afd..1091e7b47 100644
--- a/shared/workspaces/src/workspaces/schema.py
+++ b/shared/workspaces/src/workspaces/schema.py
@@ -479,6 +479,9 @@ class WorkflowRequestFile(Base):
     def __repr__(self):
         return f"<WorkflowRequestFile filename={self.filename}>"
 
+    def __json__(self, request):
+        return {'filename': self.filename}
+
 
 def get_engine():
     """
diff --git a/shared/workspaces/src/workspaces/services.py b/shared/workspaces/src/workspaces/services.py
index d71da7331..bcb4e25e6 100644
--- a/shared/workspaces/src/workspaces/services.py
+++ b/shared/workspaces/src/workspaces/services.py
@@ -583,7 +583,7 @@ class WorkflowInfo(WorkflowInfoIF):
         self.session.add(request)
         self.session.flush()
 
-    def save_file(self, request_id: int, filename: str, content: str):
+    def save_file(self, request_id: int, filename: str, content: bytes):
         """
         Save a given List of request files
         :param request_id:
@@ -591,7 +591,8 @@ class WorkflowInfo(WorkflowInfoIF):
         :param filename:
         :return:
         """
-        wrf = WorkflowRequestFile(workflow_request_id=request_id, filename=filename, content=content.encode())
+        wrf = WorkflowRequestFile(workflow_request_id=request_id, filename=filename, content=content)
         self.session.add(wrf)
         self.session.flush()
+        return wrf
 
-- 
GitLab