Uploaded Test files
This commit is contained in:
parent
f584ad9d97
commit
2e81cb7d99
16627 changed files with 2065359 additions and 102444 deletions
0
venv/Lib/site-packages/nbconvert/tests/__init__.py
Normal file
0
venv/Lib/site-packages/nbconvert/tests/__init__.py
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
180
venv/Lib/site-packages/nbconvert/tests/base.py
Normal file
180
venv/Lib/site-packages/nbconvert/tests/base.py
Normal file
|
@ -0,0 +1,180 @@
|
|||
"""Base test class for nbconvert"""
|
||||
|
||||
# Copyright (c) IPython Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
|
||||
import io
|
||||
import os
|
||||
import glob
|
||||
import shlex
|
||||
import shutil
|
||||
import sys
|
||||
import unittest
|
||||
import nbconvert
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
from nbformat import v4, write
|
||||
from testpath.tempdir import TemporaryWorkingDirectory
|
||||
|
||||
|
||||
class TestsBase(unittest.TestCase):
|
||||
"""Base tests class. Contains useful fuzzy comparison and nbconvert
|
||||
functions."""
|
||||
|
||||
|
||||
def fuzzy_compare(self, a, b, newlines_are_spaces=True, tabs_are_spaces=True,
|
||||
fuzzy_spacing=True, ignore_spaces=False,
|
||||
ignore_newlines=False, case_sensitive=False, leave_padding=False):
|
||||
"""
|
||||
Performs a fuzzy comparison of two strings. A fuzzy comparison is a
|
||||
comparison that ignores insignificant differences in the two comparands.
|
||||
The significance of certain differences can be specified via the keyword
|
||||
parameters of this method.
|
||||
"""
|
||||
|
||||
if not leave_padding:
|
||||
a = a.strip()
|
||||
b = b.strip()
|
||||
|
||||
if ignore_newlines:
|
||||
a = a.replace('\n', '')
|
||||
b = b.replace('\n', '')
|
||||
|
||||
if newlines_are_spaces:
|
||||
a = a.replace('\n', ' ')
|
||||
b = b.replace('\n', ' ')
|
||||
|
||||
if tabs_are_spaces:
|
||||
a = a.replace('\t', ' ')
|
||||
b = b.replace('\t', ' ')
|
||||
|
||||
if ignore_spaces:
|
||||
a = a.replace(' ', '')
|
||||
b = b.replace(' ', '')
|
||||
|
||||
if fuzzy_spacing:
|
||||
a = self.recursive_replace(a, ' ', ' ')
|
||||
b = self.recursive_replace(b, ' ', ' ')
|
||||
|
||||
if not case_sensitive:
|
||||
a = a.lower()
|
||||
b = b.lower()
|
||||
|
||||
self.assertEqual(a, b)
|
||||
|
||||
def recursive_replace(self, text, search, replacement):
|
||||
"""
|
||||
Performs a recursive replacement operation. Replaces all instances
|
||||
of a search string in a text string with a replacement string until
|
||||
the search string no longer exists. Recursion is needed because the
|
||||
replacement string may generate additional search strings.
|
||||
|
||||
For example:
|
||||
Replace "ii" with "i" in the string "Hiiii" yields "Hii"
|
||||
Another replacement cds "Hi" (the desired output)
|
||||
|
||||
Parameters
|
||||
----------
|
||||
text : string
|
||||
Text to replace in.
|
||||
search : string
|
||||
String to search for within "text"
|
||||
replacement : string
|
||||
String to replace "search" with
|
||||
"""
|
||||
while search in text:
|
||||
text = text.replace(search, replacement)
|
||||
return text
|
||||
|
||||
def create_temp_cwd(self, copy_filenames=None):
|
||||
temp_dir = TemporaryWorkingDirectory()
|
||||
|
||||
#Copy the files if requested.
|
||||
if copy_filenames is not None:
|
||||
self.copy_files_to(copy_filenames, dest=temp_dir.name)
|
||||
|
||||
#Return directory handler
|
||||
return temp_dir
|
||||
|
||||
@classmethod
|
||||
def merge_dicts(cls, *dict_args):
|
||||
# Because this is annoying to do inline
|
||||
outcome = {}
|
||||
for d in dict_args:
|
||||
outcome.update(d)
|
||||
return outcome
|
||||
|
||||
def create_empty_notebook(self, path):
|
||||
nb = v4.new_notebook()
|
||||
with io.open(path, 'w', encoding='utf-8') as f:
|
||||
write(nb, f, 4)
|
||||
|
||||
def copy_files_to(self, copy_filenames, dest='.'):
|
||||
"Copy test files into the destination directory"
|
||||
if not os.path.isdir(dest):
|
||||
os.makedirs(dest)
|
||||
files_path = self._get_files_path()
|
||||
for pattern in copy_filenames:
|
||||
files = glob.glob(os.path.join(files_path, pattern))
|
||||
assert files
|
||||
for match in files:
|
||||
shutil.copyfile(match, os.path.join(dest, os.path.basename(match)))
|
||||
|
||||
def _get_files_path(self):
|
||||
|
||||
#Get the relative path to this module in the IPython directory.
|
||||
names = self.__module__.split('.')[1:-1]
|
||||
names.append('files')
|
||||
|
||||
#Build a path using the nbconvert directory and the relative path we just
|
||||
#found.
|
||||
path = os.path.dirname(nbconvert.__file__)
|
||||
return os.path.join(path, *names)
|
||||
|
||||
def nbconvert(self, parameters, ignore_return_code=False, stdin=None):
|
||||
"""
|
||||
Run nbconvert as a shell command, listening for both Errors and
|
||||
non-zero return codes. Returns the tuple (stdout, stderr) of
|
||||
output produced during the nbconvert run.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
parameters : str, list(str)
|
||||
List of parameters to pass to IPython.
|
||||
ignore_return_code : optional bool (default False)
|
||||
Throw an OSError if the return code
|
||||
"""
|
||||
cmd = [sys.executable, '-m', 'nbconvert']
|
||||
if sys.platform == 'win32':
|
||||
if isinstance(parameters, (str,)):
|
||||
cmd = ' '.join(cmd) + ' ' + parameters
|
||||
else:
|
||||
cmd = ' '.join(cmd + parameters)
|
||||
else:
|
||||
if isinstance(parameters, (str,)):
|
||||
parameters = shlex.split(parameters)
|
||||
cmd += parameters
|
||||
p = Popen(cmd, stdout=PIPE, stderr=PIPE, stdin=PIPE)
|
||||
stdout, stderr = p.communicate(input=stdin)
|
||||
if not (p.returncode == 0 or ignore_return_code):
|
||||
raise OSError(stderr.decode('utf8', 'replace'))
|
||||
return stdout.decode('utf8', 'replace'), stderr.decode('utf8', 'replace')
|
||||
|
||||
|
||||
def assert_big_text_equal(a, b, chunk_size=80):
|
||||
"""assert that large strings are equal
|
||||
|
||||
Zooms in on first chunk that differs,
|
||||
to give better info than vanilla assertEqual for large text blobs.
|
||||
"""
|
||||
for i in range(0, len(a), chunk_size):
|
||||
chunk_a = a[i:i + chunk_size]
|
||||
chunk_b = b[i:i + chunk_size]
|
||||
assert chunk_a == chunk_b, "[offset: %i]\n%r != \n%r" % (i, chunk_a, chunk_b)
|
||||
|
||||
if len(a) > len(b):
|
||||
raise AssertionError("Length doesn't match (%i > %i). Extra text:\n%r" % (
|
||||
len(a), len(b), a[len(b):]))
|
||||
elif len(a) < len(b):
|
||||
raise AssertionError("Length doesn't match (%i < %i). Extra text:\n%r" % (
|
||||
len(a), len(b), a[len(b):]))
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
[nbconvert.exporters]
|
||||
entrypoint_test = eptest:DummyExporter
|
||||
|
||||
[nbconvert.exporters.script]
|
||||
dummy = eptest:DummyScriptExporter
|
|
@ -0,0 +1,8 @@
|
|||
from nbconvert.exporters import Exporter
|
||||
|
||||
class DummyExporter(Exporter):
|
||||
pass
|
||||
|
||||
class DummyScriptExporter(Exporter):
|
||||
def from_notebook_node(self, nb, resources=None, **kw):
|
||||
return 'dummy-script-exported', resources
|
25
venv/Lib/site-packages/nbconvert/tests/fake_exporters.py
Normal file
25
venv/Lib/site-packages/nbconvert/tests/fake_exporters.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
"""
|
||||
Module that define a custom exporter just to test the ability to invoke
|
||||
nbconvert with full qualified name
|
||||
"""
|
||||
|
||||
from traitlets import default
|
||||
|
||||
from nbconvert.exporters.html import HTMLExporter
|
||||
|
||||
|
||||
class MyExporter(HTMLExporter):
|
||||
"""
|
||||
My custom exporter
|
||||
"""
|
||||
|
||||
@default('file_extension')
|
||||
def _file_extension_default(self):
|
||||
"""
|
||||
The new file extension is `.test_ext`
|
||||
"""
|
||||
return '.test_ext'
|
||||
|
||||
@default('template_extension')
|
||||
def _template_extension_default(self):
|
||||
return '.html.j2'
|
3455
venv/Lib/site-packages/nbconvert/tests/files/Widget_List.ipynb
Normal file
3455
venv/Lib/site-packages/nbconvert/tests/files/Widget_List.ipynb
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
7
venv/Lib/site-packages/nbconvert/tests/files/hello.py
Normal file
7
venv/Lib/site-packages/nbconvert/tests/files/hello.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from nbconvert.writers.base import WriterBase
|
||||
|
||||
class HelloWriter(WriterBase):
|
||||
|
||||
def write(self, output, resources, notebook_name=None, **kw):
|
||||
with open('hello.txt', 'w') as outfile:
|
||||
outfile.write('hello world')
|
|
@ -0,0 +1,6 @@
|
|||
c = get_config()
|
||||
|
||||
#Export all the notebooks in the current directory to the sphinx_howto format.
|
||||
c.NbConvertApp.notebooks = ['notebook1.ipynb']
|
||||
c.NbConvertApp.export_format = 'python'
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.4.3"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
File diff suppressed because one or more lines are too long
13274
venv/Lib/site-packages/nbconvert/tests/files/notebook1.html
Normal file
13274
venv/Lib/site-packages/nbconvert/tests/files/notebook1.html
Normal file
File diff suppressed because it is too large
Load diff
176
venv/Lib/site-packages/nbconvert/tests/files/notebook1.ipynb
Normal file
176
venv/Lib/site-packages/nbconvert/tests/files/notebook1.ipynb
Normal file
|
@ -0,0 +1,176 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"# A simple SymPy example"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"First we import SymPy and initialize printing:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "-"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from sympy import init_printing\n",
|
||||
"from sympy import *\n",
|
||||
"init_printing()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Create a few symbols:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "-"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"x,y,z = symbols('x y z')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "slide"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"Here is a basic expression:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "-"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKMAAAAZBAMAAACvE4OgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAACz0lEQVRIDa1UTWjUQBT+ZpvdzW7TGlrxItjYSg/C6vbiDwjmoCgUpHioPYhdqig9\nFJYiPYmW4klB14NgFGnw4EHpj7UgUtTFXhSEBgVBxIOFggWVrrUqiMY3mZkkLNIK7oN575vvvfky\n8yYJIGzgkSlRrULKrivVSkvq6LbxtcaSjV3aSo0lgWyl5pK69V+SRlEsPxNTGYhhDrV3M2Ue2etc\nEDmuMmM+IjolrCuHXNoLoQDNSAXdzbjsfFVKTY1vCgFXFIxenG4cFSSzRewAPnN0FugXjPDr45MQ\nJwoKtitgXL9zT+CsJeIHYG+Z4H1gwhRU4G/FcAQbbYU3KdDo+0sCK8lRU0guA72uKqMYk9RehHxP\niDIu0NS2v90KGShJYi7T7tgvkrQ2vIT2XtRISWNra6lzGc8/PW3ji4PL7Vmge095YIX0iB71NCaZ\n5N3XyM0VCuNIyFNIyY3AMG/KDUvjn90DGmwq9wpIl5AyU5WsTYy0aJf6JFGB5An3Der5jExKHjNR\n4JKPge/EXqDBoOXpkxkmkJHFfAFRVhDIveWA0S57N2Me6yw+DSX1n1uCq3sIfCF2IcjNkjeWyKli\nginHubboOB4vSNAjyaiXE26ygrkyTfod55Lj3CTE+n2P73ImJpnk6wJJKjYJSwt3OQbNJu4icM5s\nKGGbzMuD70N6JSbJD44x7pLDyJrbkfiLpOEhYVMJSVEj83x5YFLyNrAzJsmvJ+uhLrieXvcJDshy\nHtQuD54c2IWWEnSXfUTDZJJfAjcpOW5imp9aHvw4ZZ4NDV4FGjw0tzadKgbFwinJUd//AT0P1tdW\nBtuRU39oKdk9ONQ163fM+nvu/s4D/FX30otdQIZGlSnJKpq6KUxKVqV1WxGHFIhishjhEO1Gi3r4\nkZCMg+hH1henV8EjmFoly1PTMs/Uadaox+FceY2STpmvt9co/Pe0Jvt1GvgDK/Osw/4jQ4wAAAAA\nSUVORK5CYII=\n",
|
||||
"text/latex": [
|
||||
"$$x^{2} + 2.0 y + \\sin{\\left (z \\right )}$$"
|
||||
],
|
||||
"text/plain": [
|
||||
" 2 \n",
|
||||
"x + 2.0⋅y + sin(z)"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"e = x**2 + 2.0*y + sin(z); e"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "-"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAAgElEQVQIHWNgVDJ2YICAMAb2H1BmKgPDTChzFgNDvgOEvT8AzgQKrA9gPZPYUwNk\ncXxnCGd4dWA1kMllwFDKUB9wEchUZmAIYNgMZDDwJIDIPyDiEgOjAAPLFwZWBhYFBh6BqzwfGI4y\nSJUXZXH8Zf7A+IBh////v1hzjh5/xwAAW80hUDE8HYkAAAAASUVORK5CYII=\n",
|
||||
"text/latex": [
|
||||
"$$2 x$$"
|
||||
],
|
||||
"text/plain": [
|
||||
"2⋅x"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"diff(e, x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "-"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAALsAAAAZBAMAAACbakK8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAADAklEQVRIDbVVS2gTURQ90/wmk0k6tCJCsR1SKShIsxE3CgNWBKUxq9qFmqFqShfF\nUKQrkaDiF0pcCKYgBBcuBLV+wIWKARe6kQ4UhNKKWdiF4KIptmA/xPvmzZuMxdYUzIPcd+655568\nvLlJAL6G32oOasQWNHz5Rvg6nrKh/mygfSzlX2ygPaBUGmov6//NXs1yq4sex2EPrsHemTd2snNg\ntkb+Cx1zBL6SqwxZLvQAKYHzKZaPY4fh4TeHd0S5Nox9OClItm/jiU9DrEwwVEawpiVis9VkimqX\nAOr4o2cCs/0BT2I5+FYJRhJbePQxgzcD7QLEqtV5gdnu2Icr3L45gcCyt74Z7neL4SLQ0nm4S+dM\nYCz1gSPHnhKZDWyHhcCCNKwjqaF/TkwGl0L6nClie/wc1D1xdoNsSLhT0IJkhi7Lzr22xb8keE/N\nPm0Sc9yEuhRUyuiG9HzvFNeImCyq39SriOhtQI7IV/TiTqE8glqwohjE0NJwiANxOZTdZoxtfzSa\nx2tI8DtHcKQoQFmV6f1XT2swibxFL+6k5EgenhBCqKLTPX3ULnaYdDlaTMcCSd8zuXTvBq2bJUJr\nlE4WgSV5ZRdBzLFgO6nzhJp1ltvrlB2HCoWxQuG+jTvt2GxBWUZaU2mMApZNuSHA3vJpCliRhqqs\nZtvbTrb9ZIk+i70Ut1OcnpgeKskTCFUwjaYy8Jhr3eiefq0HIfa7yC6HOwVyULRuNDn21JngbcL+\nE8A+MNnSxb+w59+Cj2tELJBbjEZr8SGwn0j2aLkTPdp08R2OcKV6fXB3ikPH3n8tM5WTfrETtZcw\ng3QWH0dH7nKNiMkszqo/EDafaHhJ5Bm6ee4UtdAabxnMcmUUl0SnYx+uVqs5XAGN9QGgdeCrASv0\n3TmCsJcOdhnozexD38goK9HXynEKr1OKDs9guhQD039kGySyIQpJAdbvJ9YTlPvyUl3/aLUf34G/\nuGxIyXpE37DoLbAHwJaU53t9MRCfrU8o/k4iRn36Lar8Wd5wAfgN4R6xelyy/ssAAAAASUVORK5C\nYII=\n",
|
||||
"text/latex": [
|
||||
"$$x^{2} z + 2.0 y z - \\cos{\\left (z \\right )}$$"
|
||||
],
|
||||
"text/plain": [
|
||||
" 2 \n",
|
||||
"x ⋅z + 2.0⋅y⋅z - cos(z)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"integrate(e, z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "skip"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
}
|
1602
venv/Lib/site-packages/nbconvert/tests/files/notebook2.ipynb
Normal file
1602
venv/Lib/site-packages/nbconvert/tests/files/notebook2.ipynb
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Notebook with errors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This notebook contains a cell which deliberately throws an exception. This is to test if `nbconvert` stops conversion if the flag `--execute` is given without `--allow-errors`. In the cells before and after the one which raises the exception we compute a couple of numbers. If they exist in the output we know that the respective cells were executed."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(\"Hello world, my number is {}\".format(24 - 1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(\"Some text before the error\")\n",
|
||||
"raise RuntimeError(\"This is a deliberate exception\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(\"The answer to the question about life, the universe and everything is: {}\".format(43 - 1))"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"function foobar(x)\n",
|
||||
" 100x\n",
|
||||
"end"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Julia 0.4.0-dev",
|
||||
"language": "julia",
|
||||
"name": "julia-0.4"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "julia",
|
||||
"version": "0.4.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"tags": [
|
||||
"mycelltag",
|
||||
"mysecondcelltag"
|
||||
]
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"this cell should have tags in html output\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(\"this cell should have tags in html output\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"this cell should NOT have tags in html output\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(\"this cell should NOT have tags in html output\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"tags": [
|
||||
"mymarkdowncelltag"
|
||||
]
|
||||
},
|
||||
"source": [
|
||||
"This markdown cell should have tags in the html output"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This markdown cell should **not** have tags in the html output"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.3"
|
||||
},
|
||||
"widgets": {
|
||||
"application/vnd.jupyter.widget-state+json": {
|
||||
"state": {},
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
6
venv/Lib/site-packages/nbconvert/tests/files/override.py
Normal file
6
venv/Lib/site-packages/nbconvert/tests/files/override.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
c = get_config()
|
||||
|
||||
#Export all the notebooks in the current directory to the sphinx_howto format.
|
||||
c.NbConvertApp.notebooks = ['notebook2.ipynb']
|
||||
c.NbConvertApp.export_format = 'python'
|
||||
|
BIN
venv/Lib/site-packages/nbconvert/tests/files/testimage.png
Normal file
BIN
venv/Lib/site-packages/nbconvert/tests/files/testimage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
550
venv/Lib/site-packages/nbconvert/tests/test_nbconvertapp.py
Normal file
550
venv/Lib/site-packages/nbconvert/tests/test_nbconvertapp.py
Normal file
|
@ -0,0 +1,550 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Test NbConvertApp"""
|
||||
|
||||
# Copyright (c) IPython Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
|
||||
import os
|
||||
import io
|
||||
import nbformat
|
||||
|
||||
from .base import TestsBase
|
||||
from ..postprocessors import PostProcessorBase
|
||||
from ..tests.utils import onlyif_cmds_exist
|
||||
from nbconvert import nbconvertapp
|
||||
from nbconvert.exporters import Exporter
|
||||
|
||||
from traitlets.tests.utils import check_help_all_output
|
||||
from testpath import tempdir
|
||||
import pytest
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Classes and functions
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
class DummyPost(PostProcessorBase):
|
||||
def postprocess(self, filename):
|
||||
print("Dummy:%s" % filename)
|
||||
|
||||
|
||||
class TestNbConvertApp(TestsBase):
|
||||
"""Collection of NbConvertApp tests"""
|
||||
|
||||
|
||||
def test_notebook_help(self):
|
||||
"""Will help show if no notebooks are specified?"""
|
||||
with self.create_temp_cwd():
|
||||
out, err = self.nbconvert('--log-level 0', ignore_return_code=True)
|
||||
self.assertIn("--help-all", out)
|
||||
|
||||
def test_help_output(self):
|
||||
"""ipython nbconvert --help-all works"""
|
||||
check_help_all_output('nbconvert')
|
||||
|
||||
def test_glob(self):
|
||||
"""
|
||||
Do search patterns work for notebook names?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']):
|
||||
self.nbconvert('--to python *.ipynb --log-level 0')
|
||||
assert os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_glob_subdir(self):
|
||||
"""
|
||||
Do search patterns work for subdirectory notebook names?
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.copy_files_to(['notebook*.ipynb'], 'subdir/')
|
||||
self.nbconvert('--to python --log-level 0 ' +
|
||||
os.path.join('subdir', '*.ipynb'))
|
||||
assert os.path.isfile(os.path.join('subdir', 'notebook1.py'))
|
||||
assert os.path.isfile(os.path.join('subdir', 'notebook2.py'))
|
||||
|
||||
def test_build_dir(self):
|
||||
"""build_directory affects export location"""
|
||||
with self.create_temp_cwd():
|
||||
self.copy_files_to(['notebook*.ipynb'], 'subdir/')
|
||||
self.nbconvert('--to python --log-level 0 --output-dir . ' +
|
||||
os.path.join('subdir', '*.ipynb'))
|
||||
assert os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_convert_full_qualified_name(self):
|
||||
"""
|
||||
Test that nbconvert can convert file using a full qualified name for a
|
||||
package, import and use it.
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.copy_files_to(['notebook*.ipynb'], 'subdir')
|
||||
self.nbconvert('--to nbconvert.tests.fake_exporters.MyExporter --log-level 0 ' +
|
||||
os.path.join('subdir', '*.ipynb'))
|
||||
assert os.path.isfile(os.path.join('subdir', 'notebook1.test_ext'))
|
||||
assert os.path.isfile(os.path.join('subdir', 'notebook2.test_ext'))
|
||||
|
||||
def test_explicit(self):
|
||||
"""
|
||||
Do explicit notebook names work?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to python notebook2')
|
||||
assert not os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_clear_output(self):
|
||||
"""
|
||||
Can we clear outputs?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']) as td:
|
||||
self.nbconvert('--clear-output notebook1')
|
||||
assert os.path.isfile('notebook1.ipynb')
|
||||
with open('notebook1.ipynb', encoding='utf8') as f:
|
||||
nb = nbformat.read(f, 4)
|
||||
for cell in nb.cells:
|
||||
# Skip markdown cells
|
||||
if 'outputs' in cell:
|
||||
assert cell.outputs == []
|
||||
|
||||
def test_absolute_template_file(self):
|
||||
"""--template-file '/path/to/template.tpl'"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']), tempdir.TemporaryDirectory() as td:
|
||||
template = os.path.join(td, 'mytemplate.tpl')
|
||||
test_output = 'success!'
|
||||
with open(template, 'w') as f:
|
||||
f.write(test_output)
|
||||
self.nbconvert('--log-level 0 notebook2 --to html --template-file %s' % template)
|
||||
assert os.path.isfile('notebook2.html')
|
||||
with open('notebook2.html') as f:
|
||||
text = f.read()
|
||||
assert text == test_output
|
||||
|
||||
def test_relative_template_file(self):
|
||||
"""Test --template-file 'relative/path.tpl'"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']):
|
||||
os.mkdir('relative')
|
||||
template = os.path.join('relative', 'path.tpl')
|
||||
test_output = 'success!'
|
||||
with open(template, 'w') as f:
|
||||
f.write(test_output)
|
||||
self.nbconvert('--log-level 0 notebook2 --to html --template-file %s' % template)
|
||||
assert os.path.isfile('notebook2.html')
|
||||
with open('notebook2.html') as f:
|
||||
text = f.read()
|
||||
assert text == test_output
|
||||
|
||||
@onlyif_cmds_exist('pandoc', 'xelatex')
|
||||
def test_filename_spaces(self):
|
||||
"""
|
||||
Generate PDFs with graphics if notebooks have spaces in the name?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
os.rename('notebook2.ipynb', 'notebook with spaces.ipynb')
|
||||
self.nbconvert('--log-level 0 --to pdf'
|
||||
' "notebook with spaces"'
|
||||
' --PDFExporter.latex_count=1'
|
||||
' --PDFExporter.verbose=True'
|
||||
)
|
||||
assert os.path.isfile('notebook with spaces.pdf')
|
||||
|
||||
def test_webpdf_with_chromium(self):
|
||||
"""
|
||||
Generate PDFs if chromium allowed to be downloaded?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
self.nbconvert('--to webpdf '
|
||||
'--allow-chromium-download '
|
||||
'"notebook2"'
|
||||
)
|
||||
assert os.path.isfile('notebook2.pdf')
|
||||
|
||||
@onlyif_cmds_exist('pandoc', 'xelatex')
|
||||
def test_pdf(self):
|
||||
"""
|
||||
Check to see if pdfs compile, even if strikethroughs are included.
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to pdf'
|
||||
' "notebook2"'
|
||||
' --PDFExporter.latex_count=1'
|
||||
' --PDFExporter.verbose=True'
|
||||
)
|
||||
assert os.path.isfile('notebook2.pdf')
|
||||
|
||||
def test_post_processor(self):
|
||||
"""Do post processors work?"""
|
||||
with self.create_temp_cwd(['notebook1.ipynb']):
|
||||
out, err = self.nbconvert('--log-level 0 --to python notebook1 '
|
||||
'--post nbconvert.tests.test_nbconvertapp.DummyPost')
|
||||
self.assertIn('Dummy:notebook1.py', out)
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_spurious_cr(self):
|
||||
"""Check for extra CR characters"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to latex notebook2')
|
||||
assert os.path.isfile('notebook2.tex')
|
||||
with open('notebook2.tex') as f:
|
||||
tex = f.read()
|
||||
self.nbconvert('--log-level 0 --to html notebook2')
|
||||
assert os.path.isfile('notebook2.html')
|
||||
with open('notebook2.html') as f:
|
||||
html = f.read()
|
||||
self.assertEqual(tex.count('\r'), tex.count('\r\n'))
|
||||
self.assertEqual(html.count('\r'), html.count('\r\n'))
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_png_base64_html_ok(self):
|
||||
"""Is embedded png data well formed in HTML?"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to HTML '
|
||||
'notebook2.ipynb --template lab')
|
||||
assert os.path.isfile('notebook2.html')
|
||||
with open('notebook2.html') as f:
|
||||
assert "data:image/png;base64,b'" not in f.read()
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_template(self):
|
||||
"""
|
||||
Do export templates work?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook2.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to slides '
|
||||
'notebook2.ipynb')
|
||||
assert os.path.isfile('notebook2.slides.html')
|
||||
with open('notebook2.slides.html') as f:
|
||||
assert '/reveal.css' in f.read()
|
||||
|
||||
def test_output_ext(self):
|
||||
"""test --output=outputfile[.ext]"""
|
||||
with self.create_temp_cwd(['notebook1.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to python '
|
||||
'notebook1.ipynb --output nb.py')
|
||||
assert os.path.exists('nb.py')
|
||||
|
||||
self.nbconvert('--log-level 0 --to python '
|
||||
'notebook1.ipynb --output nb2')
|
||||
assert os.path.exists('nb2.py')
|
||||
|
||||
def test_glob_explicit(self):
|
||||
"""
|
||||
Can a search pattern be used along with matching explicit notebook names?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to python '
|
||||
'*.ipynb notebook1.ipynb notebook2.ipynb')
|
||||
assert os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_explicit_glob(self):
|
||||
"""
|
||||
Can explicit notebook names be used and then a matching search pattern?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to=python '
|
||||
'notebook1.ipynb notebook2.ipynb *.ipynb')
|
||||
assert os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_default_config(self):
|
||||
"""
|
||||
Does the default config work?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb', 'jupyter_nbconvert_config.py']):
|
||||
self.nbconvert('--log-level 0')
|
||||
assert os.path.isfile('notebook1.py')
|
||||
assert not os.path.isfile('notebook2.py')
|
||||
|
||||
def test_override_config(self):
|
||||
"""
|
||||
Can the default config be overridden?
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook*.ipynb',
|
||||
'jupyter_nbconvert_config.py',
|
||||
'override.py']):
|
||||
self.nbconvert('--log-level 0 --config="override.py"')
|
||||
assert not os.path.isfile('notebook1.py')
|
||||
assert os.path.isfile('notebook2.py')
|
||||
|
||||
def test_accents_in_filename(self):
|
||||
"""
|
||||
Can notebook names include accents?
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.create_empty_notebook(u'nb1_análisis.ipynb')
|
||||
self.nbconvert('--log-level 0 --to Python nb1_*')
|
||||
assert os.path.isfile(u'nb1_análisis.py')
|
||||
|
||||
@onlyif_cmds_exist('xelatex', 'pandoc')
|
||||
def test_filename_accent_pdf(self):
|
||||
"""
|
||||
Generate PDFs if notebooks have an accent in their name?
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.create_empty_notebook(u'nb1_análisis.ipynb')
|
||||
self.nbconvert('--log-level 0 --to pdf "nb1_*"'
|
||||
' --PDFExporter.latex_count=1'
|
||||
' --PDFExporter.verbose=True')
|
||||
assert os.path.isfile(u'nb1_análisis.pdf')
|
||||
|
||||
def test_cwd_plugin(self):
|
||||
"""
|
||||
Verify that an extension in the cwd can be imported.
|
||||
"""
|
||||
with self.create_temp_cwd(['hello.py']):
|
||||
self.create_empty_notebook(u'empty.ipynb')
|
||||
self.nbconvert('empty --to html --NbConvertApp.writer_class=\'hello.HelloWriter\'')
|
||||
assert os.path.isfile(u'hello.txt')
|
||||
|
||||
def test_output_suffix(self):
|
||||
"""
|
||||
Verify that the output suffix is applied
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.create_empty_notebook('empty.ipynb')
|
||||
self.nbconvert('empty.ipynb --to notebook')
|
||||
assert os.path.isfile('empty.nbconvert.ipynb')
|
||||
|
||||
def test_different_build_dir(self):
|
||||
"""
|
||||
Verify that the output suffix is not applied
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.create_empty_notebook('empty.ipynb')
|
||||
os.mkdir('output')
|
||||
self.nbconvert(
|
||||
'empty.ipynb --to notebook '
|
||||
'--FilesWriter.build_directory=output')
|
||||
assert os.path.isfile('output/empty.ipynb')
|
||||
|
||||
def test_inplace(self):
|
||||
"""
|
||||
Verify that the notebook is converted in place
|
||||
"""
|
||||
with self.create_temp_cwd():
|
||||
self.create_empty_notebook('empty.ipynb')
|
||||
self.nbconvert('empty.ipynb --inplace')
|
||||
assert os.path.isfile('empty.ipynb')
|
||||
assert not os.path.isfile('empty.nbconvert.ipynb')
|
||||
assert not os.path.isfile('empty.html')
|
||||
|
||||
def test_no_prompt(self):
|
||||
"""
|
||||
Verify that the html has no prompts when given --no-prompt.
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook1.ipynb"]):
|
||||
self.nbconvert('notebook1.ipynb --log-level 0 --no-prompt --to html')
|
||||
assert os.path.isfile('notebook1.html')
|
||||
with open("notebook1.html",'r') as f:
|
||||
text = f.read()
|
||||
assert "In [" not in text
|
||||
assert "Out[6]" not in text
|
||||
self.nbconvert('notebook1.ipynb --log-level 0 --to html')
|
||||
assert os.path.isfile('notebook1.html')
|
||||
with open("notebook1.html",'r') as f:
|
||||
text2 = f.read()
|
||||
assert "In [" in text2
|
||||
assert "Out[6]" in text2
|
||||
|
||||
def test_cell_tag_output(self):
|
||||
"""
|
||||
Verify that the html has tags in cell attributes if they exist.
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook_tags.ipynb"]):
|
||||
self.nbconvert('notebook_tags.ipynb --log-level 0 --to html')
|
||||
assert os.path.isfile('notebook_tags.html')
|
||||
with open("notebook_tags.html",'r') as f:
|
||||
text = f.read()
|
||||
assert 'celltag_mycelltag celltag_mysecondcelltag' in text
|
||||
assert 'celltag_mymarkdowncelltag' in text
|
||||
|
||||
|
||||
def test_no_input(self):
|
||||
"""
|
||||
Verify that the html has no input when given --no-input.
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook1.ipynb"]):
|
||||
self.nbconvert('notebook1.ipynb --log-level 0 --no-input --to html')
|
||||
assert os.path.isfile('notebook1.html')
|
||||
with open("notebook1.html",'r') as f:
|
||||
text = f.read()
|
||||
assert "In [" not in text
|
||||
assert "Out[6]" not in text
|
||||
assert ('<span class="n">x</span>'
|
||||
'<span class="p">,</span>'
|
||||
'<span class="n">y</span>'
|
||||
'<span class="p">,</span>'
|
||||
'<span class="n">z</span> '
|
||||
'<span class="o">=</span> '
|
||||
'<span class="n">symbols</span>'
|
||||
'<span class="p">(</span>'
|
||||
'<span class="s1">'x y z'</span>'
|
||||
'<span class="p">)</span>') not in text
|
||||
self.nbconvert('notebook1.ipynb --log-level 0 --to html')
|
||||
assert os.path.isfile('notebook1.html')
|
||||
with open("notebook1.html",'r') as f:
|
||||
text2 = f.read()
|
||||
assert "In [" in text2
|
||||
assert "Out[6]" in text2
|
||||
assert ('<span class="n">x</span>'
|
||||
'<span class="p">,</span>'
|
||||
'<span class="n">y</span>'
|
||||
'<span class="p">,</span>'
|
||||
'<span class="n">z</span> '
|
||||
'<span class="o">=</span> '
|
||||
'<span class="n">symbols</span>'
|
||||
'<span class="p">(</span>'
|
||||
'<span class="s1">'x y z'</span>'
|
||||
'<span class="p">)</span>') in text2
|
||||
|
||||
def test_allow_errors(self):
|
||||
"""
|
||||
Verify that conversion is aborted with '--execute' if an error is
|
||||
encountered, but that conversion continues if '--allow-errors' is
|
||||
used in addition.
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook3*.ipynb']):
|
||||
# Convert notebook containing a cell that raises an error,
|
||||
# both without and with cell execution enabled.
|
||||
output1, _ = self.nbconvert('--to markdown --stdout notebook3*.ipynb') # no cell execution
|
||||
output2, _ = self.nbconvert('--to markdown --allow-errors --stdout notebook3*.ipynb') # no cell execution; --allow-errors should have no effect
|
||||
output3, _ = self.nbconvert('--execute --allow-errors --to markdown --stdout notebook3*.ipynb') # with cell execution; errors are allowed
|
||||
|
||||
# Un-executed outputs should not contain either
|
||||
# of the two numbers computed in the notebook.
|
||||
assert '23' not in output1
|
||||
assert '42' not in output1
|
||||
assert '23' not in output2
|
||||
assert '42' not in output2
|
||||
|
||||
# Executed output should contain both numbers.
|
||||
assert '23' in output3
|
||||
assert '42' in output3
|
||||
|
||||
# Executing the notebook should raise an exception if --allow-errors is not specified
|
||||
with pytest.raises(OSError):
|
||||
self.nbconvert('--execute --to markdown --stdout notebook3*.ipynb')
|
||||
|
||||
def test_errors_print_traceback(self):
|
||||
"""
|
||||
Verify that the stderr output contains the traceback of the cell execution exception.
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook3_with_errors.ipynb']):
|
||||
_, error_output = self.nbconvert('--execute --to markdown --stdout notebook3_with_errors.ipynb',
|
||||
ignore_return_code=True)
|
||||
assert 'print("Some text before the error")' in error_output
|
||||
assert 'raise RuntimeError("This is a deliberate exception")' in error_output
|
||||
assert 'RuntimeError: This is a deliberate exception' in error_output
|
||||
|
||||
def test_fenced_code_blocks_markdown(self):
|
||||
"""
|
||||
Verify that input cells use fenced code blocks with the language
|
||||
name in nb.metadata.kernelspec.language, if that exists
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook1*.ipynb"]):
|
||||
# this notebook doesn't have nb.metadata.kernelspec, so it should
|
||||
# just do a fenced code block, with no language
|
||||
output1, _ = self.nbconvert('--to markdown --stdout notebook1.ipynb')
|
||||
assert '```python' not in output1 # shouldn't have language
|
||||
assert "```" in output1 # but should have fenced blocks
|
||||
|
||||
with self.create_temp_cwd(["notebook_jl*.ipynb"]):
|
||||
|
||||
output2, _ = self.nbconvert('--to markdown --stdout notebook_jl.ipynb')
|
||||
assert '```julia' in output2 # shouldn't have language
|
||||
assert "```" in output2 # but should also plain ``` to close cell
|
||||
|
||||
def test_convert_from_stdin_to_stdout(self):
|
||||
"""
|
||||
Verify that conversion can be done via stdin to stdout
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook1.ipynb"]):
|
||||
with io.open('notebook1.ipynb') as f:
|
||||
notebook = f.read().encode()
|
||||
output1, _ = self.nbconvert('--to markdown --stdin --stdout', stdin=notebook)
|
||||
assert '```python' not in output1 # shouldn't have language
|
||||
assert "```" in output1 # but should have fenced blocks
|
||||
|
||||
def test_convert_from_stdin(self):
|
||||
"""
|
||||
Verify that conversion can be done via stdin.
|
||||
"""
|
||||
with self.create_temp_cwd(["notebook1.ipynb"]):
|
||||
with io.open('notebook1.ipynb') as f:
|
||||
notebook = f.read().encode()
|
||||
self.nbconvert('--to markdown --stdin', stdin=notebook)
|
||||
assert os.path.isfile("notebook.md") # default name for stdin input
|
||||
with io.open('notebook.md') as f:
|
||||
output1 = f.read()
|
||||
assert '```python' not in output1 # shouldn't have language
|
||||
assert "```" in output1 # but should have fenced blocks
|
||||
|
||||
@onlyif_cmds_exist('pandoc', 'xelatex')
|
||||
def test_linked_images(self):
|
||||
"""
|
||||
Generate PDFs with an image linked in a markdown cell
|
||||
"""
|
||||
with self.create_temp_cwd(['latex-linked-image.ipynb', 'testimage.png']):
|
||||
self.nbconvert('--to pdf latex-linked-image.ipynb')
|
||||
assert os.path.isfile('latex-linked-image.pdf')
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_embedded_jpeg(self):
|
||||
"""
|
||||
Verify that latex conversion succeeds
|
||||
with a notebook with an embedded .jpeg
|
||||
"""
|
||||
with self.create_temp_cwd(['notebook4_jpeg.ipynb',
|
||||
'containerized_deployments.jpeg']):
|
||||
self.nbconvert('--to latex notebook4_jpeg.ipynb')
|
||||
assert os.path.isfile('notebook4_jpeg.tex')
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_markdown_display_priority(self):
|
||||
"""
|
||||
Check to see if markdown conversion embeds PNGs,
|
||||
even if an (unsupported) PDF is present.
|
||||
"""
|
||||
with self.create_temp_cwd(['markdown_display_priority.ipynb']):
|
||||
self.nbconvert('--log-level 0 --to markdown '
|
||||
'"markdown_display_priority.ipynb"')
|
||||
assert os.path.isfile('markdown_display_priority.md')
|
||||
with io.open('markdown_display_priority.md') as f:
|
||||
markdown_output = f.read()
|
||||
assert ("markdown_display_priority_files/"
|
||||
"markdown_display_priority_0_1.png") in markdown_output
|
||||
|
||||
@onlyif_cmds_exist('pandoc')
|
||||
def test_write_figures_to_custom_path(self):
|
||||
"""
|
||||
Check if figure files are copied to configured path.
|
||||
"""
|
||||
|
||||
def fig_exists(path):
|
||||
return (len(os.listdir(path)) > 0)
|
||||
|
||||
# check absolute path
|
||||
with self.create_temp_cwd(['notebook4_jpeg.ipynb',
|
||||
'containerized_deployments.jpeg']):
|
||||
output_dir = tempdir.TemporaryDirectory()
|
||||
path = os.path.join(output_dir.name, 'files')
|
||||
self.nbconvert(
|
||||
'--log-level 0 notebook4_jpeg.ipynb --to rst '
|
||||
'--NbConvertApp.output_files_dir={}'
|
||||
.format(path))
|
||||
assert fig_exists(path)
|
||||
output_dir.cleanup()
|
||||
|
||||
# check relative path
|
||||
with self.create_temp_cwd(['notebook4_jpeg.ipynb',
|
||||
'containerized_deployments.jpeg']):
|
||||
self.nbconvert(
|
||||
'--log-level 0 notebook4_jpeg.ipynb --to rst '
|
||||
'--NbConvertApp.output_files_dir=output')
|
||||
assert fig_exists('output')
|
||||
|
||||
# check default path with notebook name
|
||||
with self.create_temp_cwd(['notebook4_jpeg.ipynb',
|
||||
'containerized_deployments.jpeg']):
|
||||
self.nbconvert(
|
||||
'--log-level 0 notebook4_jpeg.ipynb --to rst')
|
||||
assert fig_exists('notebook4_jpeg_files')
|
12
venv/Lib/site-packages/nbconvert/tests/utils.py
Normal file
12
venv/Lib/site-packages/nbconvert/tests/utils.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
import pytest
|
||||
from shutil import which
|
||||
|
||||
def onlyif_cmds_exist(*commands):
|
||||
"""
|
||||
Decorator to skip test when at least one of `commands` is not found.
|
||||
"""
|
||||
for cmd in commands:
|
||||
if not which(cmd):
|
||||
return pytest.mark.skip("This test runs only if command '{0}' "
|
||||
"is installed".format(cmd))
|
||||
return lambda f: f
|
Loading…
Add table
Add a link
Reference in a new issue