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

1import json 

2 

3from nbformat.notebooknode import NotebookNode 

4from nbgrader import utils 

5from nbgrader.api import MissingEntry 

6from nbgrader.preprocessors import SaveCells as NbgraderSaveCells 

7 

8from ..utils.extra_cells import is_multiplechoice, is_singlechoice 

9 

10 

11class SaveCells(NbgraderSaveCells): 

12 def _create_source_cell(self, cell: NotebookNode) -> None: 

13 grade_id = cell.metadata.nbgrader["grade_id"] 

14 

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 = {} 

24 

25 source = cell.source 

26 

27 if is_singlechoice(cell) or is_multiplechoice(cell): 

28 source = json.dumps(cell.metadata.extended_cell) 

29 

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 ) 

38 

39 self.new_source_cells[grade_id] = source_cell