Browse Source

HUE-8330 [desktop] Split the context API into namespaces and compute

Romain Rigaux 7 years ago
parent
commit
9ff85a773c

+ 2 - 2
apps/beeswax/src/beeswax/api.py

@@ -861,10 +861,10 @@ def close_session(request, session_id):
 
 
 # Proxy API for Metastore App
-def describe_table(request, database, table, cluster=None):
+def describe_table(request, database, table):
   try:
     from metastore.views import describe_table as metastore_describe_table
-    return metastore_describe_table(request, database, table, cluster=cluster)
+    return metastore_describe_table(request, database, table)
   except Exception, e:
     LOG.exception('Describe table failed')
     raise PopupException(_('Problem accessing table metadata'), detail=e)

+ 1 - 1
apps/metastore/src/metastore/templates/metastore.mako

@@ -987,7 +987,7 @@ ${ components.menubar(is_embeddable) }
               <!-- ko component: {
                 name: 'hue-drop-down',
                 params: {
-                  icon: 'fa-crosshairs',
+                  icon: 'fa-snowflake-o',
                   value: activeSourceContext,
                   entries: sourceContexts,
                   searchable: true,

+ 0 - 2
apps/metastore/src/metastore/urls.py

@@ -25,14 +25,12 @@ urlpatterns = [
   url(r'^databases/drop/?$', metastore_views.drop_database, name='drop_database'),
   url(r'^databases/(?P<database>\w+)/alter$', metastore_views.alter_database, name='alter_database'),
   url(r'^databases/(?P<database>\w+)/metadata$', metastore_views.get_database_metadata, name='get_database_metadata'),
-  url(r'^databases/(?P<database>\w+)/metadata/(?P<cluster>.+)$', metastore_views.get_database_metadata, name='get_database_metadata'),
 
   url(r'^tables/(?P<database>\w+)?/?$', metastore_views.show_tables, name='show_tables'),
   url(r'^tables/drop/(?P<database>\w+)$', metastore_views.drop_table, name='drop_table'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/?$', metastore_views.describe_table, name='describe_table'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/alter$', metastore_views.alter_table, name='alter_table'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/metadata$', metastore_views.get_table_metadata, name='get_table_metadata'),
-  url(r'^table/(?P<database>\w+)/(?P<table>\w+)/metadata/(?P<cluster>.+)$', metastore_views.get_table_metadata, name='get_table_metadata'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/load$', metastore_views.load_table, name='load_table'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/read$', metastore_views.read_table, name='read_table'),
   url(r'^table/(?P<database>\w+)/(?P<table>\w+)/queries$', metastore_views.table_queries, name='table_queries'),

+ 3 - 1
apps/metastore/src/metastore/views.py

@@ -264,8 +264,10 @@ def get_table_metadata(request, database, table):
   return JsonResponse(response)
 
 
-def describe_table(request, database, table, cluster=None):
+def describe_table(request, database, table):
   app_name = get_app_name(request)
+  cluster = request.GET.get('cluster')
+
   db = _get_db(user=request.user, cluster=cluster)
 
   try:

+ 30 - 30
desktop/core/src/desktop/api2.py

@@ -77,39 +77,39 @@ def get_config(request):
 
 
 @api_error_handler
-def get_context(request, app, engine):
-  context = {}
+def get_context_namespaces(request, interface):
+  namespaces = {}
 
   clusters = get_clusters(request.user).values()
 
-  if app == 'editor':
-    if engine == 'hive':
-      context['editor'] = {
-        'hive': {
-          'computes': [
-            {
-              'id': cluster['id'],
-              'name': cluster['name']
-            } for cluster in clusters
-          ]
-        }
-      }
-  elif app == 'browser':
-    if engine == 'hive':
-      context['browser'] = {
-        'hive': {
-          'namespaces': [
-            {
-              'id': cluster['id'],
-              'name': cluster['name']
-            } for cluster in clusters
-          ]
-        }
-      }
-
-  context['status'] = 0
-
-  return JsonResponse(context)
+  if interface == 'hive':
+    namespaces['hive'] = [{
+        'id': cluster['id'],
+        'name': cluster['name']
+      } for cluster in clusters
+    ]
+
+  namespaces['status'] = 0
+
+  return JsonResponse(namespaces)
+
+
+@api_error_handler
+def get_context_computes(request, interface):
+  computes = {}
+
+  clusters = get_clusters(request.user).values()
+
+  if interface == 'hive':
+    computes['hive'] = [{
+        'id': cluster['id'],
+        'name': cluster['name']
+      } for cluster in clusters
+    ]
+
+  computes['status'] = 0
+
+  return JsonResponse(computes)
 
 
 @api_error_handler

+ 9 - 7
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -1393,13 +1393,15 @@ var ApiHelper = (function () {
       }
     }
 
-    if (window.context) {
-      url += '/' + window.context;
+    var params = {
+      'format' : 'json'
     }
 
-    var request = self.simpleGet(url, {
-      'format' : 'json'
-    }, {
+    if (options.sourceContext && options.sourceContext.id) {
+      params['cluster'] = options.sourceContext.id;
+    }
+
+    var request = self.simpleGet(url, params, {
       silenceErrors: options.silenceErrors,
       successCallback: function (response) {
         if (options.path.length === 1) {
@@ -1947,9 +1949,9 @@ var ApiHelper = (function () {
     return new CancellablePromise(deferred, request);
   };
 
-  ApiHelper.prototype.fetchSourceContexts = function (options) {
+  ApiHelper.prototype.fetchSourceContexts = function (options) { // TODO rename
     var self = this;
-    var url = '/desktop/api2/context/' + options.app + '/' + options.sourceType;
+    var url = '/desktop/api2/context/namespaces/' + options.sourceType;
     return self.simpleGet(url, undefined, options);
   };
 

+ 5 - 5
desktop/core/src/desktop/static/desktop/js/contextHelper.js

@@ -75,11 +75,11 @@ var ContextCatalog = (function () {
       self.sourceContextsPromises[options.sourceType] = deferred.promise();
 
       ApiHelper.getInstance().fetchSourceContexts(options).done(function (sourceContexts) {
-        if (sourceContexts[self.app] && sourceContexts[self.app][options.sourceType]) {
-          var context = sourceContexts[self.app][options.sourceType];
+        if (sourceContexts[options.sourceType]) {
+          var namespaces = sourceContexts[options.sourceType];
           // TODO: For now we only care about namespaces.
-          if (context.namespaces) {
-            self.sourceContexts[self.sourceType] = context.namespaces;
+          if (namespaces) {
+            self.sourceContexts[self.sourceType] = namespaces;
             deferred.resolve(self.sourceContexts[self.sourceType])
             // TODO: save
           } else {
@@ -90,7 +90,7 @@ var ContextCatalog = (function () {
         }
       });
 
-      return deferred.promise({ name: 'foo' });
+      return deferred.promise({ name: 'foo' }); // TODO
     };
 
     return ContextCatalogEntry;

+ 2 - 1
desktop/core/src/desktop/urls.py

@@ -155,7 +155,8 @@ dynamic_patterns += [
   url(r'^desktop/api2/doc/share/?$', desktop_api2.share_document),
 
   url(r'^desktop/api2/get_config/?$', desktop_api2.get_config),
-  url(r'^desktop/api2/context/(?P<app>\w+)/(?P<engine>\w+)/?$', desktop_api2.get_context),
+  url(r'^desktop/api2/context/namespaces/(?P<interface>\w+)/?$', desktop_api2.get_context_namespaces),
+  url(r'^desktop/api2/context/computes/(?P<interface>\w+)/?$', desktop_api2.get_context_computes),
   url(r'^desktop/api2/user_preferences/(?P<key>\w+)?$', desktop_api2.user_preferences, name="desktop.api2.user_preferences"),
 
   url(r'^desktop/api2/doc/export/?$', desktop_api2.export_documents),