Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
:returns (parsed nb object, execution errors)
"""
major_version = sys.version_info[0]
kernel = kernel or 'python{}'.format(major_version)
dirname, __ = os.path.split(path)
os.chdir(dirname)
fname = os.path.join(here, 'test.ipynb')
args = [
"jupyter", "nbconvert", "--to", "notebook", "--execute",
"--ExecutePreprocessor.timeout={}".format(timeout),
"--ExecutePreprocessor.kernel_name={}".format(kernel),
"--output", fname, path]
subprocess.check_call(args)
nb = nbformat.read(io.open(fname, encoding='utf-8'),
nbformat.current_nbformat)
errors = [
output for cell in nb.cells if "outputs" in cell
for output in cell["outputs"] if output.output_type == "error"
]
os.remove(fname)
return nb, errors
dirname, __ = os.path.split(path)
os.chdir(dirname)
kername = "python3"
with tempfile.NamedTemporaryFile(suffix=".ipynb") as fout:
args = ["jupyter", "nbconvert", "--to", "notebook", "--execute",
"--ExecutePreprocessor.timeout=600",
"--ExecutePreprocessor.allow_errors=True",
"--ExecutePreprocessor.kernel_name={}".format(kername),
"--output", fout.name, path]
subprocess.check_call(args)
fout.seek(0)
nb = nbformat.read(fout, nbformat.current_nbformat)
errors = [output for cell in nb.cells if "outputs" in cell
for output in cell["outputs"]
if output.output_type == "error"]
return nb, errors
def _exec_notebook(self, ep, filename):
with open(filename) as f:
nb = nbformat.read(f, as_version=nbformat.current_nbformat)
try:
out = ep.preprocess(nb, {})
except CellExecutionError:
print('-' * 60)
traceback.print_exc(file=sys.stdout)
print('-' * 60)
self.assertTrue(False,
'Error executing the notebook %s. See above for error.'
% filename)
Returns
-------
nb: notebook object
errors: list of Exceptions
"""
with tempfile.NamedTemporaryFile(suffix=".ipynb") as fout:
args = [
"jupyter-nbconvert", "--to", "notebook", "--execute",
"--ExecutePreprocessor.timeout=600", "--output", fout.name, path
]
subprocess.check_call(args)
fout.seek(0)
nb = nbformat.read(fout, nbformat.current_nbformat)
errors = [output for cell in nb.cells if "outputs" in cell
for output in cell["outputs"] \
if output.output_type == "error"]
return nb, errors
"jupyter",
"nbconvert",
"--to",
"notebook",
"--execute",
"--ExecutePreprocessor.kernel_name=python",
"--ExecutePreprocessor.timeout=None",
"--output",
fp.name,
"--output-dir=.",
path,
]
subprocess.check_call(args)
nb = nbformat.read(
fp.name, nbformat.current_nbformat, encoding="UTF-8"
)
errors = [
output
for cell in nb.cells
if "outputs" in cell
for output in cell["outputs"]
if output.output_type == "error"
]
return nb, errors
"""Process the notebook and create all the pictures and files
This method runs the notebook using the :mod:`nbconvert` and
:mod:`nbformat` modules. It creates the :attr:`outfile` notebook,
a python and a rst file"""
infile = self.infile
outfile = self.outfile
in_dir = os.path.dirname(infile) + os.path.sep
odir = os.path.dirname(outfile) + os.path.sep
create_dirs(os.path.join(odir, 'images'))
ep = nbconvert.preprocessors.ExecutePreprocessor(
timeout=300)
cp = nbconvert.preprocessors.ClearOutputPreprocessor(
timeout=300)
self.nb = nb = nbformat.read(infile, nbformat.current_nbformat)
language_info = getattr(nb.metadata, 'language_info', {})
ext = language_info.get('file_extension', 'py')
self.script = self.get_out_file(ext.lstrip('.'))
disable_warnings = disable_warnings and self.script.endswith('.py')
# write and process rst_file
if self.preprocess:
# disable warnings in the rst file
if disable_warnings:
for i, cell in enumerate(nb.cells):
if cell['cell_type'] == 'code':
cell = cell.copy()
break
def nbnew(filename):
if not filename.endswith('.ipynb'):
filename += '.ipynb'
if os.path.exists(filename):
msg = "Notebook {} already exists"
print(msg.format(filename))
print("Opening existing notebook")
else:
nb_version = nbformat.versions[nbformat.current_nbformat]
nbformat.write(nb_version.new_notebook(),
filename)
return filename
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
from .exporter import Exporter
import nbformat
from traitlets import Enum, default
class NotebookExporter(Exporter):
"""Exports to an IPython notebook.
This is useful when you want to use nbconvert's preprocessors to operate on
a notebook (e.g. to execute it) and then write it back to a notebook file.
"""
nbformat_version = Enum(list(nbformat.versions),
default_value=nbformat.current_nbformat,
help="""The nbformat version to write.
Use this to downgrade notebooks.
"""
).tag(config=True)
@default('file_extension')
def _file_extension_default(self):
return '.ipynb'
output_mimetype = 'application/json'
def from_notebook_node(self, nb, resources=None, **kw):
nb_copy, resources = super(NotebookExporter, self).from_notebook_node(nb, resources, **kw)
if self.nbformat_version != nb_copy.nbformat:
resources['output_suffix'] = '.v%i' % self.nbformat_version
else:
"""
new_cells = []
# header
if self.header:
with io.open(self.header, encoding='utf-8') as fh:
header_nb = read_nb(fh, as_version=current_nbformat)
new_cells.extend(header_nb.cells)
# body
new_cells.extend(nb.cells)
# footer
if self.footer:
with io.open(self.footer, encoding='utf-8') as fh:
footer_nb = read_nb(fh, as_version=current_nbformat)
new_cells.extend(footer_nb.cells)
nb.cells = new_cells
super(IncludeHeaderFooter, self).preprocess(nb, resources)
return nb, resources
def preprocess(self, nb: NotebookNode, resources: ResourcesDict) -> Tuple[NotebookNode, ResourcesDict]:
"""Concatenates the cells from the header and footer notebooks to the
given cells.
"""
new_cells = []
# header
if self.header:
with io.open(self.header, encoding='utf-8') as fh:
header_nb = read_nb(fh, as_version=current_nbformat)
new_cells.extend(header_nb.cells)
# body
new_cells.extend(nb.cells)
# footer
if self.footer:
with io.open(self.footer, encoding='utf-8') as fh:
footer_nb = read_nb(fh, as_version=current_nbformat)
new_cells.extend(footer_nb.cells)
nb.cells = new_cells
super(IncludeHeaderFooter, self).preprocess(nb, resources)
return nb, resources