|
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