Source code for grader_convert.preprocessors.overwritekernelspec



import json
from typing import Tuple

from nbconvert.exporters.exporter import ResourcesDict
from nbformat.notebooknode import NotebookNode

from grader_convert.gradebook.gradebook import Gradebook
from grader_convert.preprocessors.base import NbGraderPreprocessor


[docs]class OverwriteKernelspec(NbGraderPreprocessor): """A preprocessor for checking the notebook kernelspec metadata."""
[docs] def preprocess( self, nb: NotebookNode, resources: ResourcesDict ) -> Tuple[NotebookNode, ResourcesDict]: # pull information from the resources self.notebook_id = resources["unique_key"] self.json_path = resources["output_json_path"] with Gradebook(self.json_path) as gb: kernelspec = json.loads(gb.find_notebook(self.notebook_id).kernelspec) self.log.debug("Source notebook kernelspec: {}".format(kernelspec)) self.log.debug( "Submitted notebook kernelspec: {}" "".format(nb.metadata.get("kernelspec", None)) ) if kernelspec: self.log.info( "Overwriting submitted notebook kernelspec: {}" "".format(kernelspec) ) nb.metadata["kernelspec"] = kernelspec return nb, resources