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

lresende pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-toree.git


The following commit(s) were added to refs/heads/master by this push:
     new 9c92463  [TOREE-508] Properly reply errors to iopub.error (#180)
9c92463 is described below

commit 9c924632fad6bf309dd847991e21d680600b5989
Author: Fabiano V. Santos <santos.fabia...@gmail.com>
AuthorDate: Sun Mar 15 23:31:13 2020 -0300

    [TOREE-508] Properly reply errors to iopub.error (#180)
    
    Reply errors to iopub.error instead of iopub.exec_result
---
 .../v5/handler/ExecuteRequestHandler.scala         | 37 ++++++++++++++--------
 .../apache/toree/kernel/protocol/v5/package.scala  |  3 +-
 .../toree/kernel/protocol/v5/KMBuilderSpec.scala   |  6 ++++
 .../scala/ScalaInterpreterSpecific.scala           |  2 +-
 4 files changed, 33 insertions(+), 15 deletions(-)

diff --git 
a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
 
b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
index 96c306e..6f253e1 100644
--- 
a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
+++ 
b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
@@ -89,19 +89,29 @@ class ExecuteRequestHandler(
         case Success(tuple) =>
           val (executeReply, executeResult) = updateCount(tuple, 
executionCount)
 
-          //  Send an ExecuteReply to the client
-          val executeReplyMsg = skeletonBuilder
-            .withHeader(MessageType.Outgoing.ExecuteReply)
-            .withContentString(executeReply).build
-          relayMsg(executeReplyMsg, relayActor)
-
-          //  Send an ExecuteResult with the result of the code execution
-          if (executeResult.hasContent) {
-            val executeResultMsg = skeletonBuilder
-              
.withIds(Seq(MessageType.Outgoing.ExecuteResult.toString.getBytes))
-              .withHeader(MessageType.Outgoing.ExecuteResult)
-              .withContentString(executeResult).build
-            relayMsg(executeResultMsg, relayActor)
+          if (executeReply.status.equals("error")) {
+            // Send an ExecuteReplyError with the result of the code execution 
to ioPub.error
+            val replyError: ExecuteReply = ExecuteReplyError(
+              executionCount,
+              executeReply.ename,
+              executeReply.evalue,
+              executeReply.traceback)
+            relayErrorMessages(relayActor, replyError, skeletonBuilder)
+          } else {
+            //  Send an ExecuteReply to the client
+            val executeReplyMsg = skeletonBuilder
+              .withHeader(MessageType.Outgoing.ExecuteReply)
+              .withMetadata(Metadata("status" -> executeReply.status))
+              .withContentString(executeReply).build
+            relayMsg(executeReplyMsg, relayActor)
+
+            if (executeResult.hasContent) {
+              val executeResultMsg = skeletonBuilder
+                
.withIds(Seq(MessageType.Outgoing.ExecuteResult.toString.getBytes))
+                .withHeader(MessageType.Outgoing.ExecuteResult)
+                .withContentString(executeResult).build
+              relayMsg(executeResultMsg, relayActor)
+            }
           }
 
         case Failure(error: Throwable) =>
@@ -148,6 +158,7 @@ class ExecuteRequestHandler(
                          skeletonBuilder: KMBuilder) {
     val executeReplyMsg = skeletonBuilder
       .withHeader(MessageType.Outgoing.ExecuteReply)
+      .withMetadata(Metadata("status" -> replyError.status))
       .withContentString(replyError).build
 
     val errorContent: ErrorContent =  ErrorContent(
diff --git 
a/protocol/src/main/scala/org/apache/toree/kernel/protocol/v5/package.scala 
b/protocol/src/main/scala/org/apache/toree/kernel/protocol/v5/package.scala
index b84af70..466a3ec 100644
--- a/protocol/src/main/scala/org/apache/toree/kernel/protocol/v5/package.scala
+++ b/protocol/src/main/scala/org/apache/toree/kernel/protocol/v5/package.scala
@@ -35,7 +35,8 @@ package object v5 {
       if(kv.isEmpty) {
         Map.empty
       } else {
-        kv.toMap.mapValues(v => Json.parse(v))
+        // triple quotes due https://github.com/scala/bug/issues/6476
+        kv.toMap.mapValues(v => Json.parse(s""""$v""""))
       }
     }
 
diff --git 
a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/KMBuilderSpec.scala
 
b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/KMBuilderSpec.scala
index 3b09ad8..d6c957d 100644
--- 
a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/KMBuilderSpec.scala
+++ 
b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/KMBuilderSpec.scala
@@ -68,6 +68,12 @@ class KMBuilderSpec extends FunSpec with Matchers {
         val metadata = builder.build(includeDefaultMetadata = false).metadata
         metadata should be(Metadata())
       }
+
+      it("should merge metadata with default") {
+        val builder = new KM2
+        val metadata = builder.withMetadata(Metadata("some" -> 
"value")).build.metadata
+        metadata should contain key("some")
+      }
     }
 
     describe("withXYZ"){
diff --git 
a/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
 
b/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
index 902bb1d..c941935 100644
--- 
a/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
+++ 
b/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
@@ -426,7 +426,7 @@ trait ScalaInterpreterSpecific extends SettingsProducerLike 
{ this: ScalaInterpr
         ExecuteError(
           ex.getClass.getName,
           ex.getLocalizedMessage,
-          formattedException.slice(1, formattedException.size - 1).toList
+          formattedException.toList
         )
       // Compile time error, need to check internal reporter
       case _ =>

Reply via email to