From 19fa6132b452df23ae78be19f0513b00732723d1 Mon Sep 17 00:00:00 2001 From: Megan Henning <meganhenning@flywheel.io> Date: Wed, 15 Nov 2017 14:20:56 -0600 Subject: [PATCH] Add direct access to analysis file dl --- api/api.py | 20 +++++++++++--------- api/handlers/refererhandler.py | 17 +++++++++++++---- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/api/api.py b/api/api.py index 7e6e59bd..d82b39f6 100644 --- a/api/api.py +++ b/api/api.py @@ -238,11 +238,11 @@ endpoints = [ ]), # Analysis - route( '/analyses/<_id:{cid}>', AnalysesHandler, m=['GET']), - prefix('/<:{cname}>/<:{cid}>/<cont_name:analyses>/<cid:{cid}>', [ - route('/<list_name:notes>', NotesListHandler, m=['POST']), - route('/<list_name:notes>/<_id:{nid}>', NotesListHandler, name='notes', m=['GET', 'PUT', 'DELETE']), - ]), + route( '/analyses/<_id:{cid}>', AnalysesHandler, m=['GET']), + prefix( '/analyses/<_id:{cid}>', [ + route('/<_id:{cid}>/files', AnalysesHandler, h='download', m=['GET']), + route('/<_id:{cid}>/files/<filename:{fname}>', AnalysesHandler, h='download', m=['GET']), + ]) # Containers @@ -263,11 +263,13 @@ endpoints = [ route('/<list_name:files>/<name:{fname}>/info', FileListHandler, h='get_info', m=['GET']), route('/<list_name:files>/<name:{fname}>/info', FileListHandler, h='modify_info', m=['POST']), - route( '/analyses', AnalysesHandler, m=['POST']), + route( '/analyses', AnalysesHandler, m=['POST']), prefix('/analyses', [ - route('/<_id:{cid}>', AnalysesHandler, m=['GET', 'PUT', 'DELETE']), - route('/<_id:{cid}>/files', AnalysesHandler, h='download', m=['GET']), - route('/<_id:{cid}>/files/<filename:{fname}>', AnalysesHandler, h='download', m=['GET']), + route('/<_id:{cid}>', AnalysesHandler, m=['GET', 'PUT', 'DELETE']), + route('/<_id:{cid}>/files', AnalysesHandler, h='download', m=['GET']), + route('/<_id:{cid}>/files/<filename:{fname}>', AnalysesHandler, h='download', m=['GET']), + route('/<_id:{cid}>/<list_name:notes>', NotesListHandler, m=['POST']), + route('/<_id:{cid}>/<list_name:notes>/<_id:{nid}>', NotesListHandler, name='notes', m=['GET', 'PUT', 'DELETE']), ]), route('/<list_name:notes>', NotesListHandler, m=['POST']), diff --git a/api/handlers/refererhandler.py b/api/handlers/refererhandler.py index 2a6260a4..da0f0acc 100644 --- a/api/handlers/refererhandler.py +++ b/api/handlers/refererhandler.py @@ -153,9 +153,11 @@ class AnalysesHandler(RefererHandler): self.abort(404, 'Analysis {} not removed from container {} {}'.format(_id, cont_name, cid)) - def download(self, cont_name, cid, _id, filename=None): + def download(self, **kwargs): """ - .. http:get:: /api/(cont_name)/(cid)/analyses/(analysis_id)/files/(file_name) + .. http:get:: /api/(cont_name)*/(cid)*/analyses/(analysis_id)/files/(file_name)* + + * - not required Download a file from an analysis or download a tar of all files @@ -249,7 +251,15 @@ class AnalysesHandler(RefererHandler): """ - parent = self.storage.get_parent(cont_name, cid) + _id = kwargs.get('_id') + analysis = self.storage.get_container(_id) + filename = kwargs.get('filename') + + cid = analysis['parent']['id'] + cont = analysis['parent']['cont'] + parent = self.storage.get_parent(cont, cid) + permchecker = self.get_permchecker(parent) + permchecker = self.get_permchecker(parent) ticket_id = self.get_param('ticket') ticket = None @@ -260,7 +270,6 @@ class AnalysesHandler(RefererHandler): if not self.origin.get('id'): self.origin = ticket.get('origin') - analysis = self.storage.get_container(_id) fileinfo = analysis.get('files', []) if filename: fileinfo = [fi for fi in fileinfo if fi['name'] == filename] -- GitLab