diff --git a/api/api.py b/api/api.py index 7e6e59bdd525f972ec08a1df8497f61de7ef1341..dd9f3b1dff74487db314a807492741f34f21294a 100644 --- a/api/api.py +++ b/api/api.py @@ -238,10 +238,14 @@ endpoints = [ ]), # Analysis - route( '/analyses/<_id:{cid}>', AnalysesHandler, m=['GET']), + route( '/analyses/<_id:{cid}>', AnalysesHandler, m=['GET']), + prefix( '/analyses/<_id:{cid}>', [ + route('/files', AnalysesHandler, h='download', m=['GET']), + route('/files/<filename:{fname}>', AnalysesHandler, h='download', 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('/<list_name:notes>', NotesListHandler, m=['POST']), + route('/<list_name:notes>/<_id:{nid}>', NotesListHandler, name='notes', m=['GET', 'PUT', 'DELETE']), ]), @@ -263,11 +267,11 @@ 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('/<list_name:notes>', NotesListHandler, m=['POST']), diff --git a/api/handlers/refererhandler.py b/api/handlers/refererhandler.py index 2a6260a4d13981d1ba180c5536e1601084cb8736..c5f36fd9a84b146aae6ef51b061f8bb9b1ec3a9b 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,8 +251,15 @@ class AnalysesHandler(RefererHandler): """ + _id = kwargs.get('_id') + analysis = self.storage.get_container(_id) + filename = kwargs.get('filename') + + cid = analysis['parent']['id'] + cont_name = analysis['parent']['type'] parent = self.storage.get_parent(cont_name, cid) permchecker = self.get_permchecker(parent) + ticket_id = self.get_param('ticket') ticket = None if ticket_id is None: @@ -260,7 +269,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]