This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new d0404f3  [ZEPPELIN-4590]. Miss line break for IRInterpreter
d0404f3 is described below

commit d0404f3484662958e22e7c25ba565b64798be214
Author: Jeff Zhang <zjf...@apache.org>
AuthorDate: Sun Feb 2 15:34:34 2020 +0800

    [ZEPPELIN-4590]. Miss line break for IRInterpreter
    
    ### What is this PR for?
    
    In ZEPPELIN-4562, I fix the googlevis issue, but cause the line break 
missing. In this PR, I will only make html output when it contains javascript 
related code 
https://github.com/apache/zeppelin/compare/master...zjffdu:ZEPPELIN-4590?expand=1#diff-ab59c27de9983f5da6d2b847d441fff3R173
    
    ### What type of PR is it?
    [Bug Fix ]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4590
    
    ### How should this be tested?
    
    Unit test is added
    
    ### Screenshots (if appropriate)
    
    * Before
    
    
![image](https://user-images.githubusercontent.com/164491/73637898-46862a00-46a4-11ea-9ede-080d49043251.png)
    
    * After
    
    
![image](https://user-images.githubusercontent.com/164491/73637278-e6db4f00-46a2-11ea-89dc-eb2dfd81e8c7.png)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zjf...@apache.org>
    
    Closes #3627 from zjffdu/ZEPPELIN-4590 and squashes the following commits:
    
    52c415a72 [Jeff Zhang] [ZEPPELIN-4590]. Miss line break for IRInterpreter
---
 .../org/apache/zeppelin/r/RInterpreterTest.java    | 18 +++++++++++++--
 .../zeppelin/spark/SparkInterpreterTest.java       | 18 +++++++--------
 .../zeppelin/jupyter/JupyterKernelClient.java      |  5 +++++
 .../zeppelin/jupyter/JupyterKernelInterpreter.java |  5 -----
 .../main/resources/grpc/jupyter/kernel_client.py   | 13 ++++++-----
 .../main/resources/grpc/jupyter/kernel_server.py   |  2 ++
 .../org/apache/zeppelin/jupyter/IRKernelTest.java  | 26 +++++++++++++++++-----
 7 files changed, 61 insertions(+), 26 deletions(-)

diff --git a/rlang/src/test/java/org/apache/zeppelin/r/RInterpreterTest.java 
b/rlang/src/test/java/org/apache/zeppelin/r/RInterpreterTest.java
index 97b9844..1652858 100644
--- a/rlang/src/test/java/org/apache/zeppelin/r/RInterpreterTest.java
+++ b/rlang/src/test/java/org/apache/zeppelin/r/RInterpreterTest.java
@@ -30,6 +30,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Properties;
 
@@ -64,13 +65,26 @@ public class RInterpreterTest {
   }
 
   @Test
-  public void testSparkRInterpreter() throws InterpreterException, 
InterruptedException {
+  public void testSparkRInterpreter() throws InterpreterException, 
InterruptedException, IOException {
     InterpreterResult result = rInterpreter.interpret("1+1", 
getInterpreterContext());
     assertEquals(InterpreterResult.Code.SUCCESS, result.code());
     assertTrue(result.message().get(0).getData().contains("2"));
 
-    // plotting
     InterpreterContext context = getInterpreterContext();
+    result = rInterpreter.interpret("foo <- TRUE\n" +
+            "print(foo)\n" +
+            "bare <- c(1, 2.5, 4)\n" +
+            "print(bare)\n" +
+            "double <- 15.0\n" +
+            "print(double)", context);
+    assertEquals(InterpreterResult.Code.SUCCESS, result.code());
+    assertTrue(result.toString(),
+                       result.message().get(0).getData().contains("[1] TRUE\n" 
+
+                               "[1] 1.0 2.5 4.0\n" +
+                               "[1] 15\n"));
+
+    // plotting
+    context = getInterpreterContext();
     context.getLocalProperties().put("imageWidth", "100");
     result = rInterpreter.interpret("hist(mtcars$mpg)", context);
     assertEquals(InterpreterResult.Code.SUCCESS, result.code());
diff --git 
a/spark/interpreter/src/test/java/org/apache/zeppelin/spark/SparkInterpreterTest.java
 
b/spark/interpreter/src/test/java/org/apache/zeppelin/spark/SparkInterpreterTest.java
index 441af36..a15b046 100644
--- 
a/spark/interpreter/src/test/java/org/apache/zeppelin/spark/SparkInterpreterTest.java
+++ 
b/spark/interpreter/src/test/java/org/apache/zeppelin/spark/SparkInterpreterTest.java
@@ -198,15 +198,6 @@ public class SparkInterpreterTest {
             ").toDF()", getInterpreterContext());
     assertEquals(InterpreterResult.Code.SUCCESS, result.code());
 
-    // create dataset from case class
-    context = getInterpreterContext();
-    result = interpreter.interpret("case class Person(id:Int, name:String, 
age:Int, country:String)\n" +
-            "val df2 = spark.createDataFrame(Seq(Person(1, \"andy\", 20, 
\"USA\"), " +
-            "Person(2, \"jeff\", 23, \"China\"), Person(3, \"james\", 18, 
\"USA\")))\n" +
-            "df2.printSchema\n" +
-            "df2.show() ", context);
-    assertEquals(InterpreterResult.Code.SUCCESS, result.code());
-
     // spark version
     result = interpreter.interpret("sc.version", getInterpreterContext());
     assertEquals(InterpreterResult.Code.SUCCESS, result.code());
@@ -229,6 +220,15 @@ public class SparkInterpreterTest {
               "|  2|null|\n" +
               "+---+----+"));
     } else if (version.contains("String = 2.")) {
+      // create dataset from case class
+      context = getInterpreterContext();
+      result = interpreter.interpret("case class Person(id:Int, name:String, 
age:Int, country:String)\n" +
+              "val df2 = spark.createDataFrame(Seq(Person(1, \"andy\", 20, 
\"USA\"), " +
+              "Person(2, \"jeff\", 23, \"China\"), Person(3, \"james\", 18, 
\"USA\")))\n" +
+              "df2.printSchema\n" +
+              "df2.show() ", context);
+      assertEquals(InterpreterResult.Code.SUCCESS, result.code());
+
       result = interpreter.interpret("spark", getInterpreterContext());
       assertEquals(InterpreterResult.Code.SUCCESS, result.code());
 
diff --git 
a/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelClient.java
 
b/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelClient.java
index 0e0902b..a551d85 100644
--- 
a/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelClient.java
+++ 
b/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelClient.java
@@ -168,6 +168,11 @@ public class JupyterKernelClient {
                         curOutput.getType() != InterpreterResult.Type.TEXT) {
                   interpreterOutput.write("%text ".getBytes());
                 }
+                // explicitly use html output for ir kernel in some cases. 
otherwise some
+                // R packages doesn't work. e.g. googlevis
+                if (executeResponse.getOutput().contains("<script 
type=\"text/javascript\">")) {
+                  interpreterOutput.write("\n%html ".getBytes());
+                }
                 
interpreterOutput.write(executeResponse.getOutput().getBytes());
               }
               interpreterOutput.getInterpreterOutput().flush();
