Exemple #1
0
def remove_kernelspecs():
    km = kernelspec.KernelSpecManager()

    kernel_id = None
    while kernel_id != "done":

        remote_kernels = {
            kernelspec.get_kernel_spec(k).display_name: k
            for k, v in kernelspec.find_kernel_specs().items()
            if k.startswith("ssh_")
        }
        if remote_kernels == {}:
            print_ok("   => No databricklabs_jupyterlab kernel spec left")
            break

        answer = question(
            "kernel_name",
            "Which kernel spec to delete (Ctrl-C to finish)?",
            list(remote_kernels.keys()),
        )

        if answer is None:
            break

        kernel_name = answer["kernel_name"]
        if kernel_id != "done":
            answer = input("Really delete kernels spec '%s' (y/n) " %
                           kernel_name)
            if answer.lower() == "y":
                km.remove_kernel_spec(remote_kernels[kernel_name])
Exemple #2
0
def check_kernel_spec():
    # https://jupyter-client.readthedocs.io/en/latest/api/kernelspec.html
    import jupyter_client.kernelspec as jk

    kernel_spec_manager = jk.KernelSpecManager()

    print(kernel_spec_manager.get_all_specs())
Exemple #3
0
    def create_post(self, path, **kw):
        """Create a new post."""
        if flag is None:
            req_missing(['ipython[notebook]>=2.0.0'], 'build this site (compile ipynb)')
        content = kw.pop('content', None)
        onefile = kw.pop('onefile', False)
        kernel = kw.pop('ipython_kernel', None)
        # is_page is not needed to create the file
        kw.pop('is_page', False)

        metadata = {}
        metadata.update(self.default_metadata)
        metadata.update(kw)

        makedirs(os.path.dirname(path))

        if content.startswith("{"):
            # imported .ipynb file, guaranteed to start with "{" because it’s JSON.
            nb = nbformat.reads(content, current_nbformat)
        else:
            if ipy_modern:
                nb = nbformat.v4.new_notebook()
                nb["cells"] = [nbformat.v4.new_markdown_cell(content)]
            else:
                nb = nbformat.new_notebook()
                nb["worksheets"] = [nbformat.new_worksheet(cells=[nbformat.new_text_cell('markdown', [content])])]

            if kernelspec is not None:
                if kernel is None:
                    kernel = self.default_kernel
                    self.logger.notice('No kernel specified, assuming "{0}".'.format(kernel))

                IPYNB_KERNELS = {}
                ksm = kernelspec.KernelSpecManager()
                for k in ksm.find_kernel_specs():
                    IPYNB_KERNELS[k] = ksm.get_kernel_spec(k).to_dict()
                    IPYNB_KERNELS[k]['name'] = k
                    del IPYNB_KERNELS[k]['argv']

                if kernel not in IPYNB_KERNELS:
                    self.logger.error('Unknown kernel "{0}". Maybe you mispelled it?'.format(kernel))
                    self.logger.info("Available kernels: {0}".format(", ".join(sorted(IPYNB_KERNELS))))
                    raise Exception('Unknown kernel "{0}"'.format(kernel))

                nb["metadata"]["kernelspec"] = IPYNB_KERNELS[kernel]
            else:
                # Older IPython versions don’t need kernelspecs.
                pass

        if onefile:
            nb["metadata"]["nikola"] = metadata

        with io.open(path, "w+", encoding="utf8") as fd:
            if ipy_modern:
                nbformat.write(nb, fd, 4)
            else:
                nbformat.write(nb, fd, 'ipynb')
 def _get_kernel_specs(self):
     kernelspec_manager = kernelspec.KernelSpecManager()
     kernelspec_info = kernelspec_manager.get_all_specs()
     for (key, value) in kernelspec_info.items():
         self.kernel_specs[value["spec"]["language"]] = {"display_name":"", \
                 "language":"", "name":""}
         self.kernel_specs[value["spec"]["language"]]["display_name"] = \
             value["spec"]["display_name"]
         self.kernel_specs[value["spec"]["language"]]["language"] = \
             value["spec"]["language"]
         self.kernel_specs[value["spec"]["language"]]["name"] = \
             key
