You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2015/11/07 01:41:46 UTC

incubator-zeppelin git commit: [Zeppelin-354] - List notebooks REST API

Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master e3e61832b -> 27b7ad52b


[Zeppelin-354] - List notebooks REST API

replacing PR #367
This is the implementation, test and documentation of List notebooks REST API.
The documentation include sample JSON with different looknfeel option and coron options.
This is ready for review.

Author: eranwitkon <go...@gmail.com>

Closes #369 from eranwitkon/354 and squashes the following commits:

5472620 [eranwitkon] update getNotebook list documentation
b2dad81 [eranwitkon] revert to original implementation as getNotebookList does not need the exclusionStrategy anymore
0eff22e [eranwitkon] update getList test
c2f1c5f [eranwitkon] update getNotebookList to use NotebookServer.generateNotebookInfo function
d0b6744 [eranwitkon] refactor broadcastNoteList to use a new public generateNotebookList function which will be used in both socket implementation and REST implementation.
1e3d98c [eranwitkon] List Notebook REST API implementation, Test & documentation
ee53446 [eranwitkon] List Notebook REST API implementation, Test & documentation


Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/27b7ad52
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/27b7ad52
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/27b7ad52

Branch: refs/heads/master
Commit: 27b7ad52b6bf8f18643e8b58d16fcab3d709eb1c
Parents: e3e6183
Author: eranwitkon <go...@gmail.com>
Authored: Wed Nov 4 15:09:06 2015 +0200
Committer: Lee moon soo <mo...@apache.org>
Committed: Sat Nov 7 09:41:37 2015 +0900

----------------------------------------------------------------------
 .../rest-json-notebook-list-response.json       |  1 +
 docs/docs/rest-api/rest-notebook.md             | 34 +++++++++++++++++++-
 .../apache/zeppelin/rest/NotebookRestApi.java   |  4 ++-
 .../apache/zeppelin/socket/NotebookServer.java  | 18 +++++++----
 .../zeppelin/rest/ZeppelinRestApiTest.java      | 18 +++++++++++
 5 files changed, 67 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/27b7ad52/docs/docs/rest-api/rest-json/rest-json-notebook-list-response.json
----------------------------------------------------------------------
diff --git a/docs/docs/rest-api/rest-json/rest-json-notebook-list-response.json b/docs/docs/rest-api/rest-json/rest-json-notebook-list-response.json
new file mode 100644
index 0000000..ba424a9
--- /dev/null
+++ b/docs/docs/rest-api/rest-json/rest-json-notebook-list-response.json
@@ -0,0 +1 @@
+{"status":"OK","message":"","body":[{"name":"Homepage","id":"2AV4WUEMK"},{"name":"Zeppelin Tutorial","id":"2A94M5J1Z"}]}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/27b7ad52/docs/docs/rest-api/rest-notebook.md
----------------------------------------------------------------------
diff --git a/docs/docs/rest-api/rest-notebook.md b/docs/docs/rest-api/rest-notebook.md
index 1c367ce..f50668b 100644
--- a/docs/docs/rest-api/rest-notebook.md
+++ b/docs/docs/rest-api/rest-notebook.md
@@ -20,11 +20,43 @@ group: rest-api
  <br />
 ### Notebook REST API list
   
-  Notebooks can be created, deleted or cloned using the following REST API
+  Notebooks REST API supports the following operations: List, Create, Delete & Clone as detailed in the following table 
   
   <table class="table-configuration">
     <col width="200">
     <tr>
+      <th>List notebooks</th>
+      <th></th>
+    </tr>
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method list the available notebooks on your server.
+          Notebook JSON contains the ```name``` and ```id``` of all notebooks.
+      </td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/notebook```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td> sample JSON response </td>
+      <td> [List response sample](rest-json/rest-json-notebook-list-response.json) </td>
+    </tr>
+  </table>
+  
+<br/>
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
       <th>Create notebook</th>
       <th></th>
     </tr>

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/27b7ad52/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
index aabc8c6..2b98633 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
@@ -20,6 +20,7 @@ package org.apache.zeppelin.rest;
 import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.Response;
@@ -117,7 +118,8 @@ public class NotebookRestApi {
   @GET
   @Path("/")
   public Response getNotebookList() throws IOException {
-    return new JsonResponse(Status.OK, "", notebook.getAllNotes() ).build();
+    List<Map<String, String>> notesInfo = notebookServer.generateNotebooksInfo();
+    return new JsonResponse(Status.OK, "", notesInfo ).build();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/27b7ad52/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
index c6aa846..421e9a2 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
@@ -273,17 +273,13 @@ public class NotebookServer extends WebSocketServlet implements
     }
   }
 
-  public void broadcastNote(Note note) {
-    broadcast(note.id(), new Message(OP.NOTE).put("note", note));
-  }
-
-  public void broadcastNoteList() {
+  public List<Map<String, String>> generateNotebooksInfo (){
     Notebook notebook = notebook();
 
     ZeppelinConfiguration conf = notebook.getConf();
     String homescreenNotebookId = conf.getString(ConfVars.ZEPPELIN_NOTEBOOK_HOMESCREEN);
     boolean hideHomeScreenNotebookFromList = conf
-        .getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE);
+            .getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE);
 
     List<Note> notes = notebook.getAllNotes();
     List<Map<String, String>> notesInfo = new LinkedList<>();
@@ -299,6 +295,16 @@ public class NotebookServer extends WebSocketServlet implements
       notesInfo.add(info);
     }
 
+    return notesInfo;
+  }
+
+  public void broadcastNote(Note note) {
+    broadcast(note.id(), new Message(OP.NOTE).put("note", note));
+  }
+
+  public void broadcastNoteList() {
+
+    List<Map<String, String>> notesInfo = generateNotebooksInfo();
     broadcastAll(new Message(OP.NOTES_INFO).put("notes", notesInfo));
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/27b7ad52/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
index bffc888..8c8ff07 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
@@ -145,6 +145,8 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
     assertTrue(0 < body.size());
 
     get.releaseConnection();
+    //cleanup
+    ZeppelinServer.notebook.removeNote(note.getId());
   }
 
   @Test
@@ -179,6 +181,8 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
       Thread.sleep(100);
     }
     assertEquals("<p>markdown restarted</p>\n", p.getResult().message());
+    //cleanup
+    ZeppelinServer.notebook.removeNote(note.getId());
   }
 
   @Test
@@ -236,6 +240,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
     testDeleteNotebook("bad_ID");
   }
 
+
   private void testDeleteNotebook(String notebookId) throws IOException {
 
     DeleteMethod delete = httpDelete(("/notebook/" + notebookId));
@@ -282,5 +287,18 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
     ZeppelinServer.notebook.removeNote(newNote.getId());
     post.releaseConnection();
   }
+
+  @Test
+  public void testListNotebooks() throws IOException {
+    LOG.info("testListNotebooks");
+    GetMethod get = httpGet("/notebook/ ");
+    assertThat("List notebooks method", get, isAllowed());
+    Map<String, Object> resp = gson.fromJson(get.getResponseBodyAsString(), new TypeToken<Map<String, Object>>() {
+    }.getType());
+    List<Map<String, String>> body = (List<Map<String, String>>) resp.get("body");
+    assertEquals("List notebooks are equal", ZeppelinServer.notebook.getAllNotes().size(), body.size());
+    get.releaseConnection();
+  }
+
 }