##// END OF EJS Templates
Add -q option (suppress print upon creation) to %macro...
Add -q option (suppress print upon creation) to %macro Macros are very, very useful and "Matlab" like (as well as other similar math computing environs). Often I (or my students) use a macro to load long complex code from a url -- e.g., large data sets, simulated data, preprocessing of data, special plotting commands, grading routines... Currently, this requires defining the macro at the end of the notebook so when the "print upon creation" occurs it doesn't overwhelm the notebook (except at the end). The -q option suppresses the print contents upon creation. Example with a Matplotlib example: In[1]: %macro tmp http://matplotlib.org/mpl_examples/api/date_demo.py Macro `tmp` created. To execute, type its name (without quotes). === Macro contents: === """ Show how to make date plots in matplotlib using date tick locators and formatters. See major_minor_demo1.py for more information on controlling major and minor ticks ... In[2]: %macro -q tmp2 http://matplotlib.org/mpl_examples/api/date_demo.py (nothing) Perhaps, though, the first line should print -- e.g., Macro `tmp` created. To execute, type its name (without quotes). In the docstraing, I also fixed a typo (an "as" that should be an "at") and clarified how to produce an example output.

File last commit:

r7737:00142486
r10962:f96aac3a
Show More
test_jsonutil.py
104 lines | 3.4 KiB | text/x-python | PythonLexer
"""Test suite for our JSON utilities.
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2010-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING.txt, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
# stdlib
import json
from base64 import decodestring
# third party
import nose.tools as nt
# our own
from IPython.testing import decorators as dec
from ..jsonutil import json_clean, encode_images
from ..py3compat import unicode_to_str, str_to_bytes
#-----------------------------------------------------------------------------
# Test functions
#-----------------------------------------------------------------------------
def test():
# list of input/expected output. Use None for the expected output if it
# can be the same as the input.
pairs = [(1, None), # start with scalars
(1.0, None),
('a', None),
(True, None),
(False, None),
(None, None),
# complex numbers for now just go to strings, as otherwise they
# are unserializable
(1j, '1j'),
# Containers
([1, 2], None),
((1, 2), [1, 2]),
(set([1, 2]), [1, 2]),
(dict(x=1), None),
({'x': 1, 'y':[1,2,3], '1':'int'}, None),
# More exotic objects
((x for x in range(3)), [0, 1, 2]),
(iter([1, 2]), [1, 2]),
]
for val, jval in pairs:
if jval is None:
jval = val
out = json_clean(val)
# validate our cleanup
nt.assert_equal(out, jval)
# and ensure that what we return, indeed encodes cleanly
json.loads(json.dumps(out))
@dec.parametric
def test_encode_images():
# invalid data, but the header and footer are from real files
pngdata = b'\x89PNG\r\n\x1a\nblahblahnotactuallyvalidIEND\xaeB`\x82'
jpegdata = b'\xff\xd8\xff\xe0\x00\x10JFIFblahblahjpeg(\xa0\x0f\xff\xd9'
fmt = {
'image/png' : pngdata,
'image/jpeg' : jpegdata,
}
encoded = encode_images(fmt)
for key, value in fmt.iteritems():
# encoded has unicode, want bytes
decoded = decodestring(encoded[key].encode('ascii'))
yield nt.assert_equal(decoded, value)
encoded2 = encode_images(encoded)
yield nt.assert_equal(encoded, encoded2)
b64_str = {}
for key, encoded in encoded.iteritems():
b64_str[key] = unicode_to_str(encoded)
encoded3 = encode_images(b64_str)
yield nt.assert_equal(encoded3, b64_str)
for key, value in fmt.iteritems():
# encoded3 has str, want bytes
decoded = decodestring(str_to_bytes(encoded3[key]))
yield nt.assert_equal(decoded, value)
def test_lambda():
jc = json_clean(lambda : 1)
assert isinstance(jc, str)
assert '<lambda>' in jc
json.dumps(jc)
def test_exception():
bad_dicts = [{1:'number', '1':'string'},
{True:'bool', 'True':'string'},
]
for d in bad_dicts:
nt.assert_raises(ValueError, json_clean, d)