Browse Source

HUE-6245 [cluster] Move user cluster retrieval logic to a class

Romain Rigaux 8 years ago
parent
commit
b50c677

+ 5 - 13
desktop/core/src/desktop/api2.py

@@ -38,13 +38,13 @@ from metadata.navigator_api import search_entities_interactive as metadata_searc
 from notebook.connectors.base import Notebook
 from notebook.views import upgrade_session_properties
 
-from desktop.conf import get_clusters
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.export_csvxls import make_response
 from desktop.lib.i18n import smart_str, force_unicode
 from desktop.models import Document2, Document, Directory, FilesystemException, uuid_default, ClusterConfig,\
-  UserPreferences, get_user_preferences, set_user_preferences, USER_PREFERENCE_CLUSTER
+  UserPreferences, get_user_preferences, set_user_preferences, USER_PREFERENCE_CLUSTER,\
+  Cluster
 
 
 LOG = logging.getLogger(__name__)
@@ -70,17 +70,9 @@ def api_error_handler(func):
 @api_error_handler
 def get_config(request):
   if request.POST.get(USER_PREFERENCE_CLUSTER):
-    cluster_type = json.loads(request.POST[USER_PREFERENCE_CLUSTER])['type']
-    if request.POST.get(USER_PREFERENCE_CLUSTER):
-      set_user_preferences(request.user, USER_PREFERENCE_CLUSTER, request.POST[USER_PREFERENCE_CLUSTER])
-  else:
-    default_cluster = get_user_preferences(request.user, key=USER_PREFERENCE_CLUSTER)
-    if default_cluster:
-      clusters = get_clusters()
-      cluster_name = json.loads(default_cluster[USER_PREFERENCE_CLUSTER]).get('name')
-      cluster_type = cluster_name and clusters.get(cluster_name) and clusters[cluster_name]['type'] or 'ini'
-    else:
-      cluster_type = 'ini'
+    set_user_preferences(request.user, USER_PREFERENCE_CLUSTER, request.POST.get(USER_PREFERENCE_CLUSTER))
+
+  cluster_type = Cluster(request.user).get_type()
 
   cluster_config = ClusterConfig(request.user, cluster_type=cluster_type)
   app_config = cluster_config.get_apps()

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

@@ -21,6 +21,7 @@ import logging
 import os
 import urllib
 import uuid
+from desktop.conf import get_clusters
 
 try:
   from collections import OrderedDict
@@ -97,6 +98,8 @@ class UserPreferences(models.Model):
   value = models.TextField(max_length=4096)
 
 
+
+
 class Settings(models.Model):
   collect_usage = models.BooleanField(db_index=True, default=True)
   tours_and_tutorials = models.BooleanField(db_index=True, default=True)
@@ -1772,6 +1775,40 @@ class ClusterConfig():
     return apps
 
 
+class Cluster():
+
+  def __init__(self, user):
+    self.user = user
+    self.default_cluster = get_user_preferences(self.user, key=USER_PREFERENCE_CLUSTER)
+    self.data = {}
+    if self.default_cluster:
+      clusters = get_clusters()
+      cluster_name = json.loads(self.default_cluster[USER_PREFERENCE_CLUSTER]).get('name')
+      self.data = cluster_name and clusters.get(cluster_name) and clusters[cluster_name] or None
+  
+  def get_type(self):
+    return self.data and self.data['type'] or 'ini'
+
+  def get_interface(self):
+    return json.loads(self.default_cluster[USER_PREFERENCE_CLUSTER]).get('interface')
+
+  def get_list_interface_indexes(self):  
+    default_cluster_index = 0
+    default_cluster_interface = ''
+  
+    clusters = get_clusters()
+    default_cluster = get_user_preferences(self.user, key=USER_PREFERENCE_CLUSTER)
+  
+    if clusters and default_cluster:
+      default_cluster_json = json.loads(default_cluster[USER_PREFERENCE_CLUSTER])
+      default_cluster_name = default_cluster_json.get('name')
+  
+      default_cluster_index = default_cluster_name in clusters.keys() and clusters.keys().index(default_cluster_name) or 0
+      default_cluster_interface = default_cluster_json.get('interface', '')
+      
+    return default_cluster_index, default_cluster_interface
+
+
 def _get_apps(user, section=None):
   current_app = None
   other_apps = []

+ 2 - 13
desktop/core/src/desktop/views.py

@@ -56,7 +56,7 @@ from desktop.lib.paths import get_desktop_root
 from desktop.lib.thread_util import dump_traceback
 from desktop.log.access import access_log_level, access_warn
 from desktop.log import set_all_debug as _set_all_debug, reset_all_debug as _reset_all_debug, get_all_debug as _get_all_debug
-from desktop.models import Settings, hue_version, _get_apps, UserPreferences, get_user_preferences, USER_PREFERENCE_CLUSTER
+from desktop.models import Settings, hue_version, _get_apps, UserPreferences, Cluster
 
 
 LOG = logging.getLogger(__name__)
@@ -69,19 +69,8 @@ def is_alive(request):
 
 def hue(request):
   apps = appmanager.get_apps_dict(request.user)
-
-  default_cluster_index = 0
-  default_cluster_interface = ''
-
   clusters = get_clusters()
-  default_cluster = get_user_preferences(request.user, key=USER_PREFERENCE_CLUSTER)
-
-  if clusters and default_cluster:
-    default_cluster_json = json.loads(default_cluster[USER_PREFERENCE_CLUSTER])
-    default_cluster_name = default_cluster_json.get('name')
-
-    default_cluster_index = default_cluster_name in clusters.keys() and clusters.keys().index(default_cluster_name) or 0
-    default_cluster_interface = default_cluster_json.get('interface', '')
+  default_cluster_index, default_cluster_interface = Cluster(request.user).get_list_interface_indexes()
 
   return render('hue.mako', request, {
     'apps': apps,

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

@@ -26,8 +26,7 @@ from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
 
 from notebook.conf import get_ordered_interpreters
-from desktop.models import get_user_preferences, USER_PREFERENCE_CLUSTER
-from desktop.conf import get_clusters
+from desktop.models import Cluster
 
 
 LOG = logging.getLogger(__name__)
@@ -213,14 +212,9 @@ def get_api(request, snippet):
   interface = interpreter['interface']
 
   # Multi cluster
-  default_cluster = get_user_preferences(request.user, key=USER_PREFERENCE_CLUSTER)
-  if default_cluster:
-    clusters = get_clusters()
-    cluster_name = json.loads(default_cluster[USER_PREFERENCE_CLUSTER]).get('name')
-    cluster_type = cluster_name and clusters.get(cluster_name) and clusters[cluster_name]['type'] or 'ini'
-
-    if cluster_type == 'dataeng':
-      interface = 'dataeng'
+  cluster = Cluster(request.user)
+  if cluster and cluster.get_type() == 'dataeng':
+    interface = 'dataeng'
 
   if interface == 'hiveserver2':
     return HS2Api(user=request.user, request=request)
@@ -235,7 +229,7 @@ def get_api(request, snippet):
   elif interface == 'rdbms':
     return RdbmsApi(request.user, interpreter=snippet['type'])
   elif interface == 'dataeng':
-    return DataEngApi(user=request.user, request=request)
+    return DataEngApi(user=request.user, request=request, cluster_name=cluster.get_interface())
   elif interface == 'jdbc':
     return JdbcApi(request.user, interpreter=interpreter)
   elif interface == 'solr':