From 6b19ff475fe7db2d257b474a7a8c8009480f4424 Mon Sep 17 00:00:00 2001 From: Albert DeFusco Date: Tue, 16 Apr 2024 10:22:29 -0500 Subject: [PATCH 1/5] enable the debugger by default --- nb_conda_kernels/manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nb_conda_kernels/manager.py b/nb_conda_kernels/manager.py index ca10539..7116e2c 100644 --- a/nb_conda_kernels/manager.py +++ b/nb_conda_kernels/manager.py @@ -313,7 +313,8 @@ def _all_specs(self): metadata = spec.get('metadata', {}) metadata.update({ 'conda_env_name': env_name, - 'conda_env_path': env_path + 'conda_env_path': env_path, + 'debugger': True }) spec['metadata'] = metadata From 7aaa64a8ee8c8c3e615dba9ee42a709e1cae4cae Mon Sep 17 00:00:00 2001 From: Albert DeFusco Date: Tue, 16 Apr 2024 11:12:46 -0500 Subject: [PATCH 2/5] enable_debugger option --- nb_conda_kernels/manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nb_conda_kernels/manager.py b/nb_conda_kernels/manager.py index 7116e2c..b9617e5 100644 --- a/nb_conda_kernels/manager.py +++ b/nb_conda_kernels/manager.py @@ -75,6 +75,8 @@ class CondaKernelSpecManager(KernelSpecManager): If None, the conda kernel specs will only be available dynamically on notebook editors. """) + enable_debugger = Bool(False, config=True, + help="Set debugger=True in kernelspec metadata. The default is False.") @validate("kernelspec_path") def _validate_kernelspec_path(self, proposal): @@ -314,7 +316,7 @@ def _all_specs(self): metadata.update({ 'conda_env_name': env_name, 'conda_env_path': env_path, - 'debugger': True + 'debugger': self.enable_debugger }) spec['metadata'] = metadata From 210dded0a988e30179493287e1d65f08df78ed3e Mon Sep 17 00:00:00 2001 From: Albert DeFusco Date: Tue, 16 Apr 2024 11:35:49 -0500 Subject: [PATCH 3/5] enable_debugger is optional this restores previous behavior of xpython, which for itself sets debugger: True --- nb_conda_kernels/manager.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nb_conda_kernels/manager.py b/nb_conda_kernels/manager.py index b9617e5..659c306 100644 --- a/nb_conda_kernels/manager.py +++ b/nb_conda_kernels/manager.py @@ -75,8 +75,9 @@ class CondaKernelSpecManager(KernelSpecManager): If None, the conda kernel specs will only be available dynamically on notebook editors. """) - enable_debugger = Bool(False, config=True, - help="Set debugger=True in kernelspec metadata. The default is False.") + enable_debugger = Bool(None, config=True, allow_none=True, + help="Optional: Override debugger setting in kernelspec metadata. " + "If this parameter is unset it will default to the source kernel metadata.") @validate("kernelspec_path") def _validate_kernelspec_path(self, proposal): @@ -316,8 +317,9 @@ def _all_specs(self): metadata.update({ 'conda_env_name': env_name, 'conda_env_path': env_path, - 'debugger': self.enable_debugger }) + if self.enable_debugger is not None: + metadata.update({"enable_debugger": self.enable_debugger}) spec['metadata'] = metadata if self.kernelspec_path is not None: From 2ac0871da7aa5c785972a5f166585ee1bd306822 Mon Sep 17 00:00:00 2001 From: Albert DeFusco Date: Tue, 16 Apr 2024 11:49:27 -0500 Subject: [PATCH 4/5] test override and fix key name --- nb_conda_kernels/manager.py | 2 +- tests/test_config.py | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/nb_conda_kernels/manager.py b/nb_conda_kernels/manager.py index 659c306..9b49c5f 100644 --- a/nb_conda_kernels/manager.py +++ b/nb_conda_kernels/manager.py @@ -319,7 +319,7 @@ def _all_specs(self): 'conda_env_path': env_path, }) if self.enable_debugger is not None: - metadata.update({"enable_debugger": self.enable_debugger}) + metadata.update({"debugger": self.enable_debugger}) spec['metadata'] = metadata if self.kernelspec_path is not None: diff --git a/tests/test_config.py b/tests/test_config.py index 5a1e607..017ef05 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -241,5 +241,48 @@ def envs(*args): assert metadata[key] == value +@pytest.mark.parametrize("kernelspec", [ + { + "display_name": "xpython", + "argv": [ + "@XPYTHON_KERNELSPEC_PATH@xpython", + "-f", + "{connection_file}" + ], + "language": "python", + "metadata": { "debugger": True } + } +]) +def test_kernel_metadata_debugger_override(monkeypatch, tmp_path, kernelspec): + + mock_info = { + 'conda_prefix': '/' + } + + def envs(*args): + return { + 'env_name': str(tmp_path) + } + + kernel_file = tmp_path / 'share' / 'jupyter' / 'kernels' / 'my_kernel' / 'kernel.json' + kernel_file.parent.mkdir(parents=True, exist_ok=True) + if sys.version_info >= (3, 0): + kernel_file.write_text(json.dumps(kernelspec)) + else: + kernel_file.write_bytes(json.dumps(kernelspec)) + + monkeypatch.setattr(CondaKernelSpecManager, "_conda_info", mock_info) + monkeypatch.setattr(CondaKernelSpecManager, "_all_envs", envs) + + manager = CondaKernelSpecManager() + specs = manager._all_specs() + assert specs['conda-env-env_name-my_kernel']['metadata']['debugger'] is True + + manager = CondaKernelSpecManager(enable_debugger=False) + specs = manager._all_specs() + assert specs['conda-env-env_name-my_kernel']['metadata']['debugger'] is False + + + if __name__ == '__main__': test_configuration() From db9c604398ddce3069308f67dc910569cb05c3ba Mon Sep 17 00:00:00 2001 From: Albert DeFusco Date: Tue, 16 Apr 2024 12:06:52 -0500 Subject: [PATCH 5/5] add parameter to readme --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 328526a..dc7ad69 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,12 @@ Available field names within the string: - `{kernel}` = Original kernel name (name of the folder containing the kernel spec) - `{language}` = Language (identical to `{0}`) +- `enable_debugger`: Override kernelspec debugger metadata +Default: None +Possible values are: + - True: Override environment kernelspec metadata and set the debugger flag to `true` + - False: Override environment kernelspec metadata and set the debugger flag to `false` + In order to pass a configuration option in the command line use ```python -m nb_conda_kernels list --CondaKernelSpecManager.env_filter="regex"``` where regex is the regular expression for filtering envs "this|that|and|that" works. To set it in jupyter config file, edit the jupyter configuration file (py or json) located in your ```jupyter --config-dir``` - for `jupyter_config.py` - add a line "c.CondaKernelSpecManager.env_filter = 'regex'"