Coverage for e2xgrader/preprocessors/savecells.py: 38%
21 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
3from nbformat.notebooknode import NotebookNode
4from nbgrader import utils
5from nbgrader.api import MissingEntry
6from nbgrader.preprocessors import SaveCells as NbgraderSaveCells
8from ..utils.extra_cells import is_multiplechoice, is_singlechoice
11class SaveCells(NbgraderSaveCells):
12 def _create_source_cell(self, cell: NotebookNode) -> None:
13 grade_id = cell.metadata.nbgrader["grade_id"]
15 try:
16 source_cell = self.gradebook.find_source_cell(
17 grade_id, self.notebook_id, self.assignment_id
18 ).to_dict()
19 del source_cell["name"]
20 del source_cell["notebook"]
21 del source_cell["assignment"]
22 except MissingEntry:
23 source_cell = {}
25 source = cell.source
27 if is_singlechoice(cell) or is_multiplechoice(cell):
28 source = json.dumps(cell.metadata.extended_cell)
30 source_cell.update(
31 {
32 "cell_type": cell.cell_type,
33 "locked": utils.is_locked(cell),
34 "source": source,
35 "checksum": cell.metadata.nbgrader.get("checksum", None),
36 }
37 )
39 self.new_source_cells[grade_id] = source_cell