Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
# -----------------------------------------------------------------------------
# Copyright (C) Jupyter Development Team
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
# -----------------------------------------------------------------------------
from nbconvert.exporters import Exporter
from tornado.log import app_log
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
class NbFormatError(Exception):
exporters = {}
def render_notebook(format, nb, url=None, forced_theme=None, config=None):
exporter = format["exporter"]
if not isinstance(exporter, Exporter):
# allow exporter to be passed as a class, rather than instance
# because Exporter instances cannot be passed across multiprocessing boundaries
# instances are cached by class to avoid repeated instantiation of duplicates
exporter_cls = exporter
if exporter_cls not in exporters:"instantiating %s" % exporter_cls.__name__)
exporters[exporter_cls] = exporter_cls(config=config, log=app_log)
exporter = exporters[exporter_cls]
css_theme = nb.get("metadata", {}).get("_nbviewer", {}).get("css", None)
if not css_theme or not css_theme.strip():
# whitespace
css_theme = None
if forced_theme:
css_theme = forced_theme
# get the notebook title, if any
name =
except AttributeError:
name = ""
if not name and url is not None:
name = url.rsplit("/")[-1]
if not name.endswith(".ipynb"):
name = name + ".ipynb"
html, resources = exporter.from_notebook_node(nb)
if "postprocess" in format:
html, resources = format["postprocess"](html, resources)
config = {"download_name": name, "css_theme": css_theme}
return html, config