Automatic notebook backups¶
While working with notebooks it is very common to…
In order to enable backup of notebooks copy the code below
into ${HOME}/.jupyter/jupyter_notebook_config.py.
You will need to restart the Jupyter server for this to take
effect.
from pathlib import Path
import io
import os
_script_exporter = None
def post_save(model, os_path, contents_manager, **kwargs):
    """post-save hook for converting notebooks to .py scripts"""
    from nbconvert.exporters.script import ScriptExporter
    if model['type'] != 'notebook':
        return   # only do this for notebooks
    if os_path.endswith('.py'):
        return
    if 'Untitled' in os_path:
        return  # do not convert Untitled notebooks
    global _script_exporter
    if _script_exporter is None:
        _script_exporter = ScriptExporter(parent=contents_manager)
    log = contents_manager.log
    p = Path(os_path)
    for j in range(9):
        try:
            f = p.parent / f'{p.stem}.py~{8-j}~'
            f.rename(p.parent / f'{p.stem}.py~{9-j}~')
        except:
            pass
    f = p.parent / f'{p.stem}.py'
    try:
        f.rename(p.parent / f'{p.stem}.py~{1}~')
    except:
        pass
    script, resources = _script_exporter.from_filename(os_path)
    with io.open(f"{f}", 'w', encoding='utf-8') as f:
        f.write(script)
c.FileContentsManager.post_save_hook = post_save