|
24 | 24 | import urllib
|
25 | 25 | import warnings
|
26 | 26 | from base64 import encodebytes
|
| 27 | +from pathlib import Path |
27 | 28 |
|
| 29 | +import jupyter_client |
28 | 30 | from jupyter_client.kernelspec import KernelSpecManager
|
29 | 31 | from jupyter_client.manager import KernelManager
|
30 | 32 | from jupyter_client.session import Session
|
@@ -1638,6 +1640,26 @@ def _update_notebook_dir(self, change):
|
1638 | 1640 | self.log.warning(_i18n("notebook_dir is deprecated, use root_dir"))
|
1639 | 1641 | self.root_dir = change["new"]
|
1640 | 1642 |
|
| 1643 | + external_connection_dir = Unicode( |
| 1644 | + None, |
| 1645 | + allow_none=True, |
| 1646 | + config=True, |
| 1647 | + help=_i18n( |
| 1648 | + "The directory to look at for external kernel connection files, if allow_external_kernels is True. " |
| 1649 | + "Defaults to Jupyter runtime_dir/external_kernels. " |
| 1650 | + "Make sure that this directory is not filled with left-over connection files, " |
| 1651 | + "that could result in unnecessary kernel manager creations." |
| 1652 | + ), |
| 1653 | + ) |
| 1654 | + |
| 1655 | + allow_external_kernels = Bool( |
| 1656 | + False, |
| 1657 | + config=True, |
| 1658 | + help=_i18n( |
| 1659 | + "Whether or not to allow external kernels, whose connection files are placed in external_connection_dir." |
| 1660 | + ), |
| 1661 | + ) |
| 1662 | + |
1641 | 1663 | root_dir = Unicode(config=True, help=_i18n("The directory to use for notebooks and kernels."))
|
1642 | 1664 | _root_dir_set = False
|
1643 | 1665 |
|
@@ -1873,12 +1895,26 @@ def init_configurables(self):
|
1873 | 1895 | self.kernel_spec_manager = self.kernel_spec_manager_class(
|
1874 | 1896 | parent=self,
|
1875 | 1897 | )
|
1876 |
| - self.kernel_manager = self.kernel_manager_class( |
1877 |
| - parent=self, |
1878 |
| - log=self.log, |
1879 |
| - connection_dir=self.runtime_dir, |
1880 |
| - kernel_spec_manager=self.kernel_spec_manager, |
1881 |
| - ) |
| 1898 | + |
| 1899 | + kwargs = { |
| 1900 | + "parent": self, |
| 1901 | + "log": self.log, |
| 1902 | + "connection_dir": self.runtime_dir, |
| 1903 | + "kernel_spec_manager": self.kernel_spec_manager, |
| 1904 | + } |
| 1905 | + if jupyter_client.version_info > (8, 3, 0): |
| 1906 | + if self.allow_external_kernels: |
| 1907 | + external_connection_dir = self.external_connection_dir |
| 1908 | + if external_connection_dir is None: |
| 1909 | + external_connection_dir = str(Path(self.runtime_dir) / "external_kernels") |
| 1910 | + kwargs["external_connection_dir"] = external_connection_dir |
| 1911 | + elif self.allow_external_kernels: |
| 1912 | + self.log.warning( |
| 1913 | + "Although allow_external_kernels=True, external kernels are not supported " |
| 1914 | + "because jupyter-client's version does not allow them (should be >8.3.0)." |
| 1915 | + ) |
| 1916 | + |
| 1917 | + self.kernel_manager = self.kernel_manager_class(**kwargs) |
1882 | 1918 | self.contents_manager = self.contents_manager_class(
|
1883 | 1919 | parent=self,
|
1884 | 1920 | log=self.log,
|
|
0 commit comments