Coverage for e2xgrader/preprocessors/overwritecells.py: 41%
22 statements
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1import json
2from typing import Tuple
4from nbconvert.exporters.exporter import ResourcesDict
5from nbformat.notebooknode import NotebookNode
6from nbgrader.api import MissingEntry
7from nbgrader.preprocessors import OverwriteCells as NbgraderOverwriteCells
9from ..utils.extra_cells import is_multiplechoice, is_singlechoice
12class OverwriteCells(NbgraderOverwriteCells):
13 def preprocess_cell(
14 self, cell: NotebookNode, resources: ResourcesDict, cell_index: int
15 ) -> Tuple[NotebookNode, ResourcesDict]:
16 if not (is_singlechoice(cell) or is_multiplechoice(cell)):
17 return super().preprocess_cell(cell, resources, cell_index)
19 grade_id = cell.metadata.get("nbgrader", {}).get("grade_id", None)
20 if grade_id is None:
21 return cell, resources
22 try:
23 source_cell = self.gradebook.find_source_cell(
24 grade_id, self.notebook_id, self.assignment_id
25 )
26 except MissingEntry:
27 self.log.warning(f"Cell {grade_id} does not exist in database")
28 del cell.metadata.nbgrader["grade_id"]
29 return cell, resources
31 cell.metadata.extended_cell.source = json.loads(source_cell.source)
33 return cell, resources