浏览代码

HUE-5145 [metadata] Basic of upload optimization API

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

+ 14 - 9
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -18,12 +18,14 @@
 
 import json
 import logging
+import os
 import subprocess
 import uuid
 
+from tempfile import NamedTemporaryFile
+
 from django.utils.translation import ugettext as _
 
-from desktop.lib import export_csvxls
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib import export_csvxls
 from desktop.lib.rest.http_client import HttpClient, RestException
@@ -70,8 +72,11 @@ class OptimizerApi(object):
 
     return self._token
 
-  
+
   def _exec(self, command, args):
+    data = None
+    response = {'status': 'error'}
+
     try:
       data = subprocess.check_output([
           'cws',
@@ -89,9 +94,10 @@ class OptimizerApi(object):
         data = '\n'.join(e.output.split('\n')[3:]) # Beware removing of {"url":...}
     except RestException, e:
       raise PopupException(e, title=_('Error while accessing Optimizer'))
-    
-    response = json.loads(data)
-    response['status'] = 'success'
+
+    if data:
+      response = json.loads(data) 
+      response['status'] = 'success'
     return response
 
 
@@ -157,7 +163,7 @@ class OptimizerApi(object):
       raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
-  def upload(self, queries, source_platform='generic', workflow_id=None):
+  def upload(self, queries, source_platform='generic', workload_id=None):
 
     with NamedTemporaryFile(suffix='.csv') as f:
       try:
@@ -167,7 +173,6 @@ class OptimizerApi(object):
 
         for row in queries_csv:
           f.write(row)
-
   #       data = {
   #           'fileLocation': f.name,
   #           'sourcePlatform': source_platform,
@@ -180,8 +185,8 @@ class OptimizerApi(object):
             '--source-platform', source_platform,
             '--tenant', self._product_name
         ]
-        if workflow_id:
-          args += ['--workfload-id', workflow_id]
+        if workload_id:
+          args += ['--workload-id', workload_id]
 
         return self._exec('upload', args)
         ## return self._root.post('/api/upload', data=data, files={'fileLocation': ('hue-report.json', json.dumps(queries_formatted))})

+ 2 - 4
desktop/libs/metadata/src/metadata/optimizer_client_tests.py

@@ -57,6 +57,7 @@ class TestOptimizerApi(object):
     cls.user.is_superuser = False
     cls.user.save()
 
+
   def test_tenant(self):
     resp = self.api.get_tenant(email='romain@cloudera.com')
 
@@ -103,9 +104,6 @@ class TestOptimizerApi(object):
 
 
   def test_upload(self):
-    resp = self.api.authenticate()
-    token = resp['token']
-
     queries = [
         "select emps.id from emps where emps.name = 'Joe' group by emps.mgr, emps.id;",
         "select emps.name from emps where emps.num = 007 group by emps.state, emps.name;",
@@ -116,7 +114,7 @@ class TestOptimizerApi(object):
         "select mgr.name from mgr where mgr.reports > 10 group by mgr.state;"
     ]
 
-    resp = self.api.upload(token=token, queries=queries)
+    resp = self.api.upload(queries=queries)
     assert_equal('success', resp['status'], resp)