浏览代码

HUE-4895 [editor] Name downloaded query with their query name if possible

Romain Rigaux 9 年之前
父节点
当前提交
e83bc61

+ 2 - 2
apps/beeswax/src/beeswax/data_export.py

@@ -31,7 +31,7 @@ FETCH_SIZE = 1000
 DOWNLOAD_COOKIE_AGE = 5
 
 
-def download(handle, format, db, id=None):
+def download(handle, format, db, id=None, file_name='query_result'):
   """
   download(query_model, format) -> HttpResponse
 
@@ -46,7 +46,7 @@ def download(handle, format, db, id=None):
   content_generator = HS2DataAdapter(handle, db, max_cells=max_cells, start_over=True)
   generator = export_csvxls.create_generator(content_generator, format)
 
-  resp = export_csvxls.make_response(generator, format, 'query_result')
+  resp = export_csvxls.make_response(generator, format, file_name)
 
   if id:
     resp.set_cookie(

+ 7 - 1
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -350,7 +350,13 @@ class HS2Api(Api):
       handle = self._get_handle(snippet)
       # Test handle to verify if still valid
       db.fetch(handle, start_over=True, rows=1)
-      return data_export.download(handle, format, db, id=snippet['id'])
+
+      if notebook.get('name'):
+        file_name = '%(name)s' % notebook
+      else:
+        file_name = '%(type)s-%(id)s' % notebook
+
+      return data_export.download(handle, format, db, id=snippet['id'], file_name=file_name)
     except Exception, e:
       title = 'The query result cannot be downloaded.'
       LOG.exception(title)

+ 14 - 0
desktop/libs/notebook/src/notebook/connectors/tests/tests_hiveserver2.py

@@ -592,6 +592,20 @@ class TestHiveserver2ApiWithHadoop(BeeswaxSampleProvider):
     assert_equal(self.statement, data['statement'], data)
 
 
+  def test_download(self):
+    statement = "SELECT 'hello world';"
+
+    doc = self.create_query_document(owner=self.user, statement=statement)
+    notebook = Notebook(document=doc)
+    snippet = self.execute_and_wait(doc, snippet_idx=0)
+
+    response = self.client.post(reverse('notebook:download'),
+                                {'notebook': notebook.get_json(), 'snippet': json.dumps(snippet), 'format': 'csv'})
+
+    assert_equal(200, response.status_code)
+    assert_equal(('Content-Disposition', 'attachment; filename=Test Query.csv'), response._headers['content-disposition'])
+
+
   def test_get_sample(self):
     doc = self.create_query_document(owner=self.user, statement=self.statement)
     notebook = Notebook(document=doc)