in utils/check_nb_kernel.py [0:0]
def check_notebooks(nb_path: str, k_tgts: Iterable[str], verbose: bool = False):
"""Check notebooks for valid kernelspec."""
err_count = 0
good_count = 0
for nbook in _get_notebook_paths(nb_path):
if ".ipynb_checkpoints" in str(nbook):
continue
try:
nb_obj = nbformat.read(str(nbook), as_version=4.0)
except nbformat.reader.NotJSONError as err:
print(f"Error reading {nbook}\n{err}")
err_count += 1
continue
kernelspec = nb_obj.get("metadata", {}).get("kernelspec", None)
if not kernelspec:
print("Error: no kernel information.")
continue
nb_ok = False
for config in k_tgts:
tgt_spec = IP_KERNEL_SPEC[config]
for k_name, k_item in kernelspec.items():
if tgt_spec[k_name] != k_item:
break
else:
nb_ok = True
if not nb_ok:
err_count += 1
_print_nb_header(nbook)
print("ERROR - Invalid kernelspec '" f"{kernelspec.get('name')}" "'")
print(" ", kernelspec, "\n")
continue
if verbose:
_print_nb_header(nbook)
print(f"{kernelspec['name']} ok\n")
good_count += 1
print(f"{good_count} notebooks with no errors, {err_count} with errors")
return good_count, err_count