# Widget related imports
from IPython.html import widgets
from IPython.display import display, clear_output, Javascript
from IPython.utils.traitlets import Unicode
# nbconvert related imports
from IPython.nbconvert import get_export_names, export_by_name
from IPython.nbconvert.writers import FilesWriter
from IPython.nbformat import current
from IPython.nbconvert.utils.exceptions import ConversionException
notebook_name = widgets.TextWidget()
js = """var model = IPython.notebook.kernel.widget_manager.get_model('{model_id}');
model.set('value', IPython.notebook.notebook_name);
model.save();""".format(model_id=notebook_name.model_id)
display(Javascript(data=js))
filename = notebook_name.value
filename
exporter_names = widgets.DropdownWidget(values=get_export_names(), value='html')
export_button = widgets.ButtonWidget(description="Export")
download_link = widgets.HTMLWidget(visible=False)
file_writer = FilesWriter()
def export(name, nb):
# Get a unique key for the notebook and set it in the resources object.
notebook_name = name[:name.rfind('.')]
resources = {}
resources['unique_key'] = notebook_name
resources['output_files_dir'] = '%s_files' % notebook_name
# Try to export
try:
output, resources = export_by_name(exporter_names.value, nb)
except ConversionException as e:
download_link.value = "
Could not export notebook!"
else:
write_results = file_writer.write(output, resources, notebook_name=notebook_name)
download_link.value = "
Results: \"{filename}\"".format(filename=write_results)
download_link.visible = True
def handle_export(widget):
with open(filename, 'r') as f:
export(filename, current.read(f, 'json'))
export_button.on_click(handle_export)
display(exporter_names, export_button, download_link)