pidgy
kernel¶
A kernel provides programming language support in Jupyter. IPython is the default kernel. Additional kernels include R, Julia, and many more.
pidgy
is a wrapper kernel around the
existing ipykernel and IPython.InteractiveShell
.
import IPython, ipykernel.ipkernel, ipykernel.kernelapp, pidgy, traitlets, ipykernel.kernelspec, ipykernel.zmqshell, pathlib
class pidgyKernel(ipykernel.ipkernel.IPythonKernel):
The pidgy
kernel specifies to jupyter
how it can be used as a native kernel from
the launcher or notebook. It specifies which shell class to use.
shell_class = traitlets.Type('pidgy.shell.pidgyShell')
loaders = traitlets.Dict()
_last_parent = traitlets.Dict()
current_cell_id = traitlets.Unicode()
current_cell_ids = traitlets.Set()
def init_metadata(self, *args, **kwargs):
The is some important data captured in the initial we’ll expose for later.
return super().init_metadata(*args, **kwargs)
def do_inspect(self, code, cursor_pos, detail_level=0):
The kernel is where the inspection can be customized. pidgy
adds the ability to use
the inspector as Markdown rendering tool.
if code[cursor_pos-3:cursor_pos] == '!!!':
if code[cursor_pos-6:cursor_pos] == '!!!'*2:
self.shell.run_cell(code, silent=True)
return self.markdown_result(self.shell.weave.format_output(code))
result = super().do_inspect(code, cursor_pos, detail_level)
if not result['found']: return self.markdown_result(code)
return result
def markdown_result(self, code):
return dict(found=True, status='ok', metadata={}, data={'text/markdown': code})
def do_complete(self, code, cursor_pos):
The kernel even allows the completion system to be modified.
return super().do_complete(code, cursor_pos)
pidgy
kernel installation¶
def install():
install
the pidgy kernel.
import jupyter_client, click
manager = jupyter_client.kernelspec.KernelSpecManager()
path = str((pathlib.Path(__file__).parent / 'kernelspec').absolute())
try:
dest = manager.install_kernel_spec(path, 'pidgy')
except:
click.echo(F"System install was unsuccessful. Attempting to install the pidgy kernel to the user.")
dest = manager.install_kernel_spec(path, 'pidgy', True)
click.echo(F"The pidgy kernel was install in {dest}")
def uninstall():
uninstall
the kernel.
import jupyter_client, click
jupyter_client.kernelspec.KernelSpecManager().remove_kernel_spec('pidgy')
click.echo(F"The pidgy kernel was removed.")
def start(f:str=""):
Launch a pidgy
kernel applications.
ipykernel.kernelapp.IPKernelApp.launch_instance(connection_file=f, kernel_class=pidgyKernel)
...