diff --git 
a/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelInterpreter.java
 
b/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelInterpreter.java
index d0e9348..d1dc351 100644
--- 
a/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelInterpreter.java
+++ 
b/zeppelin-jupyter-interpreter/src/main/java/org/apache/zeppelin/jupyter/JupyterKernelInterpreter.java
@@ -245,11 +245,6 @@ public class JupyterKernelInterpreter extends 
AbstractInterpreter {
     interpreterOutput.setInterpreterOutput(context.out);
     jupyterKernelClient.setInterpreterContext(context);
     try {
-      // always use html output for ir kernel. otherwise some R packages 
doesn't work.
-      // e.g. googlevis
-      if (getKernelName().equals("ir")) {
-        context.out.write("%html\n");
-      }
       ExecuteResponse response =
               
jupyterKernelClient.stream_execute(ExecuteRequest.newBuilder().setCode(st).build(),
                       interpreterOutput);
diff --git 
a/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_client.py 
b/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_client.py
index ac7b1e0..b9684e9 100644
--- 
a/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_client.py
+++ 
b/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_client.py
@@ -23,14 +23,17 @@ import kernel_pb2_grpc
 def run():
     channel = grpc.insecure_channel('localhost:50053')
     stub = kernel_pb2_grpc.JupyterKernelStub(channel)
-    response = stub.execute(kernel_pb2.ExecuteRequest(code="import time\nfor i 
in range(1,4):\n\ttime.sleep(1)\n\tprint(i)\n" +
-                                                            "%matplotlib 
inline\nimport matplotlib.pyplot as 
plt\ndata=[1,1,2,3,4]\nplt.figure()\nplt.plot(data)"))
+    response = stub.execute(kernel_pb2.ExecuteRequest(code="""
+library(googleVis)
+df=data.frame(country=c("US", "GB", "BR"), 
+              val1=c(10,13,14), 
+              val2=c(23,12,32))
+Bar <- gvisBarChart(df)
+print(Bar, tag = 'chart')
+    """))
     for r in response:
         print("output:" + r.output)
 
-    response = stub.execute(kernel_pb2.ExecuteRequest(code="range?"))
-    for r in response:
-        print(r)
 
 if __name__ == '__main__':
     run()
diff --git 
a/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_server.py 
b/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_server.py
index ac11ea3..f2e361d 100644
--- 
a/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_server.py
+++ 
b/zeppelin-jupyter-interpreter/src/main/resources/grpc/jupyter/kernel_server.py
@@ -59,6 +59,8 @@ class KernelServer(kernel_pb2_grpc.JupyterKernelServicer):
         def _output_hook(msg):
             msg_type = msg['header']['msg_type']
             content = msg['content']
+            # print("******************")
+            # print(msg)
             outStatus, outType, output = kernel_pb2.SUCCESS, None, None
             # prepare the reply
             if msg_type == 'stream':
diff --git 
a/zeppelin-jupyter-interpreter/src/test/java/org/apache/zeppelin/jupyter/IRKernelTest.java
 
b/zeppelin-jupyter-interpreter/src/test/java/org/apache/zeppelin/jupyter/IRKernelTest.java
index 08d7c5a..8be3507 100644
--- 
a/zeppelin-jupyter-interpreter/src/test/java/org/apache/zeppelin/jupyter/IRKernelTest.java
+++ 
b/zeppelin-jupyter-interpreter/src/test/java/org/apache/zeppelin/jupyter/IRKernelTest.java
@@ -87,10 +87,26 @@ public class IRKernelTest {
     assertEquals(InterpreterResult.Code.ERROR, result.code());
     resultMessages = context.out.toInterpreterResultMessage();
     assertEquals(1, resultMessages.size());
-    assertEquals(result.toString(), InterpreterResult.Type.HTML, 
resultMessages.get(0).getType());
+    assertEquals(result.toString(), InterpreterResult.Type.TEXT, 
resultMessages.get(0).getType());
     assertTrue(resultMessages.toString(),
             resultMessages.get(0).getData().contains("object 'unknown_var' not 
found"));
 
+    context = getInterpreterContext();
+    result = interpreter.interpret("foo <- TRUE\n" +
+            "print(foo)\n" +
+            "bare <- c(1, 2.5, 4)\n" +
+            "print(bare)\n" +
+            "double <- 15.0\n" +
+            "print(double)", context);
+    assertEquals(InterpreterResult.Code.SUCCESS, result.code());
+    resultMessages = context.out.toInterpreterResultMessage();
+    assertEquals(1, resultMessages.size());
+    assertEquals(result.toString(), InterpreterResult.Type.TEXT, 
resultMessages.get(0).getType());
+    assertTrue(resultMessages.toString(),
+            resultMessages.get(0).getData().contains("[1] TRUE\n" +
+                    "[1] 1.0 2.5 4.0\n" +
+                    "[1] 15\n"));
+
     // plotting
     context = getInterpreterContext();
     result = interpreter.interpret("hist(mtcars$mpg)", context);
@@ -122,11 +138,11 @@ public class IRKernelTest {
               "print(Bar, tag = 'chart')", context);
       assertEquals(InterpreterResult.Code.SUCCESS, result.code());
       resultMessages = context.out.toInterpreterResultMessage();
-      assertEquals(1, resultMessages.size());
+      assertEquals(2, resultMessages.size());
       assertEquals(resultMessages.toString(),
-              InterpreterResult.Type.HTML, resultMessages.get(0).getType());
-      assertTrue(resultMessages.get(0).getData(),
-              resultMessages.get(0).getData().contains("javascript"));
+              InterpreterResult.Type.HTML, resultMessages.get(1).getType());
+      assertTrue(resultMessages.get(1).getData(),
+              resultMessages.get(1).getData().contains("javascript"));
     }
   }
 

Reply via email to