diff --git a/beakerx/beakerx/runtime.py b/beakerx/beakerx/runtime.py index 30d786c856..eceaef9889 100644 --- a/beakerx/beakerx/runtime.py +++ b/beakerx/beakerx/runtime.py @@ -619,5 +619,6 @@ def get_context_session(): kernel = get_ipython().kernel # if subkernel get session from extra start parameters if len(kernel.parent.argv) == 3: - return json.loads(kernel.parent.argv[2])['contextId'] + context_json = base64.b64decode(kernel.parent.argv[2]).decode('UTF-8') + return json.loads(context_json)['contextId'] return kernel.session.session diff --git a/beakerx/beakerx_magics/kernel_magic.py b/beakerx/beakerx_magics/kernel_magic.py index ff3b50a9b7..6a66e2896a 100644 --- a/beakerx/beakerx_magics/kernel_magic.py +++ b/beakerx/beakerx_magics/kernel_magic.py @@ -17,6 +17,7 @@ from jupyter_client.manager import KernelManager from ipykernel.zmqshell import ZMQInteractiveShell import atexit +import base64 import json import logging import os @@ -38,7 +39,7 @@ def __init__(self, shell): def start(self, kernel_name): self.km = KernelManager() self.km.kernel_name = kernel_name - self.km.start_kernel(extra_arguments=[self._context_as_string()]) + self.km.start_kernel(extra_arguments=[self._context_base64()]) atexit.register(self.stop_kernel) self.kc = self.km.client() self.kc.start_channels() @@ -85,11 +86,12 @@ def pass_message(self, msg_raw): # don't create the list of keys if debug messages aren't enabled self.log.debug("Current comms: %s", list(self.comms.keys())) - def _context_as_string(self): - return json.dumps({ + def _context_base64(self): + context_json = json.dumps({ 'port': os.environ["BEAKERX_AUTOTRANSLATION_PORT"], 'contextId': get_ipython().kernel.session.session, }) + return base64.b64encode(context_json.encode('utf-8')).decode() def comm_msg(stream, ident, msg): diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelConfigurationFile.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelConfigurationFile.java index 8fee3103fb..6a9632158c 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelConfigurationFile.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelConfigurationFile.java @@ -19,9 +19,11 @@ import com.twosigma.beakerx.message.MessageSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import py4j.Base64; import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.Map; @@ -44,7 +46,12 @@ public KernelConfigurationFile(final String[] args) { } this.config = getConfig(args[0]); if (args.length == 2) { - String contextAsJson = args[1]; + String contextAsJson = null; + try { + contextAsJson = new String(Base64.decode(args[1]), "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } this.context = Optional.of(contextAsJson); } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/MagicKernelManager.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/MagicKernelManager.java index 812615a496..dcba252a06 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/MagicKernelManager.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/MagicKernelManager.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.twosigma.beakerx.message.Header; import com.twosigma.beakerx.message.Message; +import org.apache.commons.codec.binary.Base64; import py4j.ClientServer; import py4j.GatewayServer; @@ -28,6 +29,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -84,7 +86,7 @@ protected String[] getPy4jCommand() { "--port", port == null ? DEFAULT_PORT : String.valueOf(port), "--pyport", pythonPort == null ? DEFAULT_PYTHON_PORT : String.valueOf(pythonPort), "--kernel", kernelName, - "--context", this.context + "--context", Base64.encodeBase64String(this.context.getBytes(StandardCharsets.UTF_8)) }; }