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
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1import base64
2import pickle
3import re
5from nbgrader.preprocessors import NbGraderPreprocessor
8class Unscramble(NbGraderPreprocessor):
9 def __init__(self, **kw):
10 self.__pattern = re.compile("{{([^{]+)}}")
11 self.log.info("Init Unscramble")
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))
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 )
26 return nb, resources