Exemple #5
0
    def setUp(self):
        self.env_patch = test_env()
        self.env_patch.start()
        self.sample_kernel_dir = self._install_sample_kernel(
            pjoin(paths.jupyter_data_dir(), 'kernels'))

        self.ksm = kernelspec.KernelSpecManager()

        td2 = TemporaryDirectory()
        self.addCleanup(td2.cleanup)
        self.installable_kernel = td2.name
        with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f:
            json.dump(sample_kernel_json, f)
    def _installed_kernels(self):

        if cfg.jupyter_kernels:
            return safe_decode(cfg.jupyter_kernels).split(u';')
        kernelspec_manager = kernelspec.KernelSpecManager()
        kernels = list(kernelspec_manager.find_kernel_specs().keys())
        # Python 2 and 3 kernels apparently just start the same kernel that
        # corresponds to the active Python kernel. So if they are both
        # installed, we expose only one.
        if 'python2' in kernels and 'python3' in kernels:
            kernels.remove('python2')
        oslogger.debug('installed kernels: {}'.format(str(kernels)))
        return kernels
Exemple #7
0
    def create_post(self, path, **kw):
        """Create a new post."""
        self._req_missing_ipynb()
        content = kw.pop('content', None)
        onefile = kw.pop('onefile', False)
        kernel = kw.pop('jupyter_kernel', None)
        # is_page is not needed to create the file
        kw.pop('is_page', False)

        metadata = {}
        metadata.update(self.default_metadata)
        metadata.update(kw)

        makedirs(os.path.dirname(path))

        if content.startswith("{"):
            # imported .ipynb file, guaranteed to start with "{" because it’s JSON.
            nb = nbformat.reads(content, current_nbformat)
        else:
            nb = nbformat.v4.new_notebook()
            nb["cells"] = [nbformat.v4.new_markdown_cell(content)]

            if kernel is None:
                kernel = self.default_kernel
                self.logger.warning(
                    'No kernel specified, assuming "{0}".'.format(kernel))

            IPYNB_KERNELS = {}
            ksm = kernelspec.KernelSpecManager()
            for k in ksm.find_kernel_specs():
                IPYNB_KERNELS[k] = ksm.get_kernel_spec(k).to_dict()
                IPYNB_KERNELS[k]['name'] = k
                del IPYNB_KERNELS[k]['argv']

            if kernel not in IPYNB_KERNELS:
                self.logger.error(
                    'Unknown kernel "{0}". Maybe you mispelled it?'.format(
                        kernel))
                self.logger.info("Available kernels: {0}".format(", ".join(
                    sorted(IPYNB_KERNELS))))
                raise Exception('Unknown kernel "{0}"'.format(kernel))

            nb["metadata"]["kernelspec"] = IPYNB_KERNELS[kernel]

        if onefile:
            nb["metadata"]["nikola"] = metadata

        with io.open(path, "w+", encoding="utf8") as fd:
            nbformat.write(nb, fd, 4)
Exemple #8
0
    def setUp(self):
        td = TemporaryDirectory()
        self.addCleanup(td.cleanup)
        self.sample_kernel_dir = pjoin(td.name, 'kernels', 'Sample')
        os.makedirs(self.sample_kernel_dir)
        json_file = pjoin(self.sample_kernel_dir, 'kernel.json')
        with open(json_file, 'w') as f:
            json.dump(sample_kernel_json, f)

        self.ksm = kernelspec.KernelSpecManager(ipython_dir=td.name)

        td2 = TemporaryDirectory()
        self.addCleanup(td2.cleanup)
        self.installable_kernel = td2.name
        with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f:
            json.dump(sample_kernel_json, f)
Exemple #9
0
    def setUp(self):
        td = TemporaryDirectory()
        self.env_patch = patch.dict(
            os.environ, {
                'JUPYTER_CONFIG_DIR': pjoin(td.name, 'jupyter'),
                'JUPYTER_DATA_DIR': pjoin(td.name, 'jupyter_data'),
                'JUPYTER_RUNTIME_DIR': pjoin(td.name, 'jupyter_runtime'),
                'IPYTHONDIR': pjoin(td.name, 'ipython'),
            })
        self.env_patch.start()
        self.addCleanup(td.cleanup)
        self.sample_kernel_dir = self._install_sample_kernel(
            pjoin(td.name, 'jupyter_data', 'kernels'))

        self.ksm = kernelspec.KernelSpecManager()

        td2 = TemporaryDirectory()
        self.addCleanup(td2.cleanup)
        self.installable_kernel = td2.name
        with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f:
            json.dump(sample_kernel_json, f)
