소스 검색

HUE-8758 [connectors] Remove hardcoding of snippet type in make_notebook

Romain 6 년 전
부모
커밋
03e46428f5
3개의 변경된 파일34개의 추가작업 그리고 22개의 파일을 삭제
  1. 2 0
      desktop/libs/notebook/src/notebook/conf.py
  2. 19 11
      desktop/libs/notebook/src/notebook/connectors/base.py
  3. 13 11
      desktop/libs/notebook/src/notebook/models.py

+ 2 - 0
desktop/libs/notebook/src/notebook/conf.py

@@ -94,6 +94,8 @@ def get_ordered_interpreters(user=None):
       "type": i['type'],
       "interface": i['interface'],
       "options": i['options'],
+      'dialect': i.get('dialect', i['name']),
+      'category': i.get('category', 'editor'),
       "is_sql": i.get('is_sql') or i['interface'] in ["hiveserver2", "rdbms", "jdbc", "solr", "sqlalchemy"],
       "is_catalog": i['interface'] in ["hms",],
     }

+ 19 - 11
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -273,17 +273,9 @@ class Notebook(object):
     return _execute_notebook(request, notebook_data, snippet)
 
 
-def get_api(request, snippet):
-  from notebook.connectors.oozie_batch import OozieApi
-
-  if snippet.get('wasBatchExecuted') and not TASK_SERVER.ENABLED.get():
-    return OozieApi(user=request.user, request=request)
-
-  if snippet['type'] == 'report':
-    snippet['type'] = 'impala'
-
+def get_interpreter(connector_type, user=None):
   interpreter = [
-    interpreter for interpreter in get_ordered_interpreters(request.user) if snippet['type'] == interpreter['type']
+    interpreter for interpreter in get_ordered_interpreters(user) if connector_type == interpreter['type']
   ]
   if not interpreter:
     if snippet['type'] == 'hbase': # TODO move to connectors
@@ -320,10 +312,26 @@ def get_api(request, snippet):
       }]
     else:
       raise PopupException(_('Snippet type %(type)s is not configured.') % snippet)
+  elif len(interpreter) > 1:
+    raise PopupException(_('Snippet type %(type)s matching more than one interpreter: %s') % (snippet, len(interpreter)))
+
+  return interpreter[0]
+
+
+def get_api(request, snippet):
+  from notebook.connectors.oozie_batch import OozieApi
+
+  if snippet.get('wasBatchExecuted') and not TASK_SERVER.ENABLED.get():
+    return OozieApi(user=request.user, request=request)
+
+  if snippet['type'] == 'report':
+    snippet['type'] = 'impala'
+
+  interpreter = get_interpreter(connector_type=snippet['type'], user=request.user)
 
-  interpreter = interpreter[0]
   interface = interpreter['interface']
 
+  # TODO: clean computes
   if get_cluster_config(request.user)['has_computes']:
     compute = json.loads(request.POST.get('cluster', '""')) # Via Catalog autocomplete API or Notebook create sessions.
     if compute == '""' or compute == 'undefined':

+ 13 - 11
desktop/libs/notebook/src/notebook/models.py

@@ -29,14 +29,15 @@ from django.contrib.auth.models import User
 from django.contrib.sessions.models import Session
 from django.db.models import Count
 from django.db.models.functions import Trunc
-from desktop.lib.paths import SAFE_CHARACTERS_URI
 from django.utils.html import escape
 from django.utils.translation import ugettext as _
 
+from desktop.conf import has_connectors
 from desktop.lib.i18n import smart_unicode
+from desktop.lib.paths import SAFE_CHARACTERS_URI
 from desktop.models import Document2
 
-from notebook.connectors.base import Notebook
+from notebook.connectors.base import Notebook, get_interpreter
 
 
 LOG = logging.getLogger(__name__)
@@ -66,21 +67,22 @@ def escape_rows(rows, nulls_only=False, encoding=None):
   return data
 
 
-def make_notebook(name='Browse', description='', editor_type='hive', statement='', status='ready',
-                  files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False,
-                  on_success_url=None, skip_historify=False, is_task=False, last_executed=-1, is_notebook=False, pub_sub_url=None, result_properties={},
-                  namespace=None, compute=None):
+def make_notebook(
+    name='Browse', description='', editor_type='hive', statement='', status='ready',
+    files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False,
+    on_success_url=None, skip_historify=False, is_task=False, last_executed=-1, is_notebook=False, pub_sub_url=None, result_properties={},
+    namespace=None, compute=None):
   '''
   skip_historify: do not add the task to the query history. e.g. SQL Dashboard
   is_task / isManaged: true when being a managed by Hue operation (include_managed=True in document), e.g. exporting query result, dropping some tables
   '''
   from notebook.connectors.hiveserver2 import HS2Api
 
-  # TODO: remove
-  # impala can have compute name appended to the editor_type (impala/dbms.py - get_query_server_config)
-  if editor_type.startswith('impala'):
-    editor_type = 'impala'
-    editor_connector = 'impala-xx'
+  # impala can have compute name appended to the editor_type (impala/dbms.py - get_query_server_config) # TODO: remove
+  if has_connectors():
+    interpreter = get_interpreter(connector_type=editor_type)
+    editor_connector = editor_type
+    editor_type = interpreter['dialect']
   else:
     editor_connector = editor_type