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