Last active
May 30, 2018 14:40
-
-
Save whatalnk/c8b3207267d798be713ea4a4664e2ccf to your computer and use it in GitHub Desktop.
File save hooks of jupyter. Export script and HTML file when notebook saved.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# http://jupyter-notebook.readthedocs.io/en/4.x/extending/savehooks.html | |
import io | |
import os | |
from notebook.utils import to_api_path | |
_script_exporter = None | |
_html_exporter = None | |
def script_and_html_post_save(model, os_path, contents_manager, **kwargs): | |
"""convert notebooks to Python script and HTML file after save with nbconvert | |
""" | |
from nbconvert.exporters.script import ScriptExporter | |
from nbconvert.exporters.html import HTMLExporter | |
if model['type'] != 'notebook': | |
return | |
global _script_exporter | |
if _script_exporter is None: | |
_script_exporter = ScriptExporter(parent=contents_manager) | |
global _html_exporter | |
if _html_exporter is None: | |
_html_exporter = HTMLExporter(parent=contents_manager) | |
log = contents_manager.log | |
base, ext = os.path.splitext(os_path) | |
script, resources = _script_exporter.from_filename(os_path) | |
script_fname = base + resources.get('output_extension', '.txt') | |
log.info("Saving script /%s", | |
to_api_path(script_fname, contents_manager.root_dir)) | |
with io.open(script_fname, 'w', encoding='utf-8') as f: | |
f.write(script) | |
html_fname = base + '.html' | |
html, html_resources = _html_exporter.from_filename(os_path) | |
html_fname = base + html_resources.get('output_extension', '.txt') | |
log.info("Saving HTML /%s", to_api_path(html_fname, contents_manager.root_dir)) | |
with io.open(html_fname, 'w', encoding='utf-8') as f: | |
f.write(html) | |
c.FileContentsManager.post_save_hook = script_and_html_post_save |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment