Skip to content

Commit

Permalink
Merge pull request #263 from Anaconda-Platform/feat/debugger
Browse files Browse the repository at this point in the history
enable the debugger
  • Loading branch information
AlbertDeFusco authored Apr 16, 2024
2 parents a793d25 + db9c604 commit 7d10f92
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 1 deletion.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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'"
Expand Down
7 changes: 6 additions & 1 deletion nb_conda_kernels/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ class CondaKernelSpecManager(KernelSpecManager):
If None, the conda kernel specs will only be available dynamically on notebook editors.
""")
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):
Expand Down Expand Up @@ -313,8 +316,10 @@ 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,
})
if self.enable_debugger is not None:
metadata.update({"debugger": self.enable_debugger})
spec['metadata'] = metadata

if self.kernelspec_path is not None:
Expand Down
43 changes: 43 additions & 0 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

0 comments on commit 7d10f92

Please sign in to comment.