Bläddra i källkod

HUE-1176 [jb] Improve logic to support single dashboard action

Proper failover in case the user default is not available anymore too.
Romain Rigaux 8 år sedan
förälder
incheckning
b584e217e4
2 ändrade filer med 22 tillägg och 10 borttagningar
  1. 20 8
      desktop/core/src/desktop/models.py
  2. 2 2
      desktop/core/src/desktop/views.py

+ 20 - 8
desktop/core/src/desktop/models.py

@@ -43,7 +43,6 @@ from settings import HUE_DESKTOP_VERSION
 
 from aws.conf import is_enabled as is_s3_enabled, has_s3_access
 from dashboard.conf import IS_ENABLED as IS_DASHBOARD_ENABLED
-from hadoop.cluster import get_default_yarncluster
 from notebook.conf import SHOW_NOTEBOOKS, get_ordered_interpreters
 
 from desktop import appmanager
@@ -1515,18 +1514,30 @@ class ClusterConfig():
 
   @property
   def main_quick_action(self):
+    apps = self.get_apps()
+    if not apps:
+      raise PopupException(_('No permission to any app.'))
+
+    default_app = apps.values()[0]
+    default_interpreter = default_app.get('interpreters')
+
     try:
-      default_app = json.loads(UserPreferences.objects.get(user=self.user, key='default_app').value)
-      app = self.get_apps()[default_app['app']]
-      if default_app.get('interpreter'):
-        return [interpreter for interpreter in app['interpreters'] if interpreter['type'] == default_app['interpreter']][0]
-      else:
-        return app
+      user_default_app = json.loads(UserPreferences.objects.get(user=self.user, key='default_app').value)
+      if apps.get(user_default_app['app']):
+        default_app = self.get_apps()[user_default_app['app']]
+        if default_app.get('interpreters'):
+          interpreters = [interpreter for interpreter in default_app['interpreters'] if interpreter['type'] == default_app['interpreter']]
+          if interpreters:
+            default_interpreter = interpreter[0]
     except UserPreferences.DoesNotExist:
       pass
     except Exception:
       LOG.exception('Could not load back default app')
-    return self.get_apps().values()[0]['interpreters'][0]
+
+    if default_interpreter:
+      return default_interpreter[0]
+    else:
+      return default_app
 
 
   def _get_editor(self):
@@ -1609,6 +1620,7 @@ class ClusterConfig():
       })
 
     if 'jobbrowser' in self.apps:
+      from hadoop.cluster import get_default_yarncluster # Circular loop
       if get_default_yarncluster():
         interpreters.append({
           'type': 'yarn',

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

@@ -50,13 +50,13 @@ from desktop.api import massaged_tags_for_json, massaged_documents_for_json, _ge
 from desktop.conf import USE_NEW_EDITOR, IS_HUE_4, HUE_LOAD_BALANCER, HTTP_PORT
 from desktop.lib import django_mako
 from desktop.lib.conf import GLOBAL_CONFIG, BoundConfig
-from desktop.lib.django_util import JsonResponse, login_notrequired, render_json, render
+from desktop.lib.django_util import JsonResponse, login_notrequired, render
 from desktop.lib.i18n import smart_str
 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 UserPreferences, Settings, hue_version, ClusterConfig, _get_apps
+from desktop.models import Settings, hue_version, ClusterConfig, _get_apps
 
 
 LOG = logging.getLogger(__name__)