Преглед изворни кода

[notebook] Add history to single snippet mode

Romain Rigaux пре 10 година
родитељ
комит
a206abfb65

+ 43 - 0
desktop/libs/notebook/src/notebook/api.py

@@ -222,6 +222,49 @@ def save_notebook(request):
 
   return JsonResponse(response)
 
+
+@require_POST
+# @check_document_modify_permission()
+def historify(request):
+  response = {'status': -1}
+
+  parent = request.POST.get('parent_id')  # If we had an history to a saved notebook
+  history = json.loads(request.POST.get('notebook', '{}'))
+
+  history_doc = Document2.objects.create(name=history['name'], type='notebook', owner=request.user)
+  Document.objects.link(history_doc, owner=history_doc.owner, name=history_doc.name, description=history_doc.description, extra='notebook')
+
+  history_doc1 = history_doc.doc.get()
+  history_doc.update_data(history)
+  history_doc.name = history_doc1.name = history['name']
+  history_doc.description = history_doc1.description = history.get('description', '')
+  history_doc.is_history = True
+  history_doc.save()
+  history_doc1.save()
+
+  if parent:
+    Document2.objects.get(id=parent['id']).dependencies.add(history_doc)
+    
+  response['status'] = 0
+  response['id'] = history_doc.id
+  response['message'] = _('Notebook saved !')
+
+  return JsonResponse(response)
+
+
+def get_history(request):
+  response = {'status': -1}
+  
+  response['status'] = 0
+  response['history'] = [{
+      'name': doc.name,
+      'id': doc.id
+      } for doc in Document2.objects.filter(type='notebook', owner=request.user, is_history=True).order_by('-last_modified')]
+  response['message'] = _('Notebook saved !')
+
+  return JsonResponse(response)
+
+
 @require_GET
 @check_document_access_permission()
 def open_notebook(request):

+ 10 - 0
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -418,6 +418,10 @@
         self.close();
       }
 
+      $.post("/notebook/api/historify", {
+        notebook: ko.mapping.toJSON(self, SPARK_MAPPING)
+      });
+
       $.post("/notebook/api/execute", {
         notebook: ko.mapping.toJSON(notebook.getContext()),
         snippet: ko.mapping.toJSON(self.getContext())
@@ -940,6 +944,12 @@
       });
     };
 
+    self.fetchHistory = function () {
+      $.get("/notebook/api/get_history", {}, function(data) {
+        console.log(data);
+      });
+    };
+   
     self.exportJupyterNotebook = function () {
       function addCell(type, code) {
         var cell = {

+ 6 - 3
desktop/libs/notebook/src/notebook/urls.py

@@ -51,9 +51,12 @@ urlpatterns += patterns('notebook.api',
   url(r'^api/check_status$', 'check_status', name='check_status'),
   url(r'^api/fetch_result_data$', 'fetch_result_data', name='fetch_result_data'),
   url(r'^api/fetch_result_metadata$', 'fetch_result_metadata', name='fetch_result_metadata'),
-  url(r'^api/cancel_statement', 'cancel_statement', name='cancel_statement'),
-  url(r'^api/close_statement', 'close_statement', name='close_statement'),
-  url(r'^api/get_logs', 'get_logs', name='get_logs'),
+  url(r'^api/cancel_statement$', 'cancel_statement', name='cancel_statement'),
+  url(r'^api/close_statement$', 'close_statement', name='close_statement'),
+  url(r'^api/get_logs$', 'get_logs', name='get_logs'),
+
+  url(r'^api/historify$', 'historify', name='historify'),
+  url(r'^api/get_history', 'get_history', name='get_history'),
 
   url(r'^api/notebook/save$', 'save_notebook', name='save_notebook'),
   url(r'^api/notebook/open$', 'open_notebook', name='open_notebook'),