diff --git a/services/workflow/src/workflow/__init__.py b/services/workflow/src/workflow/__init__.py index 4a8734bb75ecbb3fb0722a73b00ecfa14558627e..62aa295e904a64a197c33825643a92a16e01934e 100644 --- a/services/workflow/src/workflow/__init__.py +++ b/services/workflow/src/workflow/__init__.py @@ -5,6 +5,8 @@ from sqlalchemy.orm import scoped_session, sessionmaker from zope.sqlalchemy import ZopeTransactionExtension from pyramid.renderers import JSONP +from workflow.workflow import lookup_workflow, lookup_file + DB = {} @@ -17,9 +19,10 @@ def main(global_config, **settings): config.add_renderer('jsonp', JSONP(param_name='callback')) config.add_route('workflows', '/workflows') - config.add_route('workflow', '/workflows/{id}') - config.add_route('submit_workflow', '/workflows/{id}/submit') - config.add_route('workflow_files', '/workflows/{id}/files') + config.add_route('workflow', '/workflows/{id}', factory=lookup_workflow) + config.add_route('submit_workflow', '/workflows/{id}/submit', factory=lookup_workflow) + config.add_route('workflow_files', '/workflows/{id}/files', factory=lookup_workflow) + config.add_route('workflow_file', '/workflows/{id}/files/{filename}', factory=lookup_file) config.include('pyramid_beaker') config.scan('workflow.workflow') diff --git a/services/workflow/src/workflow/workflow.py b/services/workflow/src/workflow/workflow.py index 4c72c7737d27d39812c8d46c05247a9637261553..46c9f890a13a780deb7c3ec14c99cd3f75d2194a 100644 --- a/services/workflow/src/workflow/workflow.py +++ b/services/workflow/src/workflow/workflow.py @@ -1,6 +1,15 @@ +from pyramid.response import Response from pyramid.view import view_config, view_defaults -WORKFLOWS = [{'id': 1, 'name': 'foo', 'files': [{'id': 1, 'name': 'first file'}]}] +WORKFLOWS = [{'id': 1, 'name': 'foo', 'files': {'file.txt': {'id': 1, 'name': 'file.txt', 'content': 'Hello, world!'}}}] + + +def lookup_workflow(request): + return WORKFLOWS[int(request.matchdict['id'])] + + +def lookup_file(request): + return lookup_workflow(request)['files'][request.matchdict['filename']] @view_defaults(route_name='workflows', renderer='json') @@ -19,12 +28,12 @@ class WorkflowService: @view_config(request_method='GET', route_name='workflow') def get_workflow(self): - return WORKFLOWS[int(self.request.matchdict['id'])] + return self.request.context @view_config(request_method='POST', route_name='submit_workflow') def submit_workflow(self): # submit the workflow for processing - print(f"Submitting workflow {self.request.matchdict['id']}") + print(f"Submitting workflow {self.request.context['id']}") @view_config(request_method='POST', route_name='workflow_files') def add_file(self): @@ -33,4 +42,12 @@ class WorkflowService: @view_config(request_method='GET', route_name='workflow_files') def get_files(self): - return WORKFLOWS[int(self.request.matchdict['id'])]['files'] + return self.request.context['files'] + + @view_config(request_method='GET', route_name='workflow_file', accept='text/plain', renderer='string') + def get_file_text(self): + return self.request.context['content'] + + @view_config(request_method='GET', route_name='workflow_file', accept='application/json') + def get_file_json(self): + return self.request.context \ No newline at end of file