mirror of
https://github.com/jantic/DeOldify.git
synced 2026-08-28 17:45:27 +08:00
dff82b6d2e
All the files marked as executable were bugging me, so I ran this: find . -executable -type f -print0 | xargs -0 grep -L '#!' | xargs chmod -x
52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
import os.path, re, nbformat, jupyter_contrib_nbextensions
|
|
from nbconvert.preprocessors import Preprocessor
|
|
from nbconvert import HTMLExporter
|
|
from traitlets.config import Config
|
|
from pathlib import Path
|
|
|
|
__all__ = ['read_nb', 'convert_nb', 'convert_all']
|
|
|
|
exporter = HTMLExporter(Config())
|
|
exporter.exclude_input_prompt=True
|
|
exporter.exclude_output_prompt=True
|
|
#Loads the template to deal with hidden cells.
|
|
exporter.template_file = 'jekyll.tpl'
|
|
path = Path(__file__).parent
|
|
exporter.template_path.append(str(path))
|
|
|
|
def read_nb(fname):
|
|
"Read the notebook in `fname`."
|
|
with open(fname,'r') as f: return nbformat.reads(f.read(), as_version=4)
|
|
|
|
def convert_nb(fname, dest_path='.'):
|
|
"Convert a notebook `fname` to html file in `dest_path`."
|
|
from .gen_notebooks import remove_undoc_cells, remove_code_cell_jupyter_widget_state_elem
|
|
nb = read_nb(fname)
|
|
nb['cells'] = remove_undoc_cells(nb['cells'])
|
|
nb['cells'] = remove_code_cell_jupyter_widget_state_elem(nb['cells'])
|
|
fname = Path(fname).absolute()
|
|
dest_name = fname.with_suffix('.html').name
|
|
meta = nb['metadata']
|
|
meta_jekyll = meta['jekyll'] if 'jekyll' in meta else {'title': fname.with_suffix('').name}
|
|
meta_jekyll['nb_path'] = f'{fname.parent.name}/{fname.name}'
|
|
with open(f'{dest_path}/{dest_name}','w') as f:
|
|
f.write(exporter.from_notebook_node(nb, resources=meta_jekyll)[0])
|
|
|
|
def convert_all(folder, dest_path='.', force_all=False):
|
|
"Convert modified notebooks in `folder` to html pages in `dest_path`."
|
|
path = Path(folder)
|
|
|
|
changed_cnt = 0
|
|
for fname in path.glob("*.ipynb"):
|
|
# only rebuild modified files
|
|
fname_out = Path(dest_path)/fname.with_suffix('.html').name
|
|
if not force_all and fname_out.exists():
|
|
in_mod = os.path.getmtime(fname)
|
|
out_mod = os.path.getmtime(fname_out)
|
|
if in_mod < out_mod: continue
|
|
|
|
print(f"converting: {fname} => {fname_out}")
|
|
changed_cnt += 1
|
|
convert_nb(fname, dest_path=dest_path)
|
|
if not changed_cnt: print("No notebooks were modified")
|