Show More
@@ -712,16 +712,9 b' class InteractiveShell(SingletonConfigurable):' | |||
|
712 | 712 | self.object_info_string_level) |
|
713 | 713 | |
|
714 | 714 | def init_io(self): |
|
715 | # This will just use sys.stdout and sys.stderr. If you want to | |
|
716 | # override sys.stdout and sys.stderr themselves, you need to do that | |
|
717 | # *before* instantiating this class, because io holds onto | |
|
718 | # references to the underlying streams. | |
|
719 | # io.std* are deprecated, but don't show our own deprecation warnings | |
|
720 | # during initialization of the deprecated API. | |
|
721 | with warnings.catch_warnings(): | |
|
722 | warnings.simplefilter('ignore', DeprecationWarning) | |
|
723 | io.stdout = io.IOStream(sys.stdout) | |
|
724 | io.stderr = io.IOStream(sys.stderr) | |
|
715 | # implemented in subclasses, TerminalInteractiveShell does call | |
|
716 | # colorama.init(). | |
|
717 | pass | |
|
725 | 718 | |
|
726 | 719 | def init_prompts(self): |
|
727 | 720 | # Set system prompts, so that scripts can decide if they are running |
@@ -540,16 +540,6 b' class TerminalInteractiveShell(InteractiveShell):' | |||
|
540 | 540 | import colorama |
|
541 | 541 | colorama.init() |
|
542 | 542 | |
|
543 | # For some reason we make these wrappers around stdout/stderr. | |
|
544 | # For now, we need to reset them so all output gets coloured. | |
|
545 | # https://github.com/ipython/ipython/issues/8669 | |
|
546 | # io.std* are deprecated, but don't show our own deprecation warnings | |
|
547 | # during initialization of the deprecated API. | |
|
548 | with warnings.catch_warnings(): | |
|
549 | warnings.simplefilter('ignore', DeprecationWarning) | |
|
550 | io.stdout = io.IOStream(sys.stdout) | |
|
551 | io.stderr = io.IOStream(sys.stderr) | |
|
552 | ||
|
553 | 543 | def init_magics(self): |
|
554 | 544 | super(TerminalInteractiveShell, self).init_magics() |
|
555 | 545 | self.register_magics(TerminalMagics) |
@@ -23,30 +23,6 b' from IPython.utils import io' | |||
|
23 | 23 | from IPython.terminal.interactiveshell import TerminalInteractiveShell |
|
24 | 24 | |
|
25 | 25 | |
|
26 | class StreamProxy(io.IOStream): | |
|
27 | """Proxy for sys.stdout/err. This will request the stream *at call time* | |
|
28 | allowing for nose's Capture plugin's redirection of sys.stdout/err. | |
|
29 | ||
|
30 | Parameters | |
|
31 | ---------- | |
|
32 | name : str | |
|
33 | The name of the stream. This will be requested anew at every call | |
|
34 | """ | |
|
35 | ||
|
36 | def __init__(self, name): | |
|
37 | warnings.warn("StreamProxy is deprecated and unused as of IPython 5", DeprecationWarning, | |
|
38 | stacklevel=2, | |
|
39 | ) | |
|
40 | self.name=name | |
|
41 | ||
|
42 | @property | |
|
43 | def stream(self): | |
|
44 | return getattr(sys, self.name) | |
|
45 | ||
|
46 | def flush(self): | |
|
47 | self.stream.flush() | |
|
48 | ||
|
49 | ||
|
50 | 26 | def get_ipython(): |
|
51 | 27 | # This will get replaced by the real thing once we start IPython below |
|
52 | 28 | return start_ipython() |
@@ -19,82 +19,10 b' from warnings import warn' | |||
|
19 | 19 | from IPython.utils.decorators import undoc |
|
20 | 20 | from .capture import CapturedIO, capture_output |
|
21 | 21 | |
|
22 | @undoc | |
|
23 | class IOStream: | |
|
24 | ||
|
25 | def __init__(self, stream, fallback=None): | |
|
26 | warn('IOStream is deprecated since IPython 5.0, use sys.{stdin,stdout,stderr} instead', | |
|
27 | DeprecationWarning, stacklevel=2) | |
|
28 | if not hasattr(stream,'write') or not hasattr(stream,'flush'): | |
|
29 | if fallback is not None: | |
|
30 | stream = fallback | |
|
31 | else: | |
|
32 | raise ValueError("fallback required, but not specified") | |
|
33 | self.stream = stream | |
|
34 | self._swrite = stream.write | |
|
35 | ||
|
36 | # clone all methods not overridden: | |
|
37 | def clone(meth): | |
|
38 | return not hasattr(self, meth) and not meth.startswith('_') | |
|
39 | for meth in filter(clone, dir(stream)): | |
|
40 | try: | |
|
41 | val = getattr(stream, meth) | |
|
42 | except AttributeError: | |
|
43 | pass | |
|
44 | else: | |
|
45 | setattr(self, meth, val) | |
|
46 | ||
|
47 | def __repr__(self): | |
|
48 | cls = self.__class__ | |
|
49 | tpl = '{mod}.{cls}({args})' | |
|
50 | return tpl.format(mod=cls.__module__, cls=cls.__name__, args=self.stream) | |
|
51 | ||
|
52 | def write(self,data): | |
|
53 | warn('IOStream is deprecated since IPython 5.0, use sys.{stdin,stdout,stderr} instead', | |
|
54 | DeprecationWarning, stacklevel=2) | |
|
55 | try: | |
|
56 | self._swrite(data) | |
|
57 | except: | |
|
58 | try: | |
|
59 | # print handles some unicode issues which may trip a plain | |
|
60 | # write() call. Emulate write() by using an empty end | |
|
61 | # argument. | |
|
62 | print(data, end='', file=self.stream) | |
|
63 | except: | |
|
64 | # if we get here, something is seriously broken. | |
|
65 | print('ERROR - failed to write data to stream:', self.stream, | |
|
66 | file=sys.stderr) | |
|
67 | ||
|
68 | def writelines(self, lines): | |
|
69 | warn('IOStream is deprecated since IPython 5.0, use sys.{stdin,stdout,stderr} instead', | |
|
70 | DeprecationWarning, stacklevel=2) | |
|
71 | if isinstance(lines, str): | |
|
72 | lines = [lines] | |
|
73 | for line in lines: | |
|
74 | self.write(line) | |
|
75 | ||
|
76 | # This class used to have a writeln method, but regular files and streams | |
|
77 | # in Python don't have this method. We need to keep this completely | |
|
78 | # compatible so we removed it. | |
|
79 | ||
|
80 | @property | |
|
81 | def closed(self): | |
|
82 | return self.stream.closed | |
|
83 | ||
|
84 | def close(self): | |
|
85 | pass | |
|
86 | ||
|
87 | 22 | # setup stdin/stdout/stderr to sys.stdin/sys.stdout/sys.stderr |
|
88 | 23 | devnull = open(os.devnull, 'w') |
|
89 | 24 | atexit.register(devnull.close) |
|
90 | 25 | |
|
91 | # io.std* are deprecated, but don't show our own deprecation warnings | |
|
92 | # during initialization of the deprecated API. | |
|
93 | with warnings.catch_warnings(): | |
|
94 | warnings.simplefilter('ignore', DeprecationWarning) | |
|
95 | stdin = IOStream(sys.stdin, fallback=devnull) | |
|
96 | stdout = IOStream(sys.stdout, fallback=devnull) | |
|
97 | stderr = IOStream(sys.stderr, fallback=devnull) | |
|
98 | 26 | |
|
99 | 27 | class Tee(object): |
|
100 | 28 | """A class to duplicate an output stream to stdout/err. |
@@ -208,12 +136,6 b" def temp_pyfile(src, ext='.py'):" | |||
|
208 | 136 | f.flush() |
|
209 | 137 | return fname |
|
210 | 138 | |
|
211 | @undoc | |
|
212 | def atomic_writing(*args, **kwargs): | |
|
213 | """DEPRECATED: moved to notebook.services.contents.fileio""" | |
|
214 | warn("IPython.utils.io.atomic_writing has moved to notebook.services.contents.fileio since IPython 4.0", DeprecationWarning, stacklevel=2) | |
|
215 | from notebook.services.contents.fileio import atomic_writing | |
|
216 | return atomic_writing(*args, **kwargs) | |
|
217 | 139 | |
|
218 | 140 | @undoc |
|
219 | 141 | def raw_print(*args, **kw): |
@@ -232,10 +154,3 b' def raw_print_err(*args, **kw):' | |||
|
232 | 154 | print(*args, sep=kw.get('sep', ' '), end=kw.get('end', '\n'), |
|
233 | 155 | file=sys.__stderr__) |
|
234 | 156 | sys.__stderr__.flush() |
|
235 | ||
|
236 | @undoc | |
|
237 | def unicode_std_stream(stream='stdout'): | |
|
238 | """DEPRECATED, moved to nbconvert.utils.io""" | |
|
239 | warn("IPython.utils.io.unicode_std_stream has moved to nbconvert.utils.io since IPython 4.0", DeprecationWarning, stacklevel=2) | |
|
240 | from nbconvert.utils.io import unicode_std_stream | |
|
241 | return unicode_std_stream(stream) |
@@ -11,7 +11,7 b' from io import StringIO' | |||
|
11 | 11 | from subprocess import Popen, PIPE |
|
12 | 12 | import unittest |
|
13 | 13 | |
|
14 |
from IPython.utils.io import |
|
|
14 | from IPython.utils.io import Tee, capture_output | |
|
15 | 15 | |
|
16 | 16 | |
|
17 | 17 | def test_tee_simple(): |
@@ -48,34 +48,8 b' class TeeTestCase(unittest.TestCase):' | |||
|
48 | 48 | for chan in ['stdout', 'stderr']: |
|
49 | 49 | self.tchan(chan) |
|
50 | 50 | |
|
51 | def test_io_init(): | |
|
52 | """Test that io.stdin/out/err exist at startup""" | |
|
53 | for name in ('stdin', 'stdout', 'stderr'): | |
|
54 | cmd = "from IPython.utils import io;print(io.%s.__class__)"%name | |
|
55 | with Popen([sys.executable, '-c', cmd], stdout=PIPE) as p: | |
|
56 | p.wait() | |
|
57 | classname = p.stdout.read().strip().decode('ascii') | |
|
58 | # __class__ is a reference to the class object in Python 3, so we can't | |
|
59 | # just test for string equality. | |
|
60 | assert 'IPython.utils.io.IOStream' in classname, classname | |
|
61 | ||
|
62 | 51 | class TestIOStream(unittest.TestCase): |
|
63 | 52 | |
|
64 | def test_IOStream_init(self): | |
|
65 | """IOStream initializes from a file-like object missing attributes. """ | |
|
66 | # Cause a failure from getattr and dir(). (Issue #6386) | |
|
67 | class BadStringIO(StringIO): | |
|
68 | def __dir__(self): | |
|
69 | attrs = super().__dir__() | |
|
70 | attrs.append('name') | |
|
71 | return attrs | |
|
72 | with self.assertWarns(DeprecationWarning): | |
|
73 | iostream = IOStream(BadStringIO()) | |
|
74 | iostream.write('hi, bad iostream\n') | |
|
75 | ||
|
76 | assert not hasattr(iostream, 'name') | |
|
77 | iostream.close() | |
|
78 | ||
|
79 | 53 | def test_capture_output(self): |
|
80 | 54 | """capture_output() context works""" |
|
81 | 55 |
General Comments 0
You need to be logged in to leave comments.
Login now