Exemple #10
0
 def test_deprecated_whitelist(self):
     ksm = kernelspec.KernelSpecManager()
     ksm.whitelist = ["bar"]
     kernels = ksm.find_kernel_specs()
     assert not len(kernels)
Exemple #11
0
 def test_allowed_kernel_names(self):
     ksm = kernelspec.KernelSpecManager()
     ksm.allowed_kernelspecs = ["foo"]
     kernels = ksm.find_kernel_specs()
     assert not len(kernels)
def available_kernels():
    """Return the list of kernels"""
    mgr = kernelspec.KernelSpecManager()
    return list(mgr.find_kernel_specs().keys())
def install_kernel(*, template_path, overlay_path, kernel_name):
    kernel_instrument = os.path.basename(
        os.path.dirname(os.environ['SINGULARITY_CONTAINER']))
    kerenl_image = os.environ['SINGULARITY_NAME'].replace('.sif', '')

    if kernel_name is None:
        kernel_name = f"{kernel_instrument}-{kerenl_image}"

    ksm = kernelspec.KernelSpecManager()

    if kernel_name in ksm.get_all_specs().keys():
        print(
            f"Removing existing kernelspec in {ksm.get_kernel_spec(kernel_name).resource_dir}"
        )

    ksm.install_kernel_spec(template_path, kernel_name=kernel_name, user=True)

    kernel = ksm.get_kernel_spec(kernel_name)

    print(f"Installed kernelspec {kernel_name} in {kernel.resource_dir}")

    #  Overlay command templating
    if overlay_path is not None:
        if not os.path.isabs(overlay_path):
            overlay_path = os.path.abspath(overlay_path)

        overlay_cmd = f"--overlay\", \"{overlay_path}"
    else:
        overlay_cmd = ""

    #  Crappily hard-coded list of binds, TODO: IMBROVE BIND PATH TEMPLATING
    target_bind = [
        "/gpfs", "/data", "/afs", "/cvmfs", "/pnfs", "/nfs", "/asap3", "/run",
        "/tmp"
    ]
    bind_cmd = ["-B\", \"{0}:{0}".format(b) for b in target_bind]

    #  Fill in kernel.json variables
    spec_path = os.path.join(kernel.resource_dir, 'kernel.json')
    with open(spec_path, 'r+') as spec_file:
        spec = spec_file.read()

        spec = spec.replace('{{OVERLAY_CMD}}', overlay_cmd)

        spec = spec.replace('{{BIND_CMD}}', "\",\n    \"".join(bind_cmd))

        spec = spec.replace('{{IMAGE_PATH}}',
                            os.environ['SINGULARITY_CONTAINER'])

        spec = spec.replace('{{KERNEL_ROOT}}', kernel.resource_dir)
        spec = spec.replace('{{KERNEL_NAME}}', kernel_name)

        #  TODO: Better way of doing this empty quote stripping thing
        spec_no_empty_quotes = []
        for l in spec.split("\n"):
            if '""' in l:
                pass
            else:
                spec_no_empty_quotes.append(l)

        spec_file.seek(0)
        spec_file.write("\n".join(spec_no_empty_quotes))
Exemple #14
0
 def _kernel_spec_manager_default(self):
     return kernelspec.KernelSpecManager(ipython_dir=self.ipython_dir)
Exemple #15
0
 def __exit__(self, type, value, traceback):
     jupyter_kernel.KernelSpecManager().remove_kernel_spec(self.kernel)
Exemple #16
0
 def _kernel_spec_manager_default(self) -> kernelspec.KernelSpecManager:
     return kernelspec.KernelSpecManager(data_dir=self.data_dir)
 def test_remove_kernelspecs(self):
     km = kernelspec.KernelSpecManager()
     for kernel_name in get_test_kernels():
         km.remove_kernel_spec(kernel_name)