Return a unified diff string between each cell in notebooks `a` and `b`.
(a: str, b: str, a_name: str, b_name: str)
| 40 | |
| 41 | |
| 42 | def ipynb_diff(a: str, b: str, a_name: str, b_name: str) -> str: |
| 43 | """Return a unified diff string between each cell in notebooks `a` and `b`.""" |
| 44 | a_nb = json.loads(a) |
| 45 | b_nb = json.loads(b) |
| 46 | diff_lines = [ |
| 47 | diff( |
| 48 | "".join(a_nb["cells"][cell_number]["source"]) + "\n", |
| 49 | "".join(b_nb["cells"][cell_number]["source"]) + "\n", |
| 50 | f"{a_name}:cell_{cell_number}", |
| 51 | f"{b_name}:cell_{cell_number}", |
| 52 | ) |
| 53 | for cell_number, cell in enumerate(a_nb["cells"]) |
| 54 | if cell["cell_type"] == "code" |
| 55 | ] |
| 56 | return "".join(diff_lines) |
| 57 | |
| 58 | |
| 59 | _line_pattern = re.compile(r"(.*?(?:\r\n|\n|\r|$))") |
no test coverage detected