Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132923 views
License: OTHER
1
import os
2
import itertools
3
4
from ipykernel import kernelspec as ks
5
import nbformat
6
from nbformat.v4.nbbase import new_markdown_cell
7
8
from generate_contents import NOTEBOOK_DIR, REG, iter_notebooks, get_notebook_title
9
10
11
def prev_this_next(it):
12
a, b, c = itertools.tee(it,3)
13
next(c)
14
return zip(itertools.chain([None], a), b, itertools.chain(c, [None]))
15
16
17
PREV_TEMPLATE = "< [{title}]({url}) "
18
CONTENTS = "| [Contents](Index.ipynb) |"
19
NEXT_TEMPLATE = " [{title}]({url}) >"
20
NAV_COMMENT = "<!--NAVIGATION-->\n"
21
22
COLAB_LINK = """
23
24
<a href="https://colab.research.google.com/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/{notebook_filename}"><img align="left" src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open in Colab" title="Open and Execute in Google Colaboratory"></a>
25
"""
26
27
28
def iter_navbars():
29
for prev_nb, nb, next_nb in prev_this_next(iter_notebooks()):
30
navbar = NAV_COMMENT
31
if prev_nb:
32
navbar += PREV_TEMPLATE.format(title=get_notebook_title(prev_nb),
33
url=prev_nb)
34
navbar += CONTENTS
35
if next_nb:
36
navbar += NEXT_TEMPLATE.format(title=get_notebook_title(next_nb),
37
url=next_nb)
38
39
navbar += COLAB_LINK.format(notebook_filename=os.path.basename(nb))
40
41
yield os.path.join(NOTEBOOK_DIR, nb), navbar
42
43
44
def write_navbars():
45
for nb_name, navbar in iter_navbars():
46
nb = nbformat.read(nb_name, as_version=4)
47
nb_file = os.path.basename(nb_name)
48
is_comment = lambda cell: cell.source.startswith(NAV_COMMENT)
49
50
if is_comment(nb.cells[1]):
51
print("- amending navbar for {0}".format(nb_file))
52
nb.cells[1].source = navbar
53
else:
54
print("- inserting navbar for {0}".format(nb_file))
55
nb.cells.insert(1, new_markdown_cell(source=navbar))
56
57
if is_comment(nb.cells[-1]):
58
nb.cells[-1].source = navbar
59
else:
60
nb.cells.append(new_markdown_cell(source=navbar))
61
nbformat.write(nb, nb_name)
62
63
64
if __name__ == '__main__':
65
write_navbars()
66
67