##// END OF EJS Templates
move io.unicode_std_stream to nbconvert.utils.io
Min RK -
Show More
@@ -0,0 +1,33 b''
1 # coding: utf-8
2 """io-related utilities"""
3
4 # Copyright (c) Jupyter Development Team.
5 # Distributed under the terms of the Modified BSD License.
6
7 import codecs
8 import sys
9 from IPython.utils.py3compat import PY3
10
11
12 def unicode_std_stream(stream='stdout'):
13 u"""Get a wrapper to write unicode to stdout/stderr as UTF-8.
14
15 This ignores environment variables and default encodings, to reliably write
16 unicode to stdout or stderr.
17
18 ::
19
20 unicode_std_stream().write(u'ł@e¶ŧ←')
21 """
22 assert stream in ('stdout', 'stderr')
23 stream = getattr(sys, stream)
24 if PY3:
25 try:
26 stream_b = stream.buffer
27 except AttributeError:
28 # sys.stdout has been replaced - use it directly
29 return stream
30 else:
31 stream_b = stream
32
33 return codecs.getwriter('utf-8')(stream_b)
@@ -0,0 +1,50 b''
1 # encoding: utf-8
2 """Tests for utils.io"""
3
4 # Copyright (c) Jupyter Development Team.
5 # Distributed under the terms of the Modified BSD License.
6
7 import io as stdlib_io
8 import sys
9
10 import nose.tools as nt
11
12 from IPython.testing.decorators import skipif
13 from ..io import unicode_std_stream
14 from IPython.utils.py3compat import PY3
15
16 if PY3:
17 from io import StringIO
18 else:
19 from StringIO import StringIO
20
21 def test_UnicodeStdStream():
22 # Test wrapping a bytes-level stdout
23 if PY3:
24 stdoutb = stdlib_io.BytesIO()
25 stdout = stdlib_io.TextIOWrapper(stdoutb, encoding='ascii')
26 else:
27 stdout = stdoutb = stdlib_io.BytesIO()
28
29 orig_stdout = sys.stdout
30 sys.stdout = stdout
31 try:
32 sample = u"@łe¶ŧ←"
33 unicode_std_stream().write(sample)
34
35 output = stdoutb.getvalue().decode('utf-8')
36 nt.assert_equal(output, sample)
37 assert not stdout.closed
38 finally:
39 sys.stdout = orig_stdout
40
41 @skipif(not PY3, "Not applicable on Python 2")
42 def test_UnicodeStdStream_nowrap():
43 # If we replace stdout with a StringIO, it shouldn't get wrapped.
44 orig_stdout = sys.stdout
45 sys.stdout = StringIO()
46 try:
47 nt.assert_is(unicode_std_stream(), sys.stdout)
48 assert not sys.stdout.closed
49 finally:
50 sys.stdout = orig_stdout
@@ -3,33 +3,24 b''
3 IO related utilities.
3 IO related utilities.
4 """
4 """
5
5
6 #-----------------------------------------------------------------------------
6 # Copyright (c) IPython Development Team.
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Distributed under the terms of the Modified BSD License.
8 #
8
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
12 from __future__ import print_function
9 from __future__ import print_function
13 from __future__ import absolute_import
10 from __future__ import absolute_import
14
11
15 #-----------------------------------------------------------------------------
12
16 # Imports
17 #-----------------------------------------------------------------------------
18 import codecs
13 import codecs
19 from contextlib import contextmanager
14 from contextlib import contextmanager
20 import io
15 import io
21 import os
16 import os
22 import shutil
17 import shutil
23 import stat
24 import sys
18 import sys
25 import tempfile
19 import tempfile
20 import warnings
26 from .capture import CapturedIO, capture_output
21 from .capture import CapturedIO, capture_output
27 from .py3compat import string_types, input, PY3
22 from .py3compat import string_types, input, PY3
28
23
29 #-----------------------------------------------------------------------------
30 # Code
31 #-----------------------------------------------------------------------------
32
33
24
34 class IOStream:
25 class IOStream:
35
26
@@ -323,25 +314,9 b' def raw_print_err(*args, **kw):'
323 rprint = raw_print
314 rprint = raw_print
324 rprinte = raw_print_err
315 rprinte = raw_print_err
325
316
326 def unicode_std_stream(stream='stdout'):
327 u"""Get a wrapper to write unicode to stdout/stderr as UTF-8.
328
329 This ignores environment variables and default encodings, to reliably write
330 unicode to stdout or stderr.
331
332 ::
333
317
334 unicode_std_stream().write(u'ł@e¶ŧ←')
318 def unicode_std_stream(stream='stdout'):
335 """
319 """DEPRECATED, moved to jupyter_nbconvert.utils.io"""
336 assert stream in ('stdout', 'stderr')
320 warn("IPython.utils.io.unicode_std_stream has moved to jupyter_nbconvert.utils.io")
337 stream = getattr(sys, stream)
321 from jupyter_nbconvert.utils.io import unicode_std_stream
338 if PY3:
322 return unicode_std_stream(stream)
339 try:
340 stream_b = stream.buffer
341 except AttributeError:
342 # sys.stdout has been replaced - use it directly
343 return stream
344 else:
345 stream_b = stream
346
347 return codecs.getwriter('utf-8')(stream_b)
@@ -86,36 +86,6 b' def test_capture_output():'
86 nt.assert_equal(io.stdout, 'hi, stdout\n')
86 nt.assert_equal(io.stdout, 'hi, stdout\n')
87 nt.assert_equal(io.stderr, 'hi, stderr\n')
87 nt.assert_equal(io.stderr, 'hi, stderr\n')
88
88
89 def test_UnicodeStdStream():
90 # Test wrapping a bytes-level stdout
91 if PY3:
92 stdoutb = stdlib_io.BytesIO()
93 stdout = stdlib_io.TextIOWrapper(stdoutb, encoding='ascii')
94 else:
95 stdout = stdoutb = stdlib_io.BytesIO()
96
97 orig_stdout = sys.stdout
98 sys.stdout = stdout
99 try:
100 sample = u"@łe¶ŧ←"
101 unicode_std_stream().write(sample)
102
103 output = stdoutb.getvalue().decode('utf-8')
104 nt.assert_equal(output, sample)
105 assert not stdout.closed
106 finally:
107 sys.stdout = orig_stdout
108
109 @skipif(not PY3, "Not applicable on Python 2")
110 def test_UnicodeStdStream_nowrap():
111 # If we replace stdout with a StringIO, it shouldn't get wrapped.
112 orig_stdout = sys.stdout
113 sys.stdout = StringIO()
114 try:
115 nt.assert_is(unicode_std_stream(), sys.stdout)
116 assert not sys.stdout.closed
117 finally:
118 sys.stdout = orig_stdout
119
89
120 def test_atomic_writing():
90 def test_atomic_writing():
121 class CustomExc(Exception): pass
91 class CustomExc(Exception): pass
@@ -1,24 +1,13 b''
1 """
1 """
2 Contains Stdout writer
2 Contains Stdout writer
3 """
3 """
4 #-----------------------------------------------------------------------------
5 #Copyright (c) 2013, the IPython Development Team.
6 #
7 #Distributed under the terms of the Modified BSD License.
8 #
9 #The full license is in the file COPYING.txt, distributed with this software.
10 #-----------------------------------------------------------------------------
11
4
12 #-----------------------------------------------------------------------------
5 # Copyright (c) Jupyter Development Team.
13 # Imports
6 # Distributed under the terms of the Modified BSD License.
14 #-----------------------------------------------------------------------------
15
7
16 from IPython.utils import io
8 from jupyter_nbconvert.utils import io
17 from .base import WriterBase
9 from .base import WriterBase
18
10
19 #-----------------------------------------------------------------------------
20 # Classes
21 #-----------------------------------------------------------------------------
22
11
23 class StdoutWriter(WriterBase):
12 class StdoutWriter(WriterBase):
24 """Consumes output from nbconvert export...() methods and writes to the
13 """Consumes output from nbconvert export...() methods and writes to the
General Comments 0
You need to be logged in to leave comments. Login now