Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Spot
Spot
Commits
72c7ad9f
Commit
72c7ad9f
authored
Mar 08, 2015
by
Alexandre Duret-Lutz
Browse files
* wrap/python/tests/ipnbdoctest.py: Skip if IPython is missing.
parent
3bf3d2c8
Changes
1
Hide whitespace changes
Inline
Side-by-side
wrap/python/tests/ipnbdoctest.py
View file @
72c7ad9f
...
...
@@ -4,7 +4,8 @@ simple example script for running and testing notebooks.
Usage: `ipnbdoctest.py foo.ipynb [bar.ipynb [...]]`
Each cell is submitted to the kernel, and the outputs are compared with those stored in the notebook.
Each cell is submitted to the kernel, and the outputs are compared
with those stored in the notebook.
"""
from
__future__
import
print_function
...
...
@@ -21,6 +22,13 @@ except ImportError:
print
(
'Python 3.x is needed to run this script.'
)
sys
.
exit
(
77
)
import
imp
try
:
imp
.
find_module
(
'IPython'
)
except
:
print
(
'IPython is needed to run this script.'
)
sys
.
exit
(
77
)
try
:
from
IPython.kernel
import
KernelManager
except
ImportError
:
...
...
@@ -41,23 +49,24 @@ def compare_png(a64, b64):
def
sanitize
(
s
):
"""sanitize a string for comparison.
fix universal newlines, strip trailing newlines, and normalize likely random values (memory addresses and UUIDs)
fix universal newlines, strip trailing newlines, and normalize likely
random values (memory addresses and UUIDs)
"""
if
not
isinstance
(
s
,
str
):
return
s
# normalize newline:
s
=
s
.
replace
(
'
\r\n
'
,
'
\n
'
)
# ignore trailing newlines (but not space)
s
=
s
.
rstrip
(
'
\n
'
)
# normalize hex addresses:
s
=
re
.
sub
(
r
'0x[a-f0-9]+'
,
'0xFFFFFFFF'
,
s
)
# normalize UUIDs:
s
=
re
.
sub
(
r
'[a-f0-9]{8}(\-[a-f0-9]{4}){3}\-[a-f0-9]{12}'
,
'U-U-I-D'
,
s
)
return
s
...
...
@@ -66,25 +75,27 @@ def consolidate_outputs(outputs):
data
=
defaultdict
(
list
)
data
[
'stdout'
]
=
''
data
[
'stderr'
]
=
''
for
out
in
outputs
:
if
out
.
type
==
'stream'
:
data
[
out
.
stream
]
+=
out
.
text
elif
out
.
type
==
'pyerr'
:
data
[
'pyerr'
]
=
dict
(
ename
=
out
.
ename
,
evalue
=
out
.
evalue
)
else
:
for
key
in
(
'png'
,
'svg'
,
'latex'
,
'html'
,
'javascript'
,
'text'
,
'jpeg'
,):
for
key
in
(
'png'
,
'svg'
,
'latex'
,
'html'
,
'javascript'
,
'text'
,
'jpeg'
,):
if
key
in
out
:
data
[
key
].
append
(
out
[
key
])
return
data
def
compare_outputs
(
test
,
ref
,
skip_compare
=
(
'png'
,
'traceback'
,
'latex'
,
'prompt_number'
)):
def
compare_outputs
(
test
,
ref
,
skip_cmp
=
(
'png'
,
'traceback'
,
'latex'
,
'prompt_number'
)):
for
key
in
ref
:
if
key
not
in
test
:
print
(
"missing key: %s != %s"
%
(
test
.
keys
(),
ref
.
keys
()))
return
False
elif
key
not
in
skip_c
o
mp
are
and
sanitize
(
test
[
key
])
!=
sanitize
(
ref
[
key
]):
elif
key
not
in
skip_cmp
and
sanitize
(
test
[
key
])
!=
sanitize
(
ref
[
key
]):
print
(
"mismatch %s:"
%
key
)
exp
=
ref
[
key
]
eff
=
test
[
key
]
...
...
@@ -104,7 +115,7 @@ def run_cell(shell, iopub, cell):
# wait for finish, maximum 20s
shell
.
get_msg
(
timeout
=
20
)
outs
=
[]
while
True
:
try
:
msg
=
iopub
.
get_msg
(
timeout
=
0.2
)
...
...
@@ -116,11 +127,11 @@ def run_cell(shell, iopub, cell):
elif
msg_type
==
'clear_output'
:
outs
=
[]
continue
content
=
msg
[
'content'
]
# print msg_type, content
out
=
NotebookNode
(
output_type
=
msg_type
)
if
msg_type
==
'stream'
:
out
.
stream
=
content
[
'name'
]
out
.
text
=
content
[
'data'
]
...
...
@@ -139,14 +150,15 @@ def run_cell(shell, iopub, cell):
out
.
traceback
=
content
[
'traceback'
]
else
:
print
(
"unhandled iopub msg:"
,
msg_type
)
outs
.
append
(
out
)
return
outs
def
test_notebook
(
nb
):
km
=
KernelManager
()
km
.
start_kernel
(
extra_arguments
=
[
'--pylab=inline'
],
stderr
=
open
(
os
.
devnull
,
'w'
))
km
.
start_kernel
(
extra_arguments
=
[
'--pylab=inline'
],
stderr
=
open
(
os
.
devnull
,
'w'
))
try
:
kc
=
km
.
client
()
kc
.
start_channels
()
...
...
@@ -157,7 +169,7 @@ def test_notebook(nb):
kc
.
start_channels
()
iopub
=
kc
.
sub_channel
shell
=
kc
.
shell_channel
# run %pylab inline, because some notebooks assume this
# even though they shouldn't
shell
.
execute
(
"pass"
)
...
...
@@ -167,7 +179,7 @@ def test_notebook(nb):
iopub
.
get_msg
(
timeout
=
1
)
except
Empty
:
break
successes
=
0
failures
=
0
errors
=
0
...
...
@@ -182,7 +194,7 @@ def test_notebook(nb):
print
(
cell
.
input
)
errors
+=
1
continue
failed
=
False
if
len
(
outs
)
!=
len
(
cell
.
outputs
):
print
(
"output length mismatch (expected {}, got {})"
.
format
(
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment