Coverage for e2xgrader/utils/extra_cells.py: 80%

35 statements  

« prev     ^ index     » next       coverage.py v7.4.2, created at 2024-03-14 13:22 +0100

1def is_extra_cell(cell): 

2 """Returns True if the cell is a form cell.""" 

3 if "nbgrader" not in cell.metadata: 

4 return False 

5 return "extended_cell" in cell.metadata 

6 

7 

8def is_attachment_cell(cell): 

9 return is_extra_cell(cell) and cell.metadata.extended_cell.type == "attachments" 

10 

11 

12def is_singlechoice(cell): 

13 return is_extra_cell(cell) and cell.metadata.extended_cell.type == "singlechoice" 

14 

15 

16def is_multiplechoice(cell): 

17 return is_extra_cell(cell) and cell.metadata.extended_cell.type == "multiplechoice" 

18 

19 

20def is_diagram(cell): 

21 return is_extra_cell(cell) and cell.metadata.extended_cell.type == "diagram" 

22 

23 

24def get_options(cell): 

25 if is_extra_cell(cell) and "options" in cell.metadata.extended_cell: 

26 return { 

27 key: value["value"] 

28 for key, value in cell.metadata.extended_cell["options"].items() 

29 } 

30 return dict() 

31 

32 

33def get_choices(cell): 

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

35 choice = cell.metadata.extended_cell.get("choice", []) 

36 return [int(i) for i in choice] 

37 return [] 

38 

39 

40def get_num_of_choices(cell): 

41 if is_multiplechoice(cell): 

42 return cell.metadata.extended_cell.num_of_choices 

43 

44 

45def get_instructor_choices(cell): 

46 if ( 

47 (is_singlechoice(cell) or is_multiplechoice(cell)) 

48 and ("source" in cell.metadata.extended_cell) 

49 and ("choice" in cell.metadata.extended_cell.source) 

50 ): 

51 return [int(i) for i in cell.metadata.extended_cell.source.choice] 

52 return [] 

53 

54 

55def clear_choices(cell): 

56 if is_extra_cell(cell): 

57 cell.metadata.extended_cell.choice = [] 

58 

59 

60def has_solution(cell): 

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

62 return "source" in cell.metadata.extended_cell 

63 return False