mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-19 04:21:17 +00:00
Merge pull request #13 from JaviMerino/ipynb_exporter_with_ipython_3
Make the ipynb_exporter result processor work with ipython version 3
This commit is contained in:
commit
7655007f8a
@ -28,63 +28,94 @@ except ImportError as import_error:
|
|||||||
else:
|
else:
|
||||||
import_error_str = import_error.message
|
import_error_str = import_error.message
|
||||||
|
|
||||||
|
# The current code generates notebooks version 3
|
||||||
|
NBFORMAT_VERSION = 3
|
||||||
|
|
||||||
if IPython and (IPython.version_info[0] == 2):
|
if IPython and (IPython.version_info[0] == 2):
|
||||||
import IPython.kernel
|
import IPython.kernel
|
||||||
import IPython.nbformat.v3
|
import IPython.nbformat.v3
|
||||||
|
|
||||||
def read_notebook(notebook_in):
|
def read_notebook(notebook_in):
|
||||||
return IPython.nbformat.v3.reads_json(notebook_in)
|
return IPython.nbformat.v3.reads_json(notebook_in) # pylint: disable=E1101
|
||||||
|
|
||||||
def write_notebook(notebook, fout):
|
def write_notebook(notebook, fout):
|
||||||
IPython.nbformat.v3.nbjson.JSONWriter().write(notebook, fout)
|
IPython.nbformat.v3.nbjson.JSONWriter().write(notebook, fout) # pylint: disable=E1101
|
||||||
|
|
||||||
NotebookNode = IPython.nbformat.v3.NotebookNode
|
NotebookNode = IPython.nbformat.v3.NotebookNode # pylint: disable=E1101
|
||||||
|
|
||||||
IPYTHON_NBCONVERT = ['ipython', 'nbconvert', '--to=latex', '--post=PDF']
|
IPYTHON_NBCONVERT = ['ipython', 'nbconvert', '--to=latex', '--post=PDF']
|
||||||
|
|
||||||
|
elif IPython and (IPython.version_info[0] == 3):
|
||||||
|
import IPython.kernel
|
||||||
|
import IPython.nbformat
|
||||||
|
|
||||||
|
def read_notebook(notebook_in):
|
||||||
|
return IPython.nbformat.reads(notebook_in, NBFORMAT_VERSION) # pylint: disable=E1101
|
||||||
|
|
||||||
|
def write_notebook(notebook, fout):
|
||||||
|
IPython.nbformat.write(notebook, fout) # pylint: disable=E1101
|
||||||
|
|
||||||
|
NotebookNode = IPython.nbformat.NotebookNode # pylint: disable=E1101
|
||||||
|
|
||||||
|
IPYTHON_NBCONVERT = ['ipython', 'nbconvert', '--to=pdf']
|
||||||
|
|
||||||
elif IPython:
|
elif IPython:
|
||||||
# Unsupported IPython version
|
# Unsupported IPython version
|
||||||
IPython_ver_str = ".".join([str(n) for n in IPython.version_info])
|
IPython_ver_str = ".".join([str(n) for n in IPython.version_info])
|
||||||
import_error_str = 'Unsupported IPython version {}'.format(IPython_ver_str)
|
import_error_str = 'Unsupported IPython version {}'.format(IPython_ver_str)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_valid_output(msg):
|
||||||
|
"""Parse a valid result from an execution of a cell in an ipython kernel"""
|
||||||
|
msg_type = msg["msg_type"]
|
||||||
|
if msg_type == 'error':
|
||||||
|
msg_type = 'pyerr'
|
||||||
|
elif msg_type == 'execute_result':
|
||||||
|
msg_type = 'pyout'
|
||||||
|
|
||||||
|
content = msg["content"]
|
||||||
|
out = NotebookNode(output_type=msg_type)
|
||||||
|
|
||||||
|
if msg_type == "stream":
|
||||||
|
out.stream = content["name"]
|
||||||
|
try:
|
||||||
|
out.text = content['data']
|
||||||
|
except KeyError:
|
||||||
|
out.text = content['text']
|
||||||
|
elif msg_type in ("display_data", "pyout"):
|
||||||
|
for mime, data in content["data"].iteritems():
|
||||||
|
if mime == "text/plain":
|
||||||
|
attr = "text"
|
||||||
|
else:
|
||||||
|
attr = mime.split("/")[-1]
|
||||||
|
setattr(out, attr, data)
|
||||||
|
elif msg_type == "pyerr":
|
||||||
|
out.ename = content["ename"]
|
||||||
|
out.evalue = content["evalue"]
|
||||||
|
out.traceback = content["traceback"]
|
||||||
|
else:
|
||||||
|
raise ValueError("Unknown msg_type {}".format(msg_type))
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
def run_cell(kernel_client, cell):
|
def run_cell(kernel_client, cell):
|
||||||
"""Run a cell of a notebook in an ipython kernel and return its output"""
|
"""Run a cell of a notebook in an ipython kernel and return its output"""
|
||||||
kernel_client.execute(cell.input)
|
kernel_client.execute(cell.input)
|
||||||
|
|
||||||
|
input_acknowledged = False
|
||||||
outs = []
|
outs = []
|
||||||
while True:
|
while True:
|
||||||
msg = kernel_client.get_iopub_msg()
|
msg = kernel_client.get_iopub_msg()
|
||||||
|
|
||||||
msg_type = msg["msg_type"]
|
if msg["msg_type"] == "status":
|
||||||
content = msg["content"]
|
if msg["content"]["execution_state"] == "idle" and input_acknowledged:
|
||||||
out = NotebookNode(output_type=msg_type)
|
|
||||||
|
|
||||||
if msg_type == "status":
|
|
||||||
if content["execution_state"] == "idle":
|
|
||||||
break
|
break
|
||||||
else:
|
elif msg["msg_type"] in ('pyin', 'execute_input'):
|
||||||
continue
|
input_acknowledged = True
|
||||||
elif msg_type == "pyin":
|
|
||||||
continue
|
|
||||||
elif msg_type == "stream":
|
|
||||||
out.stream = content["name"]
|
|
||||||
out.text = content["data"]
|
|
||||||
elif msg_type in ("display_data", "pyout"):
|
|
||||||
for mime, data in content["data"].iteritems():
|
|
||||||
if mime == "text/plain":
|
|
||||||
attr = "text"
|
|
||||||
else:
|
|
||||||
attr = mime.split("/")[-1]
|
|
||||||
setattr(out, attr, data)
|
|
||||||
elif msg_type == "pyerr":
|
|
||||||
out.ename = content["ename"]
|
|
||||||
out.evalue = content["evalue"]
|
|
||||||
out.traceback = content["traceback"]
|
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unknown msg_type {}".format(msg_type))
|
out = parse_valid_output(msg)
|
||||||
|
outs.append(out)
|
||||||
outs.append(out)
|
|
||||||
|
|
||||||
return outs
|
return outs
|
||||||
|
|
||||||
@ -105,7 +136,7 @@ def run_notebook(notebook):
|
|||||||
cell.outputs = run_cell(kernel_client, cell)
|
cell.outputs = run_cell(kernel_client, cell)
|
||||||
|
|
||||||
cell.prompt_number = prompt_number
|
cell.prompt_number = prompt_number
|
||||||
if cell.outputs:
|
if cell.outputs and cell.outputs[0]['output_type'] == 'pyout':
|
||||||
cell.outputs[0]["prompt_number"] = prompt_number
|
cell.outputs[0]["prompt_number"] = prompt_number
|
||||||
|
|
||||||
kernel_manager.shutdown_kernel()
|
kernel_manager.shutdown_kernel()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user