Skip to content

Commit 99e145b

Browse files
authored
fix: Allow null kernelspec in OverwriteKernelspec (#1962)
The `Notebook.kernelspec` field is nullable, so in the event of a null value, OverwriteKernelspec should not fail. This commit checks for that case before trying to `json.loads` the value.
1 parent 8769682 commit 99e145b

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

nbgrader/preprocessors/overwritekernelspec.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ def preprocess(self, nb: NotebookNode, resources: ResourcesDict) -> Tuple[Notebo
1717
db_url = resources['nbgrader']['db_url']
1818

1919
with Gradebook(db_url) as gb:
20-
kernelspec = json.loads(
21-
gb.find_notebook(notebook_id, assignment_id).kernelspec)
20+
kernelspec = gb.find_notebook(notebook_id, assignment_id).kernelspec
21+
if kernelspec is not None:
22+
kernelspec = json.loads(kernelspec)
23+
2224
self.log.debug("Source notebook kernelspec: {}".format(kernelspec))
2325
self.log.debug(
2426
"Submitted notebook kernelspec: {}"

nbgrader/tests/preprocessors/test_overwritekernelspec.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,22 @@ def test_overwrite_kernelspec(self, preprocessors, resources, gradebook):
5757
notebook = gradebook.find_notebook("test", "ps0")
5858
assert nb.metadata['kernelspec'] == kernelspec
5959
assert json.loads(notebook.kernelspec) == kernelspec
60+
61+
def test_overwrite_kernelspec_null_spec(self, preprocessors, resources, gradebook):
62+
# Create a notebook without a kernelspec
63+
gradebook.add_notebook("test", "ps0")
64+
65+
kernelspec = dict(
66+
display_name="Python 3",
67+
name="python3",
68+
language="python",
69+
)
70+
71+
nb = new_notebook()
72+
nb.metadata["kernelspec"] = kernelspec
73+
nb, resources = preprocessors[1].preprocess(nb, resources)
74+
75+
validate(nb)
76+
notebook = gradebook.find_notebook("test", "ps0")
77+
assert notebook.kernelspec is None
78+
assert nb.metadata["kernelspec"] == kernelspec

0 commit comments

Comments
 (0)