فهرست منبع

HUE-8758 [connectors] Start adding the dialect properties to cluster get_config

Romain 5 سال پیش
والد
کامیت
7fbb926964

+ 2 - 2
desktop/core/src/desktop/lib/connectors/models.py

@@ -100,9 +100,9 @@ def _get_installed_connectors(category=None, categories=None, dialect=None, inte
           'settings': config_connectors[i].SETTINGS.get(),
           'id': CONNECTOR_IDS,
           'category': connector_type['category'],
-          'description': connector_type['description']
+          'description': connector_type['description'],
+          'dialect_properties': connector_type.get('properties', {})
         }
-        connector.update(connector_type['properties'])
         CONNECTOR_INSTANCES.append(connector)
         CONNECTOR_IDS += 1
 

+ 12 - 1
desktop/core/src/desktop/lib/connectors/types.py

@@ -83,7 +83,18 @@ CONNECTOR_TYPES = [
     'settings': [{'name': 'url', 'value': 'mysql://username:password@mysq-host:3306/hue'}],
     'category': 'editor',
     'description': '',
-    'properties': {'is_sql': True}
+    'properties': {
+      'is_sql': True,
+      'sql_identifier_quote': '`',
+      'sql_identifier_comment_single': '--',
+      'has_catalog': True,
+      'has_database': True,
+      'has_table': True,
+      'has_live_queries': False,
+      'has_optimizer_risks': False,
+      'has_optimizer_values': False,
+      'has_auto_limit': False,
+    }
   },
   {'nice_name': "Presto", 'dialect': 'presto', 'interface': 'sqlalchemy', 'settings': [], 'category': 'editor', 'description': '', 'properties': {'is_sql': True}},
   {'nice_name': "Athena", 'dialect': 'athena', 'interface': 'sqlalchemy', 'settings': [], 'category': 'editor', 'description': '', 'properties': {'is_sql': True}},

+ 1 - 0
desktop/core/src/desktop/models.py

@@ -1737,6 +1737,7 @@ class ClusterConfig(object):
           'page': '/editor/?type=%(type)s' % interpreter,
           'is_sql': interpreter['is_sql'],
           'dialect': interpreter['dialect'],
+          'dialect_properties': interpreter.get('dialect_properties'),
         })
 
     if SHOW_NOTEBOOKS.get():

+ 3 - 1
desktop/libs/notebook/src/notebook/conf.py

@@ -63,7 +63,8 @@ def get_ordered_interpreters(user=None):
         'category': connector['category'],
         'is_sql': connector.get('is_sql', False),
         'interface': connector['interface'],
-        'options': {setting['name']: setting['value'] for setting in connector['settings']}
+        'options': {setting['name']: setting['value'] for setting in connector['settings']},
+        'dialect_properties': connector['dialect_properties'],
       } for connector in _get_installed_connectors(categories=['editor', 'catalogs'], user=user)
     ]
   else:
@@ -101,6 +102,7 @@ def get_ordered_interpreters(user=None):
       "interface": i['interface'],
       "options": i['options'],
       'dialect': i.get('dialect', i['name']).lower(),
+      'dialect_properties': i.get('dialect_properties'),
       'category': i.get('category', 'editor'),
       "is_sql": i.get('is_sql') or i['interface'] in ["hiveserver2", "rdbms", "jdbc", "solr", "sqlalchemy", "ksql", "flink"],
       "is_catalog": i['interface'] in ["hms",],

+ 53 - 1
desktop/libs/notebook/src/notebook/conf_tests.py

@@ -15,6 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import unittest
 import sys
 
 from nose.plugins.skip import SkipTest
@@ -26,7 +27,7 @@ from desktop.lib.connectors.api import _get_installed_connectors
 from desktop.lib.django_test_util import make_logged_in_client
 from useradmin.models import User, update_app_permissions, get_default_user_group
 
-from notebook.conf import config_validator
+from notebook.conf import config_validator, get_ordered_interpreters
 
 
 if sys.version_info[0] > 2:
@@ -35,6 +36,57 @@ else:
   from mock import patch, Mock
 
 
