Răsfoiți Sursa

HUE-1969 [beeswax] Beeswax polishing

Fixed errors when saving design by using setErrors.
Added isRunning states when fetching results and whilst saving results.
Dsiabled explain when a query is running.
Abraham Elmahrek 11 ani în urmă
părinte
comite
b1e6aad

+ 6 - 1
apps/beeswax/src/beeswax/api.py

@@ -321,7 +321,12 @@ def save_query_design(request, design_id=None):
       response['design_id'] = design.id
       response['status'] = 0
     else:
-      response['errors'] = query_form.errors
+      response['errors'] = {
+        'query': [query_form.query.errors],
+        'settings': query_form.settings.errors,
+        'file_resources': query_form.file_resources.errors,
+        'functions': query_form.functions.errors
+      }
   except RuntimeError, e:
     response['message'] = str(e)
 

+ 16 - 2
apps/beeswax/src/beeswax/templates/execute.mako

@@ -273,7 +273,7 @@ ${layout.menubar(section='query')}
 
             <button data-bind="click: trySaveDesign, css: {'hide': !$root.design.id() || $root.design.id() == -1}" type="button" class="btn hide">${_('Save')}</button>
             <button data-bind="click: saveAsModal" type="button" class="btn">${_('Save as...')}</button>
-            <button data-bind="click: tryExplainQuery" type="button" id="explainQuery" class="btn">${_('Explain')}</button>
+            <button data-bind="click: tryExplainQuery, visible: $root.canExecute" type="button" id="explainQuery" class="btn">${_('Explain')}</button>
             &nbsp; ${_('or create a')} &nbsp;
             <button data-bind="click: createNewQuery" type="button" class="btn">${_('New query')}</button>
             <br/><br/>
@@ -1951,9 +1951,23 @@ $(document).on('server.unmanageable_error', function (e, responseText) {
 
 // Other
 $(document).on('saved.design', function (e, id) {
-  $(document).trigger('info', "${'Query saved.'}");
+  $(document).trigger('info', "${_('Query saved.')}");
   window.location.href = "/${ app_name }/execute/design/" + id;
 });
+$(document).on('error_save.design', function (e, message) {
+  var _message = "${_('Could not save design')}";
+  if (message) {
+    _message += ": " + message;
+  }
+  $(document).trigger('error', _message);
+});
+$(document).on('error_save.results', function (e, message) {
+  var _message = "${_('Could not save results')}";
+  if (message) {
+    _message += ": " + message;
+  }
+  $(document).trigger('error', _message);
+});
 $(document).on('error_cancel.query', function (e, message) {
   $(document).trigger("error", "${ _('Problem: ') }" + message);
 });

+ 18 - 4
apps/beeswax/static/js/beeswax.vm.js

@@ -139,7 +139,9 @@ function BeeswaxViewModel(server) {
 
   self.setErrors = function(message, errors) {
     self.resetErrors();
-    self.design.errors.push(message);
+    if (message) {
+      self.design.errors.push(message);
+    }
     if (errors) {
       self.design.query.errors.push.apply(self.design.query.errors, errors.query);
       self.design.settings.errors.push.apply(self.design.settings.errors, errors.settings);
@@ -581,6 +583,7 @@ function BeeswaxViewModel(server) {
     var TIMEOUT = 1000;
     var timer = null;
 
+    self.design.isRunning(true);
     self.design.watch.logs.removeAll();
     self.design.results.rows.removeAll();
     self.design.results.columns.removeAll();
@@ -685,8 +688,13 @@ function BeeswaxViewModel(server) {
         dataType: 'json',
         type: 'POST',
         success: function(data) {
-          self.design.id(data.design_id);
-          $(document).trigger('saved.design', [data.design_id]);
+          if (data.status == 0) {
+            self.design.id(data.design_id);
+            $(document).trigger('saved.design', [data.design_id]);
+          } else {
+            self.setErrors("", data.errors);
+            $(document).trigger('error_save.design', [data.message]);
+          }
         },
         error: function() {
           $(document).trigger('error_save.design');
@@ -744,6 +752,9 @@ function BeeswaxViewModel(server) {
 
   self.saveResults = function() {
     var self = this;
+
+    self.design.isRunning(true);
+    self.resetErrors();
     if (self.design.id()) {
       var data = {
         'database': self.database(),
@@ -770,14 +781,17 @@ function BeeswaxViewModel(server) {
             } else {
               // redirect to metastore app.
               window.location.href = data.success_url;
+              self.design.isRunning(false);
             }
             $(document).trigger('saved.results', data);
           } else {
+            self.design.isRunning(false);
             self.design.results.save.errors(data.errors);
-            $(document).trigger('error_save.results');
+            $(document).trigger('error_save.results', [data.message]);
           }
         },
         error: function(data) {
+          self.design.isRunning(false);
           self.design.results.save.errors(data);
           $(document).trigger('error_save.results');
         },