mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-20 20:09:11 +00:00
ipynb_exporter: learn to convert the notebook to HTML
This commit is contained in:
parent
539c3de7b8
commit
30d7ee52f4
@ -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
|
||||
|
@ -46,6 +46,7 @@ if IPython:
|
||||
|
||||
NotebookNode = IPython.nbformat.NotebookNode # pylint: disable=E1101
|
||||
|
||||
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
|
||||
@ -59,6 +60,7 @@ if IPython:
|
||||
|
||||
NotebookNode = IPython.nbformat.v3.NotebookNode # pylint: disable=E1101
|
||||
|
||||
IPYTHON_NBCONVERT_HTML = ['ipython', 'nbconvert', '--to=html']
|
||||
IPYTHON_NBCONVERT_PDF = ['ipython', 'nbconvert', '--to=latex',
|
||||
'--post=PDF']
|
||||
else:
|
||||
@ -143,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_PDF + [nbbasename], stderr=devnull)
|
||||
subprocess.check_call(ipython_command + [nbbasename], stderr=devnull)
|
||||
|
||||
os.chdir(prev_dir)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user