+class TestInterpreterConfig(unittest.TestCase):
+
+  def setUp(self):
+    self.client = make_logged_in_client(
+        username='test_check_config',
+        groupname=get_default_user_group(),
+        recreate=True,
+        is_superuser=False
+    )
+    self.user = User.objects.get(username='test_check_config')
+    self.user = rewrite_user(self.user)
+
+  @classmethod
+  def setUpClass(cls):
+    cls._class_resets = [
+      ENABLE_CONNECTORS.set_for_testing(True),
+    ]
+
+  @classmethod
+  def tearDownClass(cls):
+    for reset in cls._class_resets:
+      reset()
+
+
+  def test_get_ordered_interpreters(self):
+    with patch('desktop.lib.connectors.api._get_installed_connectors') as _get_installed_connectors:
+      _get_installed_connectors.return_value = [{
+          'nice_name': 'Hive',
+          'name': 'hive-1',
+          'dialect': 'hive',
+          'category': 'editor',
+          'is_sql': True,
+          'interface': 'hiveserver2',
+          'settings': {},
+          'dialect_properties': {'sql_identifier_quote': '`',},
+        }
+      ]
+
+      interpreters = get_ordered_interpreters(user=self.user)
+
+      assert_true(interpreters, interpreters)
+      assert_true(all(['dialect_properties' in interpreter for interpreter in interpreters]), interpreters)
+      assert_true(
+        any([
+          interpreter.get('dialect_properties').get('sql_identifier_quote')
+          for interpreter in interpreters
+        ]),
+        interpreters
+      )
+
+
 class TestCheckConfig():
 
   def setUp(self):

+ 8 - 8
desktop/libs/notebook/src/notebook/tests.py

@@ -488,31 +488,31 @@ class TestNotebookApiMocked(object):
 def test_get_interpreters_to_show():
   default_interpreters = OrderedDict((
       ('hive', {
-          'name': 'Hive', 'interface': 'hiveserver2', 'type': 'hive', 'is_sql': True, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'hive'
+          'name': 'Hive', 'interface': 'hiveserver2', 'type': 'hive', 'is_sql': True, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'hive'
       }),
       ('spark', {
-          'name': 'Scala', 'interface': 'livy', 'type': 'spark', 'is_sql': False, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'scala'
+          'name': 'Scala', 'interface': 'livy', 'type': 'spark', 'is_sql': False, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'scala'
       }),
       ('pig', {
-          'name': 'Pig', 'interface': 'pig', 'type': 'pig', 'is_sql': False, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'pig'
+          'name': 'Pig', 'interface': 'pig', 'type': 'pig', 'is_sql': False, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'pig'
       }),
       ('java', {
-          'name': 'Java', 'interface': 'oozie', 'type': 'java', 'is_sql': False, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'java'
+          'name': 'Java', 'interface': 'oozie', 'type': 'java', 'is_sql': False, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'java'
       })
     ))
 
   expected_interpreters = OrderedDict((
       ('java', {
-        'name': 'Java', 'interface': 'oozie', 'type': 'java', 'is_sql': False, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'java'
+        'name': 'Java', 'interface': 'oozie', 'type': 'java', 'is_sql': False, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'java'
       }),
       ('pig', {
-        'name': 'Pig', 'interface': 'pig', 'is_sql': False, 'type': 'pig', 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'pig'
+        'name': 'Pig', 'interface': 'pig', 'is_sql': False, 'type': 'pig', 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'pig'
       }),
       ('hive', {
-          'name': 'Hive', 'interface': 'hiveserver2', 'is_sql': True, 'type': 'hive', 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'hive'
+          'name': 'Hive', 'interface': 'hiveserver2', 'is_sql': True, 'type': 'hive', 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'hive'
       }),
       ('spark', {
-          'name': 'Scala', 'interface': 'livy', 'type': 'spark', 'is_sql': False, 'options': {}, 'is_catalog': False, 'category': 'editor', 'dialect': 'scala'
+          'name': 'Scala', 'interface': 'livy', 'type': 'spark', 'is_sql': False, 'options': {}, 'dialect_properties': None, 'is_catalog': False, 'category': 'editor', 'dialect': 'scala'
       })
     ))