diff --git a/jupyter_kernel/magics/kernel_magic.py b/jupyter_kernel/magics/kernel_magic.py index 75eacd7e..1350cc89 100644 --- a/jupyter_kernel/magics/kernel_magic.py +++ b/jupyter_kernel/magics/kernel_magic.py @@ -7,19 +7,25 @@ class KernelMagic(Magic): kernels = {} + kernel_name = None + @option( + '-k', '--kernel_name', action='store', default="default", + help='kernel name given to use for execution' + ) def line_kernel(self, module_name, class_name, kernel_name="default"): """ - %kernel MODULE CLASS [NAME] - construct a kernel for sending code. + %kernel MODULE CLASS [-k NAME] - construct a kernel for sending code. Also returns the kernel as output. Example: - %kernel bash_kernel BashKernel bash + %kernel bash_kernel BashKernel -k bash - Use `%%kernel bash` to send code to the kernel. + Use `%kx` or `%%kx` to send code to the kernel. """ + self.kernel_name = kernel_name module = __import__(module_name) class_ = getattr(module, class_name) # FIXME: monkeypatch to replace methods of class @@ -28,9 +34,13 @@ def line_kernel(self, module_name, class_name, kernel_name="default"): self.kernels[kernel_name] = class_() self.retval = self.kernels[kernel_name] - def cell_kernel(self, kernel_name="default"): + @option( + '-k', '--kernel_name', action='store', default=None, + help='kernel name given to use for execution' + ) + def cell_kx(self, kernel_name=None): """ - %%kernel [NAME] - send the cell code to the kernel. + %%kx [-k NAME] - send the cell code to the kernel. Returns the result of the execution as output. @@ -39,11 +49,33 @@ def cell_kernel(self, kernel_name="default"): %%kernel bash ls -al - Use `%kernel MODULE CLASS [NAME]` to create a kernel. + Use `%kernel MODULE CLASS [-k NAME]` to create a kernel. """ + if kernel_name is None: + kernel_name = self.kernel_name self.retval = self.kernels[kernel_name].do_execute_direct(self.code) self.evaluate = False + @option( + '-k', '--kernel_name', action='store', default=None, + help='kernel name given to use for execution' + ) + def line_kx(self, code, kernel_name=None): + """ + %kx CODE [-k NAME] - send the code to the kernel. + + Returns the result of the execution as output. + + Example: + + %kernel ls -al + + Use `%kernel MODULE CLASS [-k NAME]` to create a kernel. + """ + if kernel_name is None: + kernel_name = self.kernel_name + self.retval = self.kernels[kernel_name].do_execute_direct(code) + def post_process(self, retval): return self.retval diff --git a/jupyter_kernel/magics/parallel_magic.py b/jupyter_kernel/magics/parallel_magic.py index 75cfeda4..ced7d229 100644 --- a/jupyter_kernel/magics/parallel_magic.py +++ b/jupyter_kernel/magics/parallel_magic.py @@ -110,7 +110,12 @@ def _clean_code(self, expr): '-k', '--kernel_name', action='store', default=None, help='kernel name given to use for execution' ) - def cell_px(self, kernel_name=None): + @option( + '-e', '--evaluate', action='store_true', default=False, + help=('evaluate code in the current kernel, too. The current ' + + 'kernel should be of the same language as the cluster.') + ) + def cell_px(self, kernel_name=None, evaluate=False): """ %%px - send cell to the cluster. @@ -125,7 +130,7 @@ def cell_px(self, kernel_name=None): kernel_name = self.kernel_name self.retval = self.view["kernels['%s'].do_execute_direct(\"%s\")" % ( kernel_name, self._clean_code(self.code))] - self.evaluate = False + self.evaluate = evaluate def post_process(self, retval): return self.retval