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

1import json 

2from typing import Tuple 

3 

4from nbconvert.exporters.exporter import ResourcesDict 

5from nbformat.notebooknode import NotebookNode 

6from nbgrader.api import MissingEntry 

7from nbgrader.preprocessors import OverwriteCells as NbgraderOverwriteCells 

8 

9from ..utils.extra_cells import is_multiplechoice, is_singlechoice 

10 

11 

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) 

18 

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 

30 

31 cell.metadata.extended_cell.source = json.loads(source_cell.source) 

32 

33 return cell, resources