# 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)