浏览代码

HUE-8824 [editor] Refactor optimizer API to follow notebook API

Romain 5 年之前
父节点
当前提交
5b60570493

+ 0 - 1
desktop/libs/metadata/src/metadata/optimizer/base.py

@@ -23,7 +23,6 @@ from desktop.lib.i18n import smart_unicode
 
 
 
 
 def get_api(request, interface):
 def get_api(request, interface):
-
   if interface == 'navopt':
   if interface == 'navopt':
     from metadata.optimizer.optimizer_client import OptimizerClient
     from metadata.optimizer.optimizer_client import OptimizerClient
     return OptimizerClient(request.user)
     return OptimizerClient(request.user)

+ 8 - 3
desktop/libs/notebook/src/notebook/api.py

@@ -37,6 +37,7 @@ from desktop.lib.exceptions_renderable import PopupException
 from desktop.models import Document2, Document, __paginate, _get_gist_document
 from desktop.models import Document2, Document, __paginate, _get_gist_document
 from indexer.file_format import HiveFormat
 from indexer.file_format import HiveFormat
 from indexer.fields import Field
 from indexer.fields import Field
+from metadata.conf import OPTIMIZER
 
 
 from notebook.connectors.base import Notebook, QueryExpired, SessionExpired, QueryError, _get_snippet_name
 from notebook.connectors.base import Notebook, QueryExpired, SessionExpired, QueryError, _get_snippet_name
 from notebook.connectors.hiveserver2 import HS2Api
 from notebook.connectors.hiveserver2 import HS2Api
@@ -894,10 +895,11 @@ def statement_risk(request):
 
 
   notebook = json.loads(request.POST.get('notebook', '{}'))
   notebook = json.loads(request.POST.get('notebook', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
+  interface = request.POST.get('interface', OPTIMIZER.INTERFACE.get())
 
 
-  api = HS2Api(request.user, snippet)
+  api = get_api(request, snippet)
 
 
-  response['query_complexity'] = api.statement_risk(notebook, snippet)
+  response['query_complexity'] = api.statement_risk(interface, notebook, snippet)
   response['status'] = 0
   response['status'] = 0
 
 
   return JsonResponse(response)
   return JsonResponse(response)
@@ -911,12 +913,14 @@ def statement_compatibility(request):
 
 
   notebook = json.loads(request.POST.get('notebook', '{}'))
   notebook = json.loads(request.POST.get('notebook', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
+  interface = request.POST.get('interface', OPTIMIZER.INTERFACE.get())
   source_platform = request.POST.get('sourcePlatform')
   source_platform = request.POST.get('sourcePlatform')
   target_platform = request.POST.get('targetPlatform')
   target_platform = request.POST.get('targetPlatform')
 
 
   api = get_api(request, snippet)
   api = get_api(request, snippet)
 
 
   response['query_compatibility'] = api.statement_compatibility(
   response['query_compatibility'] = api.statement_compatibility(
+      interface,
       notebook,
       notebook,
       snippet,
       snippet,
       source_platform=source_platform,
       source_platform=source_platform,
@@ -935,11 +939,12 @@ def statement_similarity(request):
 
 
   notebook = json.loads(request.POST.get('notebook', '{}'))
   notebook = json.loads(request.POST.get('notebook', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
+  interface = request.POST.get('interface', OPTIMIZER.INTERFACE.get())
   source_platform = request.POST.get('sourcePlatform')
   source_platform = request.POST.get('sourcePlatform')
 
 
   api = get_api(request, snippet)
   api = get_api(request, snippet)
 
 
-  response['statement_similarity'] = api.statement_similarity(notebook, snippet, source_platform=source_platform)
+  response['statement_similarity'] = api.statement_similarity(interface, notebook, snippet, source_platform=source_platform)
   response['status'] = 0
   response['status'] = 0
 
 
   return JsonResponse(response)
   return JsonResponse(response)

+ 22 - 3
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -30,6 +30,7 @@ from desktop.lib import export_csvxls
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.i18n import smart_unicode
 from desktop.models import get_cluster_config
 from desktop.models import get_cluster_config
+from metadata.optimizer.base import get_api as get_optimizer_api
 
 
 from notebook.conf import get_ordered_interpreters
 from notebook.conf import get_ordered_interpreters
 from notebook.sql_utils import get_current_statement
 from notebook.sql_utils import get_current_statement
@@ -543,11 +544,29 @@ class Api(object):
 
 
   def export_large_data_to_hdfs(self, notebook, snippet, destination): raise NotImplementedError()
   def export_large_data_to_hdfs(self, notebook, snippet, destination): raise NotImplementedError()
 
 
-  def statement_risk(self, notebook, snippet): raise NotImplementedError()
+  def statement_risk(self, interface, notebook, snippet):
+    response = self._get_current_statement(notebook, snippet)
+    query = response['statement']
 
 
-  def statement_compatibility(self, notebook, snippet, source_platform, target_platform): raise NotImplementedError()
+    client = get_optimizer_api(self.request, interface)
 
 
-  def statement_similarity(self, notebook, snippet, source_platform, target_platform): raise NotImplementedError()
+    return client.query_risk(query=query, source_platform=snippet['type'], db_name=snippet.get('database') or 'default')
+
+  def statement_compatibility(self, interface, notebook, snippet, source_platform, target_platform):
+    response = self._get_current_statement(notebook, snippet)
+    query = response['statement']
+
+    client = get_optimizer_api(self.request, interface)
+
+    return client.query_compatibility(source_platform, target_platform, query)
+
+  def statement_similarity(self, interface, notebook, snippet, source_platform):
+    response = self._get_current_statement(notebook, snippet)
+    query = response['statement']
+
+    client = get_optimizer_api(self.request, interface)
+
+    return client.similar_queries(source_platform, query)
 
 
   def describe(self, notebook, snippet, database=None, table=None, column=None):
   def describe(self, notebook, snippet, database=None, table=None, column=None):
     if column:
     if column:

+ 5 - 32
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -18,8 +18,7 @@
 from __future__ import division
 from __future__ import division
 from future import standard_library
 from future import standard_library
 standard_library.install_aliases()
 standard_library.install_aliases()
-from builtins import next
-from builtins import object
+from builtins import next, object
 import binascii
 import binascii
 import copy
 import copy
 import json
 import json
@@ -41,9 +40,9 @@ from desktop.lib.paths import SAFE_CHARACTERS_URI_COMPONENTS
 from desktop.lib.rest.http_client import RestException
 from desktop.lib.rest.http_client import RestException
 from desktop.lib.thrift_util import unpack_guid, unpack_guid_base64
 from desktop.lib.thrift_util import unpack_guid, unpack_guid_base64
 from desktop.models import DefaultConfiguration, Document2
 from desktop.models import DefaultConfiguration, Document2
-from metadata.optimizer.optimizer_client import OptimizerClient
 
 
-from notebook.connectors.base import Api, QueryError, QueryExpired, OperationTimeout, OperationNotSupported, _get_snippet_name, Notebook, get_interpreter
+from notebook.connectors.base import Api, QueryError, QueryExpired, OperationTimeout, OperationNotSupported, _get_snippet_name, Notebook, \
+    get_interpreter
 
 
 if sys.version_info[0] > 2:
 if sys.version_info[0] > 2:
   from urllib.parse import quote as urllib_quote, unquote as urllib_unquote
   from urllib.parse import quote as urllib_quote, unquote as urllib_unquote
@@ -56,7 +55,8 @@ LOG = logging.getLogger(__name__)
 try:
 try:
   from beeswax import conf as beeswax_conf, data_export
   from beeswax import conf as beeswax_conf, data_export
   from beeswax.api import _autocomplete, _get_sample_data
   from beeswax.api import _autocomplete, _get_sample_data
-  from beeswax.conf import CONFIG_WHITELIST as hive_settings, DOWNLOAD_ROW_LIMIT, DOWNLOAD_BYTES_LIMIT, MAX_NUMBER_OF_SESSIONS, has_session_pool, has_multiple_sessions, CLOSE_SESSIONS
+  from beeswax.conf import CONFIG_WHITELIST as hive_settings, DOWNLOAD_ROW_LIMIT, DOWNLOAD_BYTES_LIMIT, MAX_NUMBER_OF_SESSIONS, \
+      has_session_pool, has_multiple_sessions, CLOSE_SESSIONS
   from beeswax.data_export import upload
   from beeswax.data_export import upload
   from beeswax.design import hql_query
   from beeswax.design import hql_query
   from beeswax.models import QUERY_TYPES, HiveServerQueryHandle, HiveServerQueryHistory, QueryHistory, Session
   from beeswax.models import QUERY_TYPES, HiveServerQueryHandle, HiveServerQueryHistory, QueryHistory, Session
@@ -626,33 +626,6 @@ DROP TABLE IF EXISTS `%(table)s`;
     return hql, success_url
     return hql, success_url
 
 
 
 
-  def statement_risk(self, notebook, snippet):
-    response = self._get_current_statement(notebook, snippet)
-    query = response['statement']
-
-    client = OptimizerClient(self.user)
-
-    return client.query_risk(query=query, source_platform=snippet['type'], db_name=snippet.get('database') or 'default')
-
-
-  def statement_compatibility(self, notebook, snippet, source_platform, target_platform):
-    response = self._get_current_statement(notebook, snippet)
-    query = response['statement']
-
-    client = OptimizerClient(self.user)
-
-    return client.query_compatibility(source_platform, target_platform, query)
-
-
-  def statement_similarity(self, notebook, snippet, source_platform):
-    response = self._get_current_statement(notebook, snippet)
-    query = response['statement']
-
-    client = OptimizerClient(self.user)
-
-    return client.similar_queries(source_platform, query)
-
-
   def upgrade_properties(self, lang='hive', properties=None):
   def upgrade_properties(self, lang='hive', properties=None):
     upgraded_properties = copy.deepcopy(self.get_properties(lang))
     upgraded_properties = copy.deepcopy(self.get_properties(lang))