Coverage for e2xgrader/preprocessors/unscramble.py: 100%

18 statements  

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

1import base64 

2import pickle 

3import re 

4 

5from nbgrader.preprocessors import NbGraderPreprocessor 

6 

7 

8class Unscramble(NbGraderPreprocessor): 

9 def __init__(self, **kw): 

10 self.__pattern = re.compile("{{([^{]+)}}") 

11 self.log.info("Init Unscramble") 

12 

13 def preprocess(self, nb, resources): 

14 if "scramble_config" in nb.metadata: 

15 byte_config = nb.metadata.scramble_config.config 

16 config = pickle.loads(base64.b85decode(byte_config)) 

17 

18 for cell in nb.cells: 

19 matches = self.__pattern.findall(cell.source) 

20 for m in matches: 

21 if m.strip() in config: 

22 cell.source = cell.source.replace( 

23 "{{" + m + "}}", str(config[m.strip()]) 

24 ) 

25 

26 return nb, resources