mirror of
https://github.com/bluxmit/alnoda-workspaces.git
synced 2024-04-29 19:52:19 +12:00
64 lines
2 KiB
Python
64 lines
2 KiB
Python
# -----------------------------------------------------------------------------
|
|
# 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):
|
|
pass
|
|
|
|
|
|
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:
|
|
app_log.info("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
|
|
try:
|
|
name = nb.metadata.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
|