浏览代码

HUE-3383 [editor] Move historify to the backend

Romain Rigaux 9 年之前
父节点
当前提交
0bbf81d

+ 9 - 13
desktop/libs/notebook/src/notebook/api.py

@@ -82,7 +82,12 @@ def execute(request):
   notebook = json.loads(request.POST.get('notebook', '{}'))
   notebook = json.loads(request.POST.get('notebook', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
   snippet = json.loads(request.POST.get('snippet', '{}'))
 
 
-  response['handle'] = get_api(request, snippet).execute(notebook, snippet)
+  try:
+    response['handle'] = get_api(request, snippet).execute(notebook, snippet)
+  finally:
+    if notebook['type'].startswith('query-'):
+      history = _historify(notebook, request.user)
+      response['history_id'] = history.id
 
 
   # Materialize and HTML escape results
   # Materialize and HTML escape results
   if response['handle'].get('sync') and response['handle']['result'].get('data'):
   if response['handle'].get('sync') and response['handle']['result'].get('data'):
@@ -233,19 +238,14 @@ def save_notebook(request):
   return JsonResponse(response)
   return JsonResponse(response)
 
 
 
 
-@require_POST
-@api_error_handler
-@check_document_access_permission()
-def historify(request):
-  response = {'status': -1}
 
 
-  notebook = json.loads(request.POST.get('notebook', '{}'))
+def _historify(notebook, user):
   query_type = notebook['type']
   query_type = notebook['type']
 
 
   history_doc = Document2.objects.create(
   history_doc = Document2.objects.create(
     name=notebook['name'],
     name=notebook['name'],
     type=query_type,
     type=query_type,
-    owner=request.user,
+    owner=user,
     is_history=True
     is_history=True
   )
   )
   Document.objects.link(
   Document.objects.link(
@@ -259,11 +259,7 @@ def historify(request):
   history_doc.update_data(notebook)
   history_doc.update_data(notebook)
   history_doc.save()
   history_doc.save()
 
 
-  response['status'] = 0
-  response['id'] = history_doc.id
-  response['message'] = _('Query notebook history saved !')
-
-  return JsonResponse(response)
+  return history_doc
 
 
 
 
 @require_GET
 @require_GET

+ 1 - 1
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
 
 
 try:
 try:
   from beeswax import data_export
   from beeswax import data_export
-  from beeswax.api import _autocomplete, _get_sample_data, explain_directly
+  from beeswax.api import _autocomplete, _get_sample_data
   from beeswax.data_export import upload
   from beeswax.data_export import upload
   from beeswax.design import hql_query, strip_trailing_semicolon, split_statements
   from beeswax.design import hql_query, strip_trailing_semicolon, split_statements
   from beeswax import conf as beeswax_conf
   from beeswax import conf as beeswax_conf

+ 4 - 12
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -538,7 +538,7 @@
       }
       }
 
 
       $.post("/notebook/api/execute", {
       $.post("/notebook/api/execute", {
-        notebook: ko.mapping.toJSON(notebook.getContext()),
+        notebook: vm.editorMode ? ko.mapping.toJSON(notebook, NOTEBOOK_MAPPING) : ko.mapping.toJSON(notebook.getContext()),
         snippet: ko.mapping.toJSON(self.getContext())
         snippet: ko.mapping.toJSON(self.getContext())
       }, function (data) {
       }, function (data) {
         self.statusForButtons('executed');
         self.statusForButtons('executed');
@@ -562,20 +562,12 @@
         } else {
         } else {
           self._ajaxError(data, self.execute);
           self._ajaxError(data, self.execute);
         }
         }
+        if (vm.editorMode && data.history_id){
+          hueUtils.changeURL('/notebook/editor?editor=' + data.history_id);
+        }
       }).fail(function (xhr, textStatus, errorThrown) {
       }).fail(function (xhr, textStatus, errorThrown) {
         $(document).trigger("error", xhr.responseText);
         $(document).trigger("error", xhr.responseText);
         self.status('failed');
         self.status('failed');
-      })
-      .always(function() {
-        if (notebook.type() != 'notebook') {
-          $.post("/notebook/api/historify", {
-            notebook: ko.mapping.toJSON(notebook, NOTEBOOK_MAPPING)
-          }, function(data){
-            if (vm.editorMode && data && data.status == 0 && data.id){
-              hueUtils.changeURL('/notebook/editor?editor=' + data.id);
-            }
-          });
-        }
       });
       });
     };
     };
 
 

+ 0 - 1
desktop/libs/notebook/src/notebook/urls.py

@@ -59,7 +59,6 @@ urlpatterns += patterns('notebook.api',
 
 
   url(r'^api/explain/?$', 'explain', name='explain'),
   url(r'^api/explain/?$', 'explain', name='explain'),
 
 
-  url(r'^api/historify/?$', 'historify', name='historify'),
   url(r'^api/get_history/?', 'get_history', name='get_history'),
   url(r'^api/get_history/?', 'get_history', name='get_history'),
   url(r'^api/clear_history/?', 'clear_history', name='clear_history'),
   url(r'^api/clear_history/?', 'clear_history', name='clear_history'),