|
6 | 6 | if len(sessions) == 0:
|
7 | 7 | sessions = range(9)
|
8 | 8 |
|
9 |
| -FIRST_CELL = '''############## PLEASE RUN THIS CELL FIRST! ################### |
| 9 | +FIRST_CELL = """############## PLEASE RUN THIS CELL FIRST! ################### |
10 | 10 |
|
11 | 11 | # import everything and define a test runner function
|
12 | 12 | from importlib import reload
|
13 | 13 | from helper import run
|
14 |
| -''' |
| 14 | +""" |
15 | 15 |
|
16 |
| -UNITTEST_TEMPLATE_1 = '''### Exercise {exercise_number} |
| 16 | +UNITTEST_TEMPLATE_1 = """### Exercise {exercise_number} |
17 | 17 |
|
18 | 18 | {instructions}
|
19 | 19 |
|
20 |
| -#### Make [this test](/edit/{path}/{module}.py) pass: `{module}.py:{test_suite}:{test}`''' |
| 20 | +#### Make [this test](/edit/{path}/{module}.py) pass: `{module}.py:{test_suite}:{test}`""" |
21 | 21 |
|
22 | 22 |
|
23 |
| -UNITTEST_TEMPLATE_2 = '''# Exercise {exercise_number} |
| 23 | +UNITTEST_TEMPLATE_2 = """# Exercise {exercise_number} |
24 | 24 |
|
25 | 25 | reload({module})
|
26 |
| -run({module}.{test_suite}('{test}'))''' |
| 26 | +run({module}.{test_suite}('{test}'))""" |
27 | 27 |
|
28 | 28 |
|
29 |
| -UNITTEST_TEMPLATE_3 = '''# Exercise {exercise_number} |
| 29 | +UNITTEST_TEMPLATE_3 = """# Exercise {exercise_number} |
30 | 30 |
|
31 | 31 | reload({module})
|
32 | 32 | reload(script)
|
33 |
| -run({module}.{test_suite}('{test}'))''' |
| 33 | +run({module}.{test_suite}('{test}'))""" |
34 | 34 |
|
35 | 35 |
|
36 |
| -EXERCISE_TEMPLATE_1 = '''### Exercise {exercise_number} |
37 |
| -{instructions}''' |
| 36 | +EXERCISE_TEMPLATE_1 = """### Exercise {exercise_number} |
| 37 | +{instructions}""" |
38 | 38 |
|
39 | 39 |
|
40 |
| -EXERCISE_TEMPLATE_2 = '''# Exercise {exercise_number} |
| 40 | +EXERCISE_TEMPLATE_2 = """# Exercise {exercise_number} |
41 | 41 |
|
42 |
| -{code}''' |
| 42 | +{code}""" |
43 | 43 |
|
44 | 44 |
|
45 | 45 | for session in sessions:
|
46 | 46 | notebook = nbformat.v4.new_notebook()
|
47 | 47 | notebook_complete = nbformat.v4.new_notebook()
|
48 |
| - cells = notebook['cells'] |
49 |
| - cells_complete = notebook_complete['cells'] |
50 |
| - path = 'session{}'.format(session) |
51 |
| - with open('{}/answers.py'.format(path), 'r') as f: |
52 |
| - current = '' |
| 48 | + cells = notebook["cells"] |
| 49 | + cells_complete = notebook_complete["cells"] |
| 50 | + path = "session{}".format(session) |
| 51 | + with open("{}/answers.py".format(path), "r") as f: |
| 52 | + current = "" |
53 | 53 | cell_type = None
|
54 | 54 | exercise_number = 1
|
55 | 55 | first_code_cell = True
|
56 | 56 | for l in f:
|
57 | 57 | line = l.strip()
|
58 |
| - if line in ('#markdown', '#code', '#exercise', '#unittest'): |
| 58 | + if line in ("#markdown", "#code", "#exercise", "#unittest"): |
59 | 59 | cell_type = line[1:]
|
60 |
| - elif line == '#end{}'.format(cell_type): |
61 |
| - if cell_type == 'markdown': |
| 60 | + elif line == "#end{}".format(cell_type): |
| 61 | + if cell_type == "markdown": |
62 | 62 | markdown_cell = nbformat.v4.new_markdown_cell(current)
|
63 | 63 | cells.append(markdown_cell)
|
64 | 64 | cells_complete.append(markdown_cell)
|
65 |
| - elif cell_type == 'code': |
| 65 | + elif cell_type == "code": |
66 | 66 | # only take >>> or ... lines
|
67 | 67 | lines = []
|
68 |
| - for line in current.split('\n'): |
69 |
| - if line.startswith('>>> ') or line.startswith('... '): |
70 |
| - line = re.sub(r'\\\\x', r'\\x', line) |
| 68 | + for line in current.split("\n"): |
| 69 | + if line.startswith(">>> ") or line.startswith("... "): |
| 70 | + line = re.sub(r"\\\\x", r"\\x", line) |
71 | 71 | lines.append(line[4:])
|
72 | 72 | if first_code_cell:
|
73 |
| - code = FIRST_CELL + '\n'.join(lines) |
| 73 | + code = FIRST_CELL + "\n".join(lines) |
74 | 74 | first_code_cell = False
|
75 | 75 | else:
|
76 |
| - code = '\n'.join(lines) |
| 76 | + code = "\n".join(lines) |
77 | 77 | code_cell = nbformat.v4.new_code_cell(code)
|
78 | 78 | cells.append(code_cell)
|
79 | 79 | cells_complete.append(code_cell)
|
80 |
| - elif cell_type == 'exercise': |
81 |
| - instructions, code = current.split('---') |
| 80 | + elif cell_type == "exercise": |
| 81 | + instructions, code = current.split("---") |
82 | 82 | markdown = EXERCISE_TEMPLATE_1.format(
|
83 | 83 | exercise_number=exercise_number,
|
84 | 84 | instructions=instructions,
|
|
88 | 88 | cells_complete.append(markdown_cell)
|
89 | 89 | lines = []
|
90 | 90 | lines_complete = []
|
91 |
| - for line in code.split('\n'): |
92 |
| - if line.startswith('>>> ') or line.startswith('... '): |
93 |
| - line = re.sub(r'\\\\x', r'\\x', line) |
94 |
| - start_alt = line.find(' #/') |
| 91 | + for line in code.split("\n"): |
| 92 | + if line.startswith(">>> ") or line.startswith("... "): |
| 93 | + line = re.sub(r"\\\\x", r"\\x", line) |
| 94 | + start_alt = line.find(" #/") |
95 | 95 | if start_alt == -1:
|
96 | 96 | lines.append(line[4:])
|
97 | 97 | lines_complete.append(line[4:])
|
98 | 98 | else:
|
99 |
| - lines.append(line[start_alt+4:]) |
| 99 | + lines.append(line[start_alt + 4 :]) |
100 | 100 | lines_complete.append(line[4:start_alt])
|
101 | 101 | code_1 = EXERCISE_TEMPLATE_2.format(
|
102 |
| - code='\n'.join(lines), |
| 102 | + code="\n".join(lines), |
103 | 103 | exercise_number=exercise_number,
|
104 | 104 | )
|
105 | 105 | code_cell_1 = nbformat.v4.new_code_cell(code_1)
|
106 | 106 | cells.append(code_cell_1)
|
107 | 107 | code_2 = EXERCISE_TEMPLATE_2.format(
|
108 |
| - code='\n'.join(lines_complete), |
| 108 | + code="\n".join(lines_complete), |
109 | 109 | exercise_number=exercise_number,
|
110 | 110 | )
|
111 | 111 | code_cell_2 = nbformat.v4.new_code_cell(code_2)
|
112 | 112 | cells_complete.append(code_cell_2)
|
113 | 113 | exercise_number += 1
|
114 |
| - elif cell_type == 'unittest': |
115 |
| - module, test_suite, test, instructions = current.split(':', 3) |
| 114 | + elif cell_type == "unittest": |
| 115 | + module, test_suite, test, instructions = current.split(":", 3) |
116 | 116 | markdown = UNITTEST_TEMPLATE_1.format(
|
117 | 117 | exercise_number=exercise_number,
|
118 | 118 | instructions=instructions,
|
|
124 | 124 | markdown_cell = nbformat.v4.new_markdown_cell(markdown)
|
125 | 125 | cells.append(markdown_cell)
|
126 | 126 | cells_complete.append(markdown_cell)
|
127 |
| - if module == 'op': |
| 127 | + if module == "op": |
128 | 128 | template = UNITTEST_TEMPLATE_3
|
129 | 129 | else:
|
130 | 130 | template = UNITTEST_TEMPLATE_2
|
|
139 | 139 | cells.append(code_cell)
|
140 | 140 | cells_complete.append(code_cell)
|
141 | 141 | exercise_number += 1
|
142 |
| - current = '' |
| 142 | + current = "" |
143 | 143 | cell_type = None
|
144 | 144 | elif cell_type:
|
145 |
| - current += line + '\n' |
146 |
| - nbformat.write(notebook, '{}/session{}.ipynb'.format(path, session)) |
147 |
| - nbformat.write(notebook_complete, '{}/complete/session{}.ipynb'.format(path, session)) |
| 145 | + current += line + "\n" |
| 146 | + nbformat.write(notebook, "{}/session{}.ipynb".format(path, session)) |
| 147 | + nbformat.write( |
| 148 | + notebook_complete, "{}/complete/session{}.ipynb".format(path, session) |
| 149 | + ) |
0 commit comments