1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-02-20 20:09:11 +00:00

Merge pull request #39 from JaviMerino/ipynb_convert_to_html

ipynb_exporter convert to html
This commit is contained in:
setrofim 2015-07-09 13:58:51 +01:00
commit 2e4bda71a8
2 changed files with 41 additions and 13 deletions

View File

@ -84,6 +84,12 @@ class IPythonNotebookExporter(ResultProcessor):
.. note:: the URL should not contain the final part (the notebook name) which will be populated automatically.
'''),
Parameter('convert_to_html', kind=bool,
description='Convert the resulting notebook to HTML.'),
Parameter('show_html', kind=bool,
description='''Open the exported html notebook at the end of
the run. This can only be selected if convert_to_html has
also been selected.'''),
Parameter('convert_to_pdf', kind=bool,
description='Convert the resulting notebook to PDF.'),
Parameter('show_pdf', kind=bool,
@ -111,6 +117,10 @@ class IPythonNotebookExporter(ResultProcessor):
if self.notebook_directory and not os.path.isdir(self.notebook_directory):
raise ConfigError('notebook_directory {} does not exist'.format(self.notebook_directory))
if self.show_html and not self.convert_to_html: # pylint: disable=E0203
self.convert_to_html = True
self.logger.debug('Assuming "convert_to_html" as "show_html" is set')
if self.show_pdf and not self.convert_to_pdf: # pylint: disable=E0203
self.convert_to_pdf = True
self.logger.debug('Assuming "convert_to_pdf" as "show_pdf" is set')
@ -121,10 +131,16 @@ class IPythonNotebookExporter(ResultProcessor):
self.open_notebook()
if self.convert_to_pdf:
ipython.generate_pdf(self.nbbasename,
context.run_output_directory)
ipython.export_notebook(self.nbbasename,
context.run_output_directory, 'pdf')
if self.show_pdf:
self.open_pdf()
self.open_file('pdf')
if self.convert_to_html:
ipython.export_notebook(self.nbbasename,
context.run_output_directory, 'html')
if self.show_html:
self.open_file('html')
def generate_notebook(self, result, context):
"""Generate a notebook from the template and run it"""
@ -149,10 +165,10 @@ class IPythonNotebookExporter(ResultProcessor):
"""Open the notebook in a browser"""
webbrowser.open(self.notebook_url.rstrip('/') + '/' + self.nbbasename)
def open_pdf(self):
"""Open the PDF"""
pdf_file = os.path.splitext(self.notebook_file)[0] + ".pdf"
open_file(pdf_file)
def open_file(self, output_format):
"""Open the exported notebook"""
fname = os.path.splitext(self.notebook_file)[0] + "." + output_format
open_file(fname)
# Add the default template to the documentation

View File

@ -46,7 +46,8 @@ if IPython:
NotebookNode = IPython.nbformat.NotebookNode # pylint: disable=E1101
IPYTHON_NBCONVERT = ['ipython', 'nbconvert', '--to=pdf']
IPYTHON_NBCONVERT_HTML = ['ipython', 'nbconvert', '--to=html']
IPYTHON_NBCONVERT_PDF = ['ipython', 'nbconvert', '--to=pdf']
elif StrictVersion(IPython.__version__) >= StrictVersion('2.0.0'):
import IPython.kernel
import IPython.nbformat.v3
@ -59,7 +60,9 @@ if IPython:
NotebookNode = IPython.nbformat.v3.NotebookNode # pylint: disable=E1101
IPYTHON_NBCONVERT = ['ipython', 'nbconvert', '--to=latex', '--post=PDF']
IPYTHON_NBCONVERT_HTML = ['ipython', 'nbconvert', '--to=html']
IPYTHON_NBCONVERT_PDF = ['ipython', 'nbconvert', '--to=latex',
'--post=PDF']
else:
# Unsupported IPython version
import_error_str = 'Unsupported IPython version {}'.format(IPython.__version__)
@ -142,19 +145,28 @@ def run_notebook(notebook):
kernel_manager.shutdown_kernel()
def generate_pdf(nbbasename, output_directory):
"""Generate a PDF from the ipython notebook
def export_notebook(nbbasename, output_directory, output_format):
"""Generate a PDF or HTML from the ipython notebook
output_format has to be either 'pdf' or 'html'. These are the
only formats currently supported.
ipython nbconvert claims that the CLI is not stable, so keep this
function here to be able to cope with inconsistencies
"""
if output_format == "html":
ipython_command = IPYTHON_NBCONVERT_HTML
elif output_format == "pdf":
ipython_command = IPYTHON_NBCONVERT_PDF
else:
raise ValueError("Unknown output format: {}".format(output_format))
prev_dir = os.getcwd()
os.chdir(output_directory)
with open(os.devnull, 'w') as devnull:
subprocess.check_call(IPYTHON_NBCONVERT + [nbbasename], stderr=devnull)
subprocess.check_call(ipython_command + [nbbasename], stderr=devnull)
os.chdir(prev_dir)