Эх сурвалжийг харах

HUE-4963 [metastore] Convert partition browsing to responsive

Romain Rigaux 8 жил өмнө
parent
commit
893c776

+ 21 - 11
apps/metastore/src/metastore/templates/metastore.mako

@@ -198,18 +198,18 @@ ${ components.menubar() }
       <!-- ko foreach: values -->
       <tr>
         <td data-bind="text: $index() + 1"></td>
-        <td>
-          <!-- ko if: !IS_HUE_4 -->
-            <a data-bind="click: function() { browsePartition(notebookUrl, 'query'); }, text: '[\'' + columns.join('\',\'') + '\']'" href="javascript:void(0)"></a>
+        <td title="${_('Query partition data')}">
+          <!-- ko if: IS_HUE_4 -->
+            <a data-bind="click: function() { queryAndWatch(notebookUrl); }, text: '[\'' + columns.join('\',\'') + '\']'" href="javascript:void(0)"></a>
           <!-- /ko -->
-          <!-- ko if:  IS_HUE_4 -->
+          <!-- ko if: ! IS_HUE_4 -->
             <a data-bind="attr: {'href': readUrl }, text: '[\'' + columns.join('\',\'') + '\']'"></a>
           <!-- /ko -->
         </td>
         <td data-bind="text: partitionSpec"></td>
         <td>
           <!-- ko if: IS_HUE_4 -->
-            <a data-bind="click: function () { browsePartition(browseUrl, 'files'); }" href="javascript:void(0)" title="${_('Browse partition files')}">
+            <a data-bind="click: function () { browsePartitionFolder(browseUrl); }" href="javascript:void(0)" title="${_('Browse partition files')}">
               ${_('Files')}
             </a>
           <!-- /ko -->
@@ -1170,16 +1170,26 @@ ${ components.menubar() }
     });
   }
 
-  function browsePartition(url, type) {
+  function browsePartitionFolder(url) {
     $.get(url, {
       format: "json"
     },function(resp) {
       if (resp.uri_path) {
-        if (type == 'file') {
-          huePubSub.publish('open.fb.folder', resp.uri_path.replace(/\/filebrowser\/view=/g, '') );
-        } else {
-          huePubSub.publish('open.link', resp.uri_path);
-        }
+        huePubSub.publish('open.fb.folder', resp.uri_path.replace(/\/filebrowser\/view=/g, '') );
+      } else if (resp.message) {
+        $(document).trigger("error", resp.message);
+      }
+    }).fail(function (xhr) {
+      $(document).trigger("error", xhr.responseText);
+    });
+  }
+
+  function queryAndWatch(url) {
+    $.post(url, {
+      format: "json"
+    },function(resp) {
+      if (resp.history_uuid) {
+        huePubSub.publish('open.editor.query', resp.history_uuid);
       } else if (resp.message) {
         $(document).trigger("error", resp.message);
       }

+ 7 - 0
desktop/core/src/desktop/templates/responsive.mako

@@ -550,6 +550,13 @@ ${ assist.assistPanel() }
           window.location.hash = path;
         });
 
+        huePubSub.subscribe('open.editor.query', function (uuid) {
+          self.currentApp('editor');
+          self.getActiveAppViewModel(function (viewModel) {
+            viewModel.openNotebook(uuid);
+          })
+        });
+
         huePubSub.subscribe('open.link', function (href) {
           if (href.startsWith('/notebook/editor')){
             if (hueUtils.getSearchParameter(href, 'editor') !== '') {

+ 15 - 10
desktop/libs/notebook/src/notebook/views.py

@@ -146,17 +146,22 @@ def browse(request, database, table, partition_spec=None):
   statement = get_api(request, snippet).get_browse_query(snippet, database, table, partition_spec)
 
   editor_type = snippet['type']
-  editor = make_notebook(name='Browse', editor_type=editor_type, statement=statement, status='ready-execute')
 
-  return render('editor.mako', request, {
-      'notebooks_json': json.dumps([editor.get_data()]),
-      'options_json': json.dumps({
-          'languages': get_ordered_interpreters(request.user),
-          'mode': 'editor',
-          'editor_type': editor_type
-      }),
-      'editor_type': editor_type,
-  })
+  if request.method == 'POST':
+    notebook = make_notebook(name='Execute and watch', editor_type=editor_type, statement=statement, status='ready-execute', is_task=True)
+    return JsonResponse(notebook.execute(request, batch=False))
+  else:
+    editor = make_notebook(name='Browse', editor_type=editor_type, statement=statement, status='ready-execute')
+
+    return render('editor.mako', request, {
+        'notebooks_json': json.dumps([editor.get_data()]),
+        'options_json': json.dumps({
+            'languages': get_ordered_interpreters(request.user),
+            'mode': 'editor',
+            'editor_type': editor_type
+        }),
+        'editor_type': editor_type,
+    })
 
 
 @check_document_access_permission()