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 _ =>