##// END OF EJS Templates
Merge pull request #10021 from ivanov/remove-sys-version-checks...
Thomas Kluyver -
r22981:6a5220d0 merge
parent child Browse files
Show More
@@ -0,0 +1,5 b''
1 """This tests that future compiler flags are passed to the embedded IPython."""
2 from __future__ import barry_as_FLUFL
3 from IPython import embed
4 embed(banner1='', header='check 1 <> 2 == True')
5 embed(banner1='', header='check 1 <> 2 cause SyntaxError', compile_flags=0)
@@ -18,7 +18,6 b' http://ipython.org'
18 18 #-----------------------------------------------------------------------------
19 19 # Imports
20 20 #-----------------------------------------------------------------------------
21 from __future__ import absolute_import
22 21
23 22 import os
24 23 import sys
@@ -25,7 +25,6 b' Authors'
25 25 #-----------------------------------------------------------------------------
26 26 # Imports
27 27 #-----------------------------------------------------------------------------
28 from __future__ import print_function
29 28
30 29 # Stdlib imports
31 30 import __future__
@@ -13,7 +13,6 b' upstream and were accepted as of Python 2.3,'
13 13 # Some of this code originated from rlcompleter in the Python standard library
14 14 # Copyright (C) 2001 Python Software Foundation, www.python.org
15 15
16 from __future__ import print_function
17 16
18 17 import __main__
19 18 import glob
@@ -14,7 +14,6 b' These are all loaded by default by IPython.'
14 14 #-----------------------------------------------------------------------------
15 15 # Imports
16 16 #-----------------------------------------------------------------------------
17 from __future__ import print_function
18 17
19 18 # Stdlib imports
20 19 import glob
@@ -18,7 +18,6 b' Authors:'
18 18 #-----------------------------------------------------------------------------
19 19 # Imports
20 20 #-----------------------------------------------------------------------------
21 from __future__ import print_function
22 21
23 22 import os
24 23 import sys
@@ -24,7 +24,6 b' http://www.python.org/2.2.3/license.html"""'
24 24 #
25 25 #
26 26 #*****************************************************************************
27 from __future__ import print_function
28 27
29 28 import bdb
30 29 import functools
@@ -604,7 +603,6 b' class Pdb(OldPdb, object):'
604 603 ('Globals', self.curframe.f_globals)]
605 604 self.shell.find_line_magic('psource')(arg, namespaces=namespaces)
606 605
607 if sys.version_info > (3, ):
608 606 def do_where(self, arg):
609 607 """w(here)
610 608 Print a stack trace, with the most recent frame at the bottom.
@@ -4,7 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 7
9 8 try:
10 9 from base64 import encodebytes as base64_encode
@@ -7,7 +7,6 b' This defines a callable class that IPython uses for `sys.displayhook`.'
7 7 # Copyright (c) IPython Development Team.
8 8 # Distributed under the terms of the Modified BSD License.
9 9
10 from __future__ import print_function
11 10
12 11 import sys
13 12 import io as _io
@@ -15,7 +15,6 b' spec.'
15 15 # Copyright (c) IPython Development Team.
16 16 # Distributed under the terms of the Modified BSD License.
17 17
18 from __future__ import print_function
19 18
20 19 import sys
21 20
@@ -12,7 +12,6 b' events and the arguments which will be passed to them.'
12 12
13 13 This API is experimental in IPython 2.0, and may be revised in future versions.
14 14 """
15 from __future__ import print_function
16 15
17 16 class EventManager(object):
18 17 """Manage a collection of events and a sequence of callbacks for each.
@@ -3,7 +3,6 b''
3 3 # Copyright (c) IPython Development Team.
4 4 # Distributed under the terms of the Modified BSD License.
5 5
6 from __future__ import print_function
7 6
8 7 import atexit
9 8 import datetime
@@ -4,7 +4,6 b' An application for managing IPython history.'
4 4
5 5 To be invoked as the `ipython history` subcommand.
6 6 """
7 from __future__ import print_function
8 7
9 8 import os
10 9 import sqlite3
@@ -10,7 +10,6 b''
10 10 # the file COPYING, distributed as part of this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 from __future__ import absolute_import, print_function
14 13
15 14 import __future__
16 15 import abc
@@ -57,7 +56,7 b' from IPython.core.payload import PayloadManager'
57 56 from IPython.core.prefilter import PrefilterManager
58 57 from IPython.core.profiledir import ProfileDir
59 58 from IPython.core.usage import default_banner
60 from IPython.testing.skipdoctest import skip_doctest_py2, skip_doctest
59 from IPython.testing.skipdoctest import skip_doctest
61 60 from IPython.utils import PyColorize
62 61 from IPython.utils import io
63 62 from IPython.utils import py3compat
@@ -187,10 +186,7 b' class ExecutionResult(object):'
187 186 raise self.error_in_exec
188 187
189 188 def __repr__(self):
190 if sys.version_info > (3,):
191 189 name = self.__class__.__qualname__
192 else:
193 name = self.__class__.__name__
194 190 return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s result=%s>' %\
195 191 (name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.result))
196 192
@@ -1922,7 +1918,6 b' class InteractiveShell(SingletonConfigurable):'
1922 1918 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1923 1919
1924 1920
1925 @skip_doctest_py2
1926 1921 def complete(self, text, line=None, cursor_pos=None):
1927 1922 """Return the completed text and a list of completions.
1928 1923
@@ -1,6 +1,5 b''
1 1 """Logger class for IPython's logging facilities.
2 2 """
3 from __future__ import print_function
4 3
5 4 #*****************************************************************************
6 5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
@@ -1,7 +1,6 b''
1 1 # encoding: utf-8
2 2 """Magic functions for InteractiveShell.
3 3 """
4 from __future__ import print_function
5 4
6 5 #-----------------------------------------------------------------------------
7 6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
@@ -1,7 +1,5 b''
1 1 """Implementation of magic functions that control various automatic behaviors.
2 2 """
3 from __future__ import print_function
4 from __future__ import absolute_import
5 3 #-----------------------------------------------------------------------------
6 4 # Copyright (c) 2012 The IPython Development Team.
7 5 #
@@ -1,7 +1,5 b''
1 1 """Implementation of basic magic functions."""
2 2
3 from __future__ import print_function
4 from __future__ import absolute_import
5 3
6 4 import argparse
7 5 import io
@@ -1,7 +1,5 b''
1 1 """Implementation of code management magic functions.
2 2 """
3 from __future__ import print_function
4 from __future__ import absolute_import
5 3 #-----------------------------------------------------------------------------
6 4 # Copyright (c) 2012 The IPython Development Team.
7 5 #
@@ -1,7 +1,5 b''
1 1 """Implementation of configuration-related magic functions.
2 2 """
3 from __future__ import print_function
4 from __future__ import absolute_import
5 3 #-----------------------------------------------------------------------------
6 4 # Copyright (c) 2012 The IPython Development Team.
7 5 #
@@ -4,8 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 from __future__ import absolute_import
9 7
10 8 import ast
11 9 import bdb
@@ -1,6 +1,5 b''
1 1 """Implementation of magic functions for the extension machinery.
2 2 """
3 from __future__ import print_function
4 3 #-----------------------------------------------------------------------------
5 4 # Copyright (c) 2012 The IPython Development Team.
6 5 #
@@ -11,7 +11,6 b''
11 11 #-----------------------------------------------------------------------------
12 12 # Imports
13 13 #-----------------------------------------------------------------------------
14 from __future__ import print_function
15 14
16 15 # Stdlib
17 16 import os
@@ -1,6 +1,5 b''
1 1 """Implementation of namespace-related magic functions.
2 2 """
3 from __future__ import print_function
4 3 #-----------------------------------------------------------------------------
5 4 # Copyright (c) 2012 The IPython Development Team.
6 5 #
@@ -3,7 +3,6 b''
3 3 Note: this module is named 'osm' instead of 'os' to avoid a collision with the
4 4 builtin.
5 5 """
6 from __future__ import print_function
7 6 #-----------------------------------------------------------------------------
8 7 # Copyright (c) 2012 The IPython Development Team.
9 8 #
@@ -1,6 +1,5 b''
1 1 """Implementation of magic functions for matplotlib/pylab support.
2 2 """
3 from __future__ import print_function
4 3 #-----------------------------------------------------------------------------
5 4 # Copyright (c) 2012 The IPython Development Team.
6 5 #
@@ -1,5 +1,4 b''
1 1 """Magic functions for running cells in various scripts."""
2 from __future__ import print_function
3 2
4 3 # Copyright (c) IPython Development Team.
5 4 # Distributed under the terms of the Modified BSD License.
@@ -10,8 +10,6 b' reference the name under which an object is being read.'
10 10 # Copyright (c) IPython Development Team.
11 11 # Distributed under the terms of the Modified BSD License.
12 12
13 from __future__ import print_function
14
15 13 __all__ = ['Inspector','InspectColors']
16 14
17 15 # stdlib modules
@@ -31,7 +29,7 b' except ImportError:'
31 29 # IPython's own
32 30 from IPython.core import page
33 31 from IPython.lib.pretty import pretty
34 from IPython.testing.skipdoctest import skip_doctest_py3
32 from IPython.testing.skipdoctest import skip_doctest
35 33 from IPython.utils import PyColorize
36 34 from IPython.utils import openpy
37 35 from IPython.utils import py3compat
@@ -437,7 +435,7 b' class Inspector(Colorable):'
437 435 print(header,self.format(output), end=' ')
438 436
439 437 # In Python 3, all classes are new-style, so they all have __init__.
440 @skip_doctest_py3
438 @skip_doctest
441 439 def pdoc(self, obj, oname='', formatter=None):
442 440 """Print the docstring for any object.
443 441
@@ -13,7 +13,6 b' rid of that dependency, we could move it there.'
13 13 # Copyright (c) IPython Development Team.
14 14 # Distributed under the terms of the Modified BSD License.
15 15
16 from __future__ import print_function
17 16
18 17 import os
19 18 import re
@@ -9,7 +9,6 b' Authors:'
9 9 * Min RK
10 10
11 11 """
12 from __future__ import print_function
13 12
14 13 #-----------------------------------------------------------------------------
15 14 # Copyright (C) 2008 The IPython Development Team
@@ -1,6 +1,5 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Pylab (matplotlib) support utilities."""
3 from __future__ import print_function
4 3
5 4 # Copyright (c) IPython Development Team.
6 5 # Distributed under the terms of the Modified BSD License.
@@ -7,9 +7,6 b' launch InteractiveShell instances, load extensions, etc.'
7 7 # Copyright (c) IPython Development Team.
8 8 # Distributed under the terms of the Modified BSD License.
9 9
10 from __future__ import absolute_import
11 from __future__ import print_function
12
13 10 import glob
14 11 import os
15 12 import sys
@@ -1,5 +1,4 b''
1 1 # coding: iso-8859-5
2 2 # (Unlikely to be the default encoding for most testers.)
3 3 # ������������������� <- Cyrillic characters
4 from __future__ import unicode_literals
5 4 u = '����'
@@ -1,3 +1,2 b''
1 from __future__ import print_function
2 1 import sys
3 2 print(sys.argv[1:])
@@ -12,7 +12,6 b' This script is meant to be called by other parts of the test suite that call it'
12 12 via %run as if it were executed interactively by the user. As of 2011-05-29,
13 13 test_run.py calls it.
14 14 """
15 from __future__ import print_function
16 15
17 16 #-----------------------------------------------------------------------------
18 17 # Module imports
@@ -2,7 +2,6 b''
2 2
3 3 See test_run for details."""
4 4
5 from __future__ import print_function
6 5
7 6 import sys
8 7
@@ -12,7 +12,6 b''
12 12 #-----------------------------------------------------------------------------
13 13 # Imports
14 14 #-----------------------------------------------------------------------------
15 from __future__ import print_function
16 15
17 16 # Stdlib imports
18 17 import linecache
@@ -155,7 +155,6 b' def test_latex_completions():'
155 155
156 156
157 157
158 @dec.onlyif(sys.version_info[0] >= 3, 'This test only apply on python3')
159 158 def test_back_latex_completion():
160 159 ip = get_ipython()
161 160
@@ -164,7 +163,6 b' def test_back_latex_completion():'
164 163 nt.assert_equal(len(matches), 1)
165 164 nt.assert_equal(matches[0], '\\beta')
166 165
167 @dec.onlyif(sys.version_info[0] >= 3, 'This test only apply on python3')
168 166 def test_back_unicode_completion():
169 167 ip = get_ipython()
170 168
@@ -173,7 +171,6 b' def test_back_unicode_completion():'
173 171 nt.assert_equal(matches[0], '\\ROMAN NUMERAL FIVE')
174 172
175 173
176 @dec.onlyif(sys.version_info[0] >= 3, 'This test only apply on python3')
177 174 def test_forward_unicode_completion():
178 175 ip = get_ipython()
179 176
@@ -181,7 +178,6 b' def test_forward_unicode_completion():'
181 178 nt.assert_equal(len(matches), 1)
182 179 nt.assert_equal(matches[0], 'Ⅴ')
183 180
184 @dec.onlyif(sys.version_info[0] >= 3, 'This test only apply on python3')
185 181 @dec.knownfailureif(sys.platform == 'win32', 'Fails if there is a C:\\j... path')
186 182 def test_no_ascii_back_completion():
187 183 ip = get_ipython()
@@ -588,7 +584,6 b' def test_dict_key_completion_contexts():'
588 584
589 585
590 586
591 @dec.onlyif(sys.version_info[0] >= 3, 'This test only applies in Py>=3')
592 587 def test_dict_key_completion_bytes():
593 588 """Test handling of bytes in dict key completion"""
594 589 ip = get_ipython()
@@ -618,68 +613,6 b' def test_dict_key_completion_bytes():'
618 613 nt.assert_not_in("abd", matches)
619 614
620 615
621 @dec.onlyif(sys.version_info[0] < 3, 'This test only applies in Py<3')
622 def test_dict_key_completion_unicode_py2():
623 """Test handling of unicode in dict key completion"""
624 ip = get_ipython()
625 complete = ip.Completer.complete
626
627 ip.user_ns['d'] = {u'abc': None,
628 u'a\u05d0b': None}
629
630 _, matches = complete(line_buffer="d[")
631 nt.assert_in("u'abc'", matches)
632 nt.assert_in("u'a\\u05d0b'", matches)
633
634 _, matches = complete(line_buffer="d['a")
635 nt.assert_in("abc", matches)
636 nt.assert_not_in("a\\u05d0b", matches)
637
638 _, matches = complete(line_buffer="d[u'a")
639 nt.assert_in("abc", matches)
640 nt.assert_in("a\\u05d0b", matches)
641
642 _, matches = complete(line_buffer="d[U'a")
643 nt.assert_in("abc", matches)
644 nt.assert_in("a\\u05d0b", matches)
645
646 # query using escape
647 if sys.platform != 'win32':
648 # Known failure on Windows
649 _, matches = complete(line_buffer=u"d[u'a\\u05d0")
650 nt.assert_in("u05d0b", matches) # tokenized after \\
651
652 # query using character
653 _, matches = complete(line_buffer=u"d[u'a\u05d0")
654 nt.assert_in(u"a\u05d0b", matches)
655
656 with greedy_completion():
657 _, matches = complete(line_buffer="d[")
658 nt.assert_in("d[u'abc']", matches)
659 nt.assert_in("d[u'a\\u05d0b']", matches)
660
661 _, matches = complete(line_buffer="d['a")
662 nt.assert_in("d['abc']", matches)
663 nt.assert_not_in("d[u'a\\u05d0b']", matches)
664
665 _, matches = complete(line_buffer="d[u'a")
666 nt.assert_in("d[u'abc']", matches)
667 nt.assert_in("d[u'a\\u05d0b']", matches)
668
669 _, matches = complete(line_buffer="d[U'a")
670 nt.assert_in("d[U'abc']", matches)
671 nt.assert_in("d[U'a\\u05d0b']", matches)
672
673 # query using escape
674 _, matches = complete(line_buffer=u"d[u'a\\u05d0")
675 nt.assert_in("d[u'a\\u05d0b']", matches) # tokenized after \\
676
677 # query using character
678 _, matches = complete(line_buffer=u"d[u'a\u05d0")
679 nt.assert_in(u"d[u'a\u05d0b']", matches)
680
681
682 @dec.onlyif(sys.version_info[0] >= 3, 'This test only applies in Py>=3')
683 616 def test_dict_key_completion_unicode_py3():
684 617 """Test handling of unicode in dict key completion"""
685 618 ip = get_ipython()
@@ -2,7 +2,6 b''
2 2 """Tests for completerlib.
3 3
4 4 """
5 from __future__ import absolute_import
6 5
7 6 #-----------------------------------------------------------------------------
8 7 # Imports
@@ -1,6 +1,5 b''
1 1 """Tests for debugging machinery.
2 2 """
3 from __future__ import print_function
4 3
5 4 # Copyright (c) IPython Development Team.
6 5 # Distributed under the terms of the Modified BSD License.
@@ -1,7 +1,6 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Tests for CommandChainDispatcher."""
3 3
4 from __future__ import absolute_import
5 4
6 5 #-----------------------------------------------------------------------------
7 6 # Imports
@@ -1,7 +1,6 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Tests for the inputsplitter module."""
3 3
4 from __future__ import print_function
5 4
6 5 # Copyright (c) IPython Development Team.
7 6 # Distributed under the terms of the Modified BSD License.
@@ -143,26 +143,14 b' class InteractiveShellTestCase(unittest.TestCase):'
143 143
144 144 def test_future_flags(self):
145 145 """Check that future flags are used for parsing code (gh-777)"""
146 ip.run_cell('from __future__ import print_function')
146 ip.run_cell('from __future__ import barry_as_FLUFL')
147 147 try:
148 ip.run_cell('prfunc_return_val = print(1,2, sep=" ")')
148 ip.run_cell('prfunc_return_val = 1 <> 2')
149 149 assert 'prfunc_return_val' in ip.user_ns
150 150 finally:
151 151 # Reset compiler flags so we don't mess up other tests.
152 152 ip.compile.reset_compiler_flags()
153 153
154 def test_future_unicode(self):
155 """Check that unicode_literals is imported from __future__ (gh #786)"""
156 try:
157 ip.run_cell(u'byte_str = "a"')
158 assert isinstance(ip.user_ns['byte_str'], str) # string literals are byte strings by default
159 ip.run_cell('from __future__ import unicode_literals')
160 ip.run_cell(u'unicode_str = "a"')
161 assert isinstance(ip.user_ns['unicode_str'], unicode_type) # strings literals are now unicode
162 finally:
163 # Reset compiler flags so we don't mess up other tests.
164 ip.compile.reset_compiler_flags()
165
166 154 def test_can_pickle(self):
167 155 "Can we pickle objects defined interactively (GH-29)"
168 156 ip = get_ipython()
@@ -338,19 +326,6 b' class InteractiveShellTestCase(unittest.TestCase):'
338 326 finally:
339 327 trap.hook = save_hook
340 328
341 @skipif(sys.version_info[0] >= 3, "softspace removed in py3")
342 def test_print_softspace(self):
343 """Verify that softspace is handled correctly when executing multiple
344 statements.
345
346 In [1]: print 1; print 2
347 1
348 2
349
350 In [2]: print 1,; print 2
351 1 2
352 """
353
354 329 def test_ofind_line_magic(self):
355 330 from IPython.core.magic import register_line_magic
356 331
@@ -466,22 +441,6 b' class InteractiveShellTestCase(unittest.TestCase):'
466 441 # Reset the custom exception hook
467 442 ip.set_custom_exc((), None)
468 443
469 @skipif(sys.version_info[0] >= 3, "no differences with __future__ in py3")
470 def test_future_environment(self):
471 "Can we run code with & without the shell's __future__ imports?"
472 ip.run_cell("from __future__ import division")
473 ip.run_cell("a = 1/2", shell_futures=True)
474 self.assertEqual(ip.user_ns['a'], 0.5)
475 ip.run_cell("b = 1/2", shell_futures=False)
476 self.assertEqual(ip.user_ns['b'], 0)
477
478 ip.compile.reset_compiler_flags()
479 # This shouldn't leak to the shell's compiler
480 ip.run_cell("from __future__ import division \nc=1/2", shell_futures=False)
481 self.assertEqual(ip.user_ns['c'], 0.5)
482 ip.run_cell("d = 1/2", shell_futures=True)
483 self.assertEqual(ip.user_ns['d'], 0)
484
485 444 def test_mktempfile(self):
486 445 filename = ip.mktempfile()
487 446 # Check that we can open the file again on Windows
@@ -509,9 +468,6 b' class InteractiveShellTestCase(unittest.TestCase):'
509 468 raise DerivedInterrupt("foo")
510 469 except KeyboardInterrupt:
511 470 msg = ip.get_exception_only()
512 if sys.version_info[0] <= 2:
513 self.assertEqual(msg, 'DerivedInterrupt: foo\n')
514 else:
515 471 self.assertEqual(msg, 'IPython.core.tests.test_interactiveshell.DerivedInterrupt: foo\n')
516 472
517 473 def test_inspect_text(self):
@@ -3,7 +3,6 b''
3 3
4 4 Needs to be run by nose (to make ipython session available).
5 5 """
6 from __future__ import absolute_import
7 6
8 7 import io
9 8 import os
@@ -377,18 +376,6 b' def test_time3():'
377 376 "run = 0\n"
378 377 "run += 1")
379 378
380 @dec.skipif(sys.version_info[0] >= 3, "no differences with __future__ in py3")
381 def test_time_futures():
382 "Test %time with __future__ environments"
383 ip = get_ipython()
384 ip.autocall = 0
385 ip.run_cell("from __future__ import division")
386 with tt.AssertPrints('0.25'):
387 ip.run_line_magic('time', 'print(1/4)')
388 ip.compile.reset_compiler_flags()
389 with tt.AssertNotPrints('0.25'):
390 ip.run_line_magic('time', 'print(1/4)')
391
392 379 def test_doctest_mode():
393 380 "Toggle doctest_mode twice, it should be a no-op and run without error"
394 381 _ip.magic('doctest_mode')
@@ -573,17 +560,6 b' def test_timeit_return_quiet():'
573 560 res = _ip.run_line_magic('timeit', '-n1 -r1 -q -o 1')
574 561 assert (res is not None)
575 562
576 @dec.skipif(sys.version_info[0] >= 3, "no differences with __future__ in py3")
577 def test_timeit_futures():
578 "Test %timeit with __future__ environments"
579 ip = get_ipython()
580 ip.run_cell("from __future__ import division")
581 with tt.AssertPrints('0.25'):
582 ip.run_line_magic('timeit', '-n1 -r1 print(1/4)')
583 ip.compile.reset_compiler_flags()
584 with tt.AssertNotPrints('0.25'):
585 ip.run_line_magic('timeit', '-n1 -r1 print(1/4)')
586
587 563 @dec.skipif(execution.profile is None)
588 564 def test_prun_special_syntax():
589 565 "Test %%prun with IPython special syntax"
@@ -2,7 +2,6 b''
2 2
3 3 Needs to be run by nose (to make ipython session available).
4 4 """
5 from __future__ import absolute_import
6 5
7 6 #-----------------------------------------------------------------------------
8 7 # Imports
@@ -57,8 +56,6 b' def check_cpaste(code, should_fail=False):'
57 56 finally:
58 57 sys.stdin = stdin_save
59 58
60 PY31 = sys.version_info[:2] == (3,1)
61
62 59 def test_cpaste():
63 60 """Test cpaste magic"""
64 61
@@ -77,14 +74,9 b' def test_cpaste():'
77 74 ],
78 75
79 76 'fail': ["1 + runf()",
77 "++ runf()",
80 78 ]}
81 79
82 # I don't know why this is failing specifically on Python 3.1. I've
83 # checked it manually interactively, but we don't care enough about 3.1
84 # to spend time fiddling with the tests, so we just skip it.
85 if not PY31:
86 tests['fail'].append("++ runf()")
87
88 80 ip.user_ns['runf'] = runf
89 81
90 82 for code in tests['pass']:
@@ -4,7 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 7
9 8 import os
10 9 import re
@@ -40,7 +39,7 b' ip = get_ipython()'
40 39 # defined, if any code is inserted above, the following line will need to be
41 40 # updated. Do NOT insert any whitespace between the next line and the function
42 41 # definition below.
43 THIS_LINE_NUMBER = 43 # Put here the actual number of this line
42 THIS_LINE_NUMBER = 42 # Put here the actual number of this line
44 43
45 44 from unittest import TestCase
46 45
@@ -275,7 +274,6 b' def test_info():'
275 274 nt.assert_equal(i['type_name'], 'type')
276 275 expted_class = str(type(type)) # <class 'type'> (Python 3) or <type 'type'>
277 276 nt.assert_equal(i['base_class'], expted_class)
278 if sys.version_info > (3,):
279 277 nt.assert_regex(i['string_form'], "<class 'IPython.core.tests.test_oinspect.Call'( at 0x[0-9a-f]{1,9})?>")
280 278 fname = __file__
281 279 if fname.endswith(".pyc"):
@@ -15,7 +15,6 b' Authors'
15 15 * MinRK
16 16
17 17 """
18 from __future__ import absolute_import
19 18
20 19 #-----------------------------------------------------------------------------
21 20 # Imports
@@ -4,7 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 7
9 8 from io import UnsupportedOperation, BytesIO
10 9
@@ -11,7 +11,6 b' and we do so in a common test_magic file.'
11 11 # Copyright (c) IPython Development Team.
12 12 # Distributed under the terms of the Modified BSD License.
13 13
14 from __future__ import absolute_import
15 14
16 15
17 16 import functools
@@ -313,7 +313,6 b' def r3o2():'
313 313 #----------------------------------------------------------------------------
314 314
315 315 # module testing (minimal)
316 if sys.version_info > (3,):
317 316 def test_handlers():
318 317 def spam(c, d_e):
319 318 (d, e) = d_e
@@ -88,9 +88,6 b' Inheritance diagram:'
88 88 # the file COPYING, distributed as part of this software.
89 89 #*****************************************************************************
90 90
91 from __future__ import absolute_import
92 from __future__ import unicode_literals
93 from __future__ import print_function
94 91
95 92 import dis
96 93 import inspect
@@ -87,7 +87,6 b' Some of the known remaining caveats are:'
87 87
88 88 - C extension modules cannot be reloaded, and so cannot be autoreloaded.
89 89 """
90 from __future__ import print_function
91 90
92 91 skip_doctest = True
93 92
@@ -9,7 +9,6 b' To automatically restore stored variables at startup, add this to your'
9 9
10 10 c.StoreMagics.autorestore = True
11 11 """
12 from __future__ import print_function
13 12
14 13 # Copyright (c) IPython Development Team.
15 14 # Distributed under the terms of the Modified BSD License.
@@ -21,7 +21,6 b' separate implementation).'
21 21 An example notebook is provided in our documentation illustrating interactive
22 22 use of the system.
23 23 """
24 from __future__ import print_function
25 24
26 25 #*****************************************************************************
27 26 # Copyright (C) 2005-2006 Fernando Perez <fperez@colorado.edu>
@@ -25,7 +25,6 b' A reference to the original :func:`python:reload` is stored in this module as'
25 25 This code is almost entirely based on knee.py, which is a Python
26 26 re-implementation of hierarchical module import.
27 27 """
28 from __future__ import print_function
29 28 #*****************************************************************************
30 29 # Copyright (C) 2001 Nathaniel Gray <n8gray@caltech.edu>
31 30 #
@@ -170,7 +170,6 b' The following is a very simple example of a valid demo file.'
170 170 ################### END EXAMPLE DEMO <ex_demo.py> ############################
171 171 """
172 172
173 from __future__ import unicode_literals
174 173
175 174 #*****************************************************************************
176 175 # Copyright (C) 2005-2006 Fernando Perez. <Fernando.Perez@colorado.edu>
@@ -179,7 +178,6 b' from __future__ import unicode_literals'
179 178 # the file COPYING, distributed as part of this software.
180 179 #
181 180 #*****************************************************************************
182 from __future__ import print_function
183 181
184 182 import os
185 183 import re
@@ -4,7 +4,6 b' They should honor the line number argument, at least.'
4 4
5 5 Contributions are *very* welcome.
6 6 """
7 from __future__ import print_function
8 7
9 8 import os
10 9 import pipes
@@ -2,7 +2,6 b''
2 2 """
3 3 GLUT Inputhook support functions
4 4 """
5 from __future__ import print_function
6 5
7 6 #-----------------------------------------------------------------------------
8 7 # Copyright (C) 2008-2011 The IPython Development Team
@@ -77,7 +77,6 b' Inheritance diagram:'
77 77 Portions (c) 2009 by Robert Kern.
78 78 :license: BSD License.
79 79 """
80 from __future__ import print_function
81 80 from contextlib import contextmanager
82 81 import sys
83 82 import types
@@ -11,7 +11,6 b''
11 11 #-----------------------------------------------------------------------------
12 12 # Imports
13 13 #-----------------------------------------------------------------------------
14 from __future__ import print_function
15 14
16 15 # Stdlib imports
17 16 import time
@@ -12,7 +12,6 b''
12 12 #-----------------------------------------------------------------------------
13 13 # Imports
14 14 #-----------------------------------------------------------------------------
15 from __future__ import print_function
16 15 from tempfile import NamedTemporaryFile, mkdtemp
17 16 from os.path import split, join as pjoin, dirname
18 17
@@ -4,7 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 7
9 8 from collections import Counter, defaultdict, deque, OrderedDict
10 9 import types, string
@@ -12,14 +11,9 b' import types, string'
12 11 import nose.tools as nt
13 12
14 13 from IPython.lib import pretty
15 from IPython.testing.decorators import (skip_without, py2_only, py3_only)
14 from IPython.testing.decorators import skip_without
16 15
17 from IPython.utils.py3compat import PY3, unicode_to_str
18
19 if PY3:
20 16 from io import StringIO
21 else:
22 from StringIO import StringIO
23 17
24 18
25 19 class MyList(object):
@@ -245,7 +239,7 b' def test_metaclass_repr():'
245 239
246 240 def test_unicode_repr():
247 241 u = u"üniçodé"
248 ustr = unicode_to_str(u)
242 ustr = u
249 243
250 244 class C(object):
251 245 def __repr__(self):
@@ -276,83 +270,6 b' def test_basic_class():'
276 270 nt.assert_true(type_pprint_wrapper.called)
277 271
278 272
279 # This is only run on Python 2 because in Python 3 the language prevents you
280 # from setting a non-unicode value for __qualname__ on a metaclass, and it
281 # doesn't respect the descriptor protocol if you subclass unicode and implement
282 # __get__.
283 @py2_only
284 def test_fallback_to__name__on_type():
285 # Test that we correctly repr types that have non-string values for
286 # __qualname__ by falling back to __name__
287
288 class Type(object):
289 __qualname__ = 5
290
291 # Test repring of the type.
292 stream = StringIO()
293 printer = pretty.RepresentationPrinter(stream)
294
295 printer.pretty(Type)
296 printer.flush()
297 output = stream.getvalue()
298
299 # If __qualname__ is malformed, we should fall back to __name__.
300 expected = '.'.join([__name__, Type.__name__])
301 nt.assert_equal(output, expected)
302
303 # Clear stream buffer.
304 stream.buf = ''
305
306 # Test repring of an instance of the type.
307 instance = Type()
308 printer.pretty(instance)
309 printer.flush()
310 output = stream.getvalue()
311
312 # Should look like:
313 # <IPython.lib.tests.test_pretty.Type at 0x7f7658ae07d0>
314 prefix = '<' + '.'.join([__name__, Type.__name__]) + ' at 0x'
315 nt.assert_true(output.startswith(prefix))
316
317
318 @py2_only
319 def test_fail_gracefully_on_bogus__qualname__and__name__():
320 # Test that we correctly repr types that have non-string values for both
321 # __qualname__ and __name__
322
323 class Meta(type):
324 __name__ = 5
325
326 class Type(object):
327 __metaclass__ = Meta
328 __qualname__ = 5
329
330 stream = StringIO()
331 printer = pretty.RepresentationPrinter(stream)
332
333 printer.pretty(Type)
334 printer.flush()
335 output = stream.getvalue()
336
337 # If we can't find __name__ or __qualname__ just use a sentinel string.
338 expected = '.'.join([__name__, '<unknown type>'])
339 nt.assert_equal(output, expected)
340
341 # Clear stream buffer.
342 stream.buf = ''
343
344 # Test repring of an instance of the type.
345 instance = Type()
346 printer.pretty(instance)
347 printer.flush()
348 output = stream.getvalue()
349
350 # Should look like:
351 # <IPython.lib.tests.test_pretty.<unknown type> at 0x7f7658ae07d0>
352 prefix = '<' + '.'.join([__name__, '<unknown type>']) + ' at 0x'
353 nt.assert_true(output.startswith(prefix))
354
355
356 273 def test_collections_defaultdict():
357 274 # Create defaultdicts with cycles
358 275 a = defaultdict()
@@ -441,7 +358,6 b' def test_collections_counter():'
441 358 for obj, expected in cases:
442 359 nt.assert_equal(pretty.pretty(obj), expected)
443 360
444 @py3_only
445 361 def test_mappingproxy():
446 362 MP = types.MappingProxyType
447 363 underlying_dict = {}
@@ -119,7 +119,6 b' Authors'
119 119 - VáclavŠmilauer <eudoxos-AT-arcig.cz>: Prompt generalizations.
120 120 - Skipper Seabold, refactoring, cleanups, pure python addition
121 121 """
122 from __future__ import print_function
123 122
124 123 #-----------------------------------------------------------------------------
125 124 # Imports
@@ -5,8 +5,6 b' An embedded IPython shell.'
5 5 # Copyright (c) IPython Development Team.
6 6 # Distributed under the terms of the Modified BSD License.
7 7
8 from __future__ import with_statement
9 from __future__ import print_function
10 8
11 9 import sys
12 10 import warnings
@@ -1,5 +1,4 b''
1 1 """IPython terminal interface using prompt_toolkit"""
2 from __future__ import print_function
3 2
4 3 import os
5 4 import sys
@@ -8,8 +8,6 b' line :command:`ipython` program.'
8 8 # Copyright (c) IPython Development Team.
9 9 # Distributed under the terms of the Modified BSD License.
10 10
11 from __future__ import absolute_import
12 from __future__ import print_function
13 11
14 12 import logging
15 13 import os
@@ -3,7 +3,6 b''
3 3 # Copyright (c) IPython Development Team.
4 4 # Distributed under the terms of the Modified BSD License.
5 5
6 from __future__ import print_function
7 6
8 7 from logging import error
9 8 import os
@@ -1,5 +1,4 b''
1 1 """Terminal input and output prompts."""
2 from __future__ import print_function
3 2
4 3 from pygments.token import Token
5 4 import sys
@@ -1,6 +1,5 b''
1 1 """GLUT Input hook for interactive use with prompt_toolkit
2 2 """
3 from __future__ import print_function
4 3
5 4
6 5 # GLUT is quite an old library and it is difficult to ensure proper
@@ -35,7 +35,6 b' PyGTK input hook for prompt_toolkit.'
35 35 Listens on the pipe prompt_toolkit sets up for a notification that it should
36 36 return control to the terminal event loop.
37 37 """
38 from __future__ import absolute_import
39 38
40 39 import gtk, gobject
41 40
@@ -1,6 +1,5 b''
1 1 """Enable pyglet to be used interacively with prompt_toolkit
2 2 """
3 from __future__ import absolute_import
4 3
5 4 import os
6 5 import sys
@@ -1,6 +1,5 b''
1 1 """Enable wxPython to be used interacively in prompt_toolkit
2 2 """
3 from __future__ import absolute_import
4 3
5 4 import sys
6 5 import signal
@@ -24,7 +24,6 b' from IPython.testing.decorators import skip_win32'
24 24
25 25
26 26 _sample_embed = b"""
27 from __future__ import print_function
28 27 import IPython
29 28
30 29 a = 3
@@ -74,8 +73,6 b' def test_nest_embed():'
74 73 child = pexpect.spawn(sys.executable, ['-m', 'IPython', '--colors=nocolor'],
75 74 env=env)
76 75 child.expect(ipy_prompt)
77 child.sendline("from __future__ import print_function")
78 child.expect(ipy_prompt)
79 76 child.sendline("import IPython")
80 77 child.expect(ipy_prompt)
81 78 child.sendline("ip0 = get_ipython()")
@@ -334,12 +334,6 b" skipif_not_sympy = skip_without('sympy')"
334 334
335 335 skip_known_failure = knownfailureif(True,'This test is known to fail')
336 336
337 known_failure_py3 = knownfailureif(sys.version_info[0] >= 3,
338 'This test is known to fail on Python 3.')
339
340 py2_only = skipif(PY3, "This test only runs on Python 2.")
341 py3_only = skipif(PY2, "This test only runs on Python 3.")
342
343 337 # A null 'decorator', useful to make more readable code that needs to pick
344 338 # between different decorators based on OS or other conditions
345 339 null_deco = lambda f: f
@@ -5,8 +5,6 b" modifications IPython makes to system behavior don't send the doctest machinery"
5 5 into a fit. This code should be considered a gross hack, but it gets the job
6 6 done.
7 7 """
8 from __future__ import absolute_import
9 from __future__ import print_function
10 8
11 9 # Copyright (c) IPython Development Team.
12 10 # Distributed under the terms of the Modified BSD License.
@@ -17,7 +17,6 b' itself from the command line. There are two ways of running this script:'
17 17 # Copyright (c) IPython Development Team.
18 18 # Distributed under the terms of the Modified BSD License.
19 19
20 from __future__ import print_function
21 20
22 21 import glob
23 22 from io import BytesIO
@@ -45,7 +44,6 b' pjoin = path.join'
45 44
46 45 # Enable printing all warnings raise by IPython's modules
47 46 warnings.filterwarnings('ignore', message='.*Matplotlib is building the font cache.*', category=UserWarning, module='.*')
48 if sys.version_info > (3,0):
49 47 warnings.filterwarnings('error', message='.*', category=ResourceWarning, module='.*')
50 48 warnings.filterwarnings('error', message=".*{'config': True}.*", category=DeprecationWarning, module='IPy.*')
51 49 warnings.filterwarnings('default', message='.*', category=Warning, module='IPy.*')
@@ -9,7 +9,6 b' test suite.'
9 9 # Copyright (c) IPython Development Team.
10 10 # Distributed under the terms of the Modified BSD License.
11 11
12 from __future__ import print_function
13 12
14 13 import argparse
15 14 import json
@@ -22,7 +22,6 b' Authors'
22 22 - Fernando Perez <Fernando.Perez@berkeley.edu>
23 23 """
24 24
25 from __future__ import absolute_import
26 25
27 26 #-----------------------------------------------------------------------------
28 27 # Copyright (C) 2009-2011 The IPython Development Team
@@ -3,7 +3,6 b''
3 3 This file just contains doctests both using plain python and IPython prompts.
4 4 All tests should be loaded by nose.
5 5 """
6 from __future__ import print_function
7 6
8 7 def pyfunc():
9 8 """Some pure python tests...
@@ -1,7 +1,6 b''
1 1 #!/usr/bin/env python
2 2 """Nose-based test runner.
3 3 """
4 from __future__ import print_function
5 4
6 5 from nose.core import main
7 6 from nose.plugins.builtin import plugins
@@ -2,7 +2,6 b''
2 2
3 3 This is used by a companion test case.
4 4 """
5 from __future__ import print_function
6 5
7 6 import gc
8 7
@@ -3,7 +3,6 b''
3 3 This file just contains doctests both using plain python and IPython prompts.
4 4 All tests should be loaded by nose.
5 5 """
6 from __future__ import print_function
7 6
8 7 def pyfunc():
9 8 """Some pure python tests...
@@ -1,3 +1,2 b''
1 from __future__ import print_function
2 1 x = 1
3 2 print('x is:',x)
@@ -1,26 +1,13 b''
1 """Decorators marks that a doctest should be skipped, for both python 2 and 3.
1 """Decorators marks that a doctest should be skipped.
2 2
3 3 The IPython.testing.decorators module triggers various extra imports, including
4 4 numpy and sympy if they're present. Since this decorator is used in core parts
5 5 of IPython, it's in a separate module so that running IPython doesn't trigger
6 6 those imports."""
7 7
8 #-----------------------------------------------------------------------------
9 # Copyright (C) 2009-2011 The IPython Development Team
10 #
11 # Distributed under the terms of the BSD License. The full license is in
12 # the file COPYING, distributed as part of this software.
13 #-----------------------------------------------------------------------------
8 # Copyright (C) IPython Development Team
9 # Distributed under the terms of the Modified BSD License.
14 10
15 #-----------------------------------------------------------------------------
16 # Imports
17 #-----------------------------------------------------------------------------
18
19 import sys
20
21 #-----------------------------------------------------------------------------
22 # Decorators
23 #-----------------------------------------------------------------------------
24 11
25 12 def skip_doctest(f):
26 13 """Decorator - mark a function or method for skipping its doctest.
@@ -30,14 +17,3 b' def skip_doctest(f):'
30 17 etc."""
31 18 f.skip_doctest = True
32 19 return f
33
34
35 def skip_doctest_py3(f):
36 """Decorator - skip the doctest under Python 3."""
37 f.skip_doctest = (sys.version_info[0] >= 3)
38 return f
39
40 def skip_doctest_py2(f):
41 """Decorator - skip the doctest under Python 3."""
42 f.skip_doctest = (sys.version_info[0] < 3)
43 return f
@@ -1,6 +1,5 b''
1 1 """Tests for the decorators we've created for IPython.
2 2 """
3 from __future__ import print_function
4 3
5 4 # Module imports
6 5 # Std lib
@@ -13,8 +13,6 b' Tests for testing.tools'
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 from __future__ import with_statement
17 from __future__ import print_function
18 16
19 17 import os
20 18 import unittest
@@ -110,8 +108,7 b' class Test_ipexec_validate(unittest.TestCase, tt.TempFileMixin):'
110 108 def test_exception_path(self):
111 109 """Test exception path in exception_validate.
112 110 """
113 self.mktmp("from __future__ import print_function\n"
114 "import sys\n"
111 self.mktmp("import sys\n"
115 112 "print('A')\n"
116 113 "print('B')\n"
117 114 "print('C', file=sys.stderr)\n"
@@ -123,8 +120,7 b' class Test_ipexec_validate(unittest.TestCase, tt.TempFileMixin):'
123 120 def test_exception_path2(self):
124 121 """Test exception path in exception_validate, expecting windows line endings.
125 122 """
126 self.mktmp("from __future__ import print_function\n"
127 "import sys\n"
123 self.mktmp("import sys\n"
128 124 "print('A')\n"
129 125 "print('B')\n"
130 126 "print('C', file=sys.stderr)\n"
@@ -5,7 +5,6 b' Authors'
5 5 - Fernando Perez <Fernando.Perez@berkeley.edu>
6 6 """
7 7
8 from __future__ import absolute_import
9 8
10 9 #-----------------------------------------------------------------------------
11 10 # Copyright (C) 2009 The IPython Development Team
@@ -28,9 +28,6 b' It shows how to use the built-in keyword, token and tokenize modules to'
28 28 scan Python source code and re-emit it with no changes to its original
29 29 formatting (which is the hard part).
30 30 """
31 from __future__ import print_function
32 from __future__ import absolute_import
33 from __future__ import unicode_literals
34 31
35 32 __all__ = ['ANSICodeColors','Parser']
36 33
@@ -13,7 +13,6 b' This file is only meant to be imported by process.py, not by end-users.'
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 from __future__ import print_function
17 16
18 17 # Stdlib
19 18 import errno
@@ -13,7 +13,6 b' This file is only meant to be imported by process.py, not by end-users.'
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 from __future__ import print_function
17 16
18 17 # stdlib
19 18 import os
@@ -10,7 +10,6 b' This file is meant to be used by process.py'
10 10 # the file COPYING, distributed as part of this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 from __future__ import print_function
14 13
15 14 # stdlib
16 15 import os, sys, threading
@@ -16,7 +16,6 b' modified to be compatible with Python 2.7 and 3.2+.'
16 16 # the file COPYING, distributed as part of this software.
17 17 #-----------------------------------------------------------------------------
18 18
19 from __future__ import absolute_import, division, print_function
20 19 import itertools
21 20 import functools
22 21 import re
@@ -4,7 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function, absolute_import
8 7
9 8 import sys
10 9
@@ -4,7 +4,6 b''
4 4 # Distributed under the terms of the BSD License. The full license is in
5 5 # the file COPYING, distributed as part of this software.
6 6 #*****************************************************************************
7 from __future__ import absolute_import
8 7
9 8 """
10 9 Color managing related utilities
@@ -1,4 +1,3 b''
1 from __future__ import absolute_import
2 1
3 2 from warnings import warn
4 3
@@ -2,7 +2,6 b''
2 2 """
3 3 Utilities for working with stack frames.
4 4 """
5 from __future__ import print_function
6 5
7 6 #-----------------------------------------------------------------------------
8 7 # Copyright (C) 2008-2011 The IPython Development Team
@@ -6,8 +6,6 b' IO related utilities.'
6 6 # Copyright (c) IPython Development Team.
7 7 # Distributed under the terms of the Modified BSD License.
8 8
9 from __future__ import print_function
10 from __future__ import absolute_import
11 9
12 10
13 11 import atexit
@@ -1,4 +1,3 b''
1 from __future__ import absolute_import
2 1
3 2 from warnings import warn
4 3
@@ -23,7 +23,6 b' path to module and not an open file object as well.'
23 23 #-----------------------------------------------------------------------------
24 24 # Imports
25 25 #-----------------------------------------------------------------------------
26 from __future__ import print_function
27 26
28 27 # Stdlib imports
29 28 import imp
@@ -4,7 +4,6 b' as per PEP 263.'
4 4
5 5 Much of the code is taken from the tokenize module in Python 3.2.
6 6 """
7 from __future__ import absolute_import
8 7
9 8 import io
10 9 from io import TextIOWrapper, BytesIO
@@ -6,7 +6,6 b' Utilities for working with external processes.'
6 6 # Copyright (c) IPython Development Team.
7 7 # Distributed under the terms of the Modified BSD License.
8 8
9 from __future__ import print_function
10 9
11 10 import os
12 11 import sys
@@ -2,7 +2,6 b''
2 2
3 3 This is copied from the stdlib and will be standard in Python 3.2 and onwards.
4 4 """
5 from __future__ import print_function
6 5
7 6 import os as _os
8 7 import warnings as _warnings
@@ -12,7 +12,6 b''
12 12 # Imports
13 13 #-----------------------------------------------------------------------------
14 14
15 from __future__ import print_function
16 15
17 16 import sys
18 17
@@ -4,8 +4,6 b''
4 4 # Copyright (c) IPython Development Team.
5 5 # Distributed under the terms of the Modified BSD License.
6 6
7 from __future__ import print_function
8 from __future__ import absolute_import
9 7
10 8 import io as stdlib_io
11 9 import os.path
@@ -12,7 +12,6 b''
12 12 # Imports
13 13 #-----------------------------------------------------------------------------
14 14
15 from __future__ import with_statement
16 15
17 16 import os
18 17 import shutil
@@ -93,8 +93,7 b' def test_arg_split_win32():'
93 93 class SubProcessTestCase(TestCase, tt.TempFileMixin):
94 94 def setUp(self):
95 95 """Make a valid python temp file."""
96 lines = ["from __future__ import print_function",
97 "import sys",
96 lines = [ "import sys",
98 97 "print('on stdout', end='', file=sys.stdout)",
99 98 "print('on stderr', end='', file=sys.stderr)",
100 99 "sys.stdout.flush()",
@@ -1,6 +1,5 b''
1 1 # encoding: utf-8
2 2 """Tests for IPython.utils.text"""
3 from __future__ import print_function
4 3
5 4 #-----------------------------------------------------------------------------
6 5 # Copyright (C) 2011 The IPython Development Team
@@ -7,7 +7,6 b' Inheritance diagram:'
7 7 .. inheritance-diagram:: IPython.utils.text
8 8 :parts: 3
9 9 """
10 from __future__ import absolute_import
11 10
12 11 import os
13 12 import re
@@ -20,7 +19,6 b' except ImportError:'
20 19 # Python 2 backport
21 20 from pathlib2 import Path
22 21
23 from IPython.testing.skipdoctest import skip_doctest_py3, skip_doctest
24 22 from IPython.utils import py3compat
25 23
26 24 # datetime.strftime date format for ipython
@@ -517,7 +515,6 b' class EvalFormatter(Formatter):'
517 515 # inside [], so EvalFormatter can handle slicing. Once we only support 3.4 and
518 516 # above, it should be possible to remove FullEvalFormatter.
519 517
520 @skip_doctest_py3
521 518 class FullEvalFormatter(Formatter):
522 519 """A String Formatter that allows evaluation of simple expressions.
523 520
@@ -533,13 +530,13 b' class FullEvalFormatter(Formatter):'
533 530
534 531 In [1]: f = FullEvalFormatter()
535 532 In [2]: f.format('{n//4}', n=8)
536 Out[2]: u'2'
533 Out[2]: '2'
537 534
538 535 In [3]: f.format('{list(range(5))[2:4]}')
539 Out[3]: u'[2, 3]'
536 Out[3]: '[2, 3]'
540 537
541 538 In [4]: f.format('{3*2}')
542 Out[4]: u'6'
539 Out[4]: '6'
543 540 """
544 541 # copied from Formatter._vformat with minor changes to allow eval
545 542 # and replace the format_spec code with slicing
@@ -574,7 +571,6 b' class FullEvalFormatter(Formatter):'
574 571 return u''.join(py3compat.cast_unicode(s) for s in result)
575 572
576 573
577 @skip_doctest_py3
578 574 class DollarFormatter(FullEvalFormatter):
579 575 """Formatter allowing Itpl style $foo replacement, for names and attribute
580 576 access only. Standard {foo} replacement also works, and allows full
@@ -586,13 +582,13 b' class DollarFormatter(FullEvalFormatter):'
586 582
587 583 In [1]: f = DollarFormatter()
588 584 In [2]: f.format('{n//4}', n=8)
589 Out[2]: u'2'
585 Out[2]: '2'
590 586
591 587 In [3]: f.format('23 * 76 is $result', result=23*76)
592 Out[3]: u'23 * 76 is 1748'
588 Out[3]: '23 * 76 is 1748'
593 589
594 590 In [4]: f.format('$a or {b}', a=1, b=2)
595 Out[4]: u'1 or 2'
591 Out[4]: '1 or 2'
596 592 """
597 593 _dollar_pattern = re.compile("(.*?)\$(\$?[\w\.]+)")
598 594 def parse(self, fmt_string):
This diff has been collapsed as it changes many lines, (593 lines changed) Show them Hide them
@@ -1,9 +1,594 b''
1 """Load our patched versions of tokenize.
1 """Patched version of standard library tokenize, to deal with various bugs.
2
3 Based on Python 3.2 code.
4
5 Patches:
6
7 - Gareth Rees' patch for Python issue #12691 (untokenizing)
8 - Except we don't encode the output of untokenize
9 - Python 2 compatible syntax, so that it can be byte-compiled at installation
10 - Newlines in comments and blank lines should be either NL or NEWLINE, depending
11 on whether they are in a multi-line statement. Filed as Python issue #17061.
12 - Export generate_tokens & TokenError
13 - u and rb literals are allowed under Python 3.3 and above.
14
15 ------------------------------------------------------------------------------
16 Tokenization help for Python programs.
17
18 tokenize(readline) is a generator that breaks a stream of bytes into
19 Python tokens. It decodes the bytes according to PEP-0263 for
20 determining source file encoding.
21
22 It accepts a readline-like method which is called repeatedly to get the
23 next line of input (or b"" for EOF). It generates 5-tuples with these
24 members:
25
26 the token type (see token.py)
27 the token (a string)
28 the starting (row, column) indices of the token (a 2-tuple of ints)
29 the ending (row, column) indices of the token (a 2-tuple of ints)
30 the original line (string)
31
32 It is designed to match the working of the Python tokenizer exactly, except
33 that it produces COMMENT tokens for comments and gives type OP for all
34 operators. Additionally, all token lists start with an ENCODING token
35 which tells you which encoding was used to decode the bytes stream.
2 36 """
3 37
38 __author__ = 'Ka-Ping Yee <ping@lfw.org>'
39 __credits__ = ('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, '
40 'Skip Montanaro, Raymond Hettinger, Trent Nelson, '
41 'Michael Foord')
42 import builtins
43 import re
4 44 import sys
45 from token import *
46 from codecs import lookup, BOM_UTF8
47 import collections
48 from io import TextIOWrapper
49 cookie_re = re.compile("coding[:=]\s*([-\w.]+)")
50
51 import token
52 __all__ = token.__all__ + ["COMMENT", "tokenize", "detect_encoding",
53 "NL", "untokenize", "ENCODING", "TokenInfo"]
54 del token
55
56 __all__ += ["generate_tokens", "TokenError"]
57
58 COMMENT = N_TOKENS
59 tok_name[COMMENT] = 'COMMENT'
60 NL = N_TOKENS + 1
61 tok_name[NL] = 'NL'
62 ENCODING = N_TOKENS + 2
63 tok_name[ENCODING] = 'ENCODING'
64 N_TOKENS += 3
65
66 class TokenInfo(collections.namedtuple('TokenInfo', 'type string start end line')):
67 def __repr__(self):
68 annotated_type = '%d (%s)' % (self.type, tok_name[self.type])
69 return ('TokenInfo(type=%s, string=%r, start=%r, end=%r, line=%r)' %
70 self._replace(type=annotated_type))
71
72 def group(*choices): return '(' + '|'.join(choices) + ')'
73 def any(*choices): return group(*choices) + '*'
74 def maybe(*choices): return group(*choices) + '?'
75
76 # Note: we use unicode matching for names ("\w") but ascii matching for
77 # number literals.
78 Whitespace = r'[ \f\t]*'
79 Comment = r'#[^\r\n]*'
80 Ignore = Whitespace + any(r'\\\r?\n' + Whitespace) + maybe(Comment)
81 Name = r'\w+'
82
83 Hexnumber = r'0[xX][0-9a-fA-F]+'
84 Binnumber = r'0[bB][01]+'
85 Octnumber = r'0[oO][0-7]+'
86 Decnumber = r'(?:0+|[1-9][0-9]*)'
87 Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber)
88 Exponent = r'[eE][-+]?[0-9]+'
89 Pointfloat = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(Exponent)
90 Expfloat = r'[0-9]+' + Exponent
91 Floatnumber = group(Pointfloat, Expfloat)
92 Imagnumber = group(r'[0-9]+[jJ]', Floatnumber + r'[jJ]')
93 Number = group(Imagnumber, Floatnumber, Intnumber)
94
95 if sys.version_info.minor >= 3:
96 StringPrefix = r'(?:[bB][rR]?|[rR][bB]?|[uU])?'
97 else:
98 StringPrefix = r'(?:[bB]?[rR]?)?'
99
100 # Tail end of ' string.
101 Single = r"[^'\\]*(?:\\.[^'\\]*)*'"
102 # Tail end of " string.
103 Double = r'[^"\\]*(?:\\.[^"\\]*)*"'
104 # Tail end of ''' string.
105 Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''"
106 # Tail end of """ string.
107 Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""'
108 Triple = group(StringPrefix + "'''", StringPrefix + '"""')
109 # Single-line ' or " string.
110 String = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'",
111 StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*"')
112
113 # Because of leftmost-then-longest match semantics, be sure to put the
114 # longest operators first (e.g., if = came before ==, == would get
115 # recognized as two instances of =).
116 Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=",
117 r"//=?", r"->",
118 r"[+\-*/%&|^=<>]=?",
119 r"~")
120
121 Bracket = '[][(){}]'
122 Special = group(r'\r?\n', r'\.\.\.', r'[:;.,@]')
123 Funny = group(Operator, Bracket, Special)
124
125 PlainToken = group(Number, Funny, String, Name)
126 Token = Ignore + PlainToken
127
128 # First (or only) line of ' or " string.
129 ContStr = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
130 group("'", r'\\\r?\n'),
131 StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
132 group('"', r'\\\r?\n'))
133 PseudoExtras = group(r'\\\r?\n', Comment, Triple)
134 PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name)
135
136 def _compile(expr):
137 return re.compile(expr, re.UNICODE)
138
139 tokenprog, pseudoprog, single3prog, double3prog = map(
140 _compile, (Token, PseudoToken, Single3, Double3))
141 endprogs = {"'": _compile(Single), '"': _compile(Double),
142 "'''": single3prog, '"""': double3prog,
143 "r'''": single3prog, 'r"""': double3prog,
144 "b'''": single3prog, 'b"""': double3prog,
145 "R'''": single3prog, 'R"""': double3prog,
146 "B'''": single3prog, 'B"""': double3prog,
147 "br'''": single3prog, 'br"""': double3prog,
148 "bR'''": single3prog, 'bR"""': double3prog,
149 "Br'''": single3prog, 'Br"""': double3prog,
150 "BR'''": single3prog, 'BR"""': double3prog,
151 'r': None, 'R': None, 'b': None, 'B': None}
152
153 triple_quoted = {}
154 for t in ("'''", '"""',
155 "r'''", 'r"""', "R'''", 'R"""',
156 "b'''", 'b"""', "B'''", 'B"""',
157 "br'''", 'br"""', "Br'''", 'Br"""',
158 "bR'''", 'bR"""', "BR'''", 'BR"""'):
159 triple_quoted[t] = t
160 single_quoted = {}
161 for t in ("'", '"',
162 "r'", 'r"', "R'", 'R"',
163 "b'", 'b"', "B'", 'B"',
164 "br'", 'br"', "Br'", 'Br"',
165 "bR'", 'bR"', "BR'", 'BR"' ):
166 single_quoted[t] = t
167
168 if sys.version_info.minor >= 3:
169 # Python 3.3
170 for _prefix in ['rb', 'rB', 'Rb', 'RB', 'u', 'U']:
171 _t2 = _prefix+'"""'
172 endprogs[_t2] = double3prog
173 triple_quoted[_t2] = _t2
174 _t1 = _prefix + "'''"
175 endprogs[_t1] = single3prog
176 triple_quoted[_t1] = _t1
177 single_quoted[_prefix+'"'] = _prefix+'"'
178 single_quoted[_prefix+"'"] = _prefix+"'"
179 del _prefix, _t2, _t1
180 endprogs['u'] = None
181 endprogs['U'] = None
182
183 del _compile
184
185 tabsize = 8
186
187 class TokenError(Exception): pass
188
189 class StopTokenizing(Exception): pass
190
191
192 class Untokenizer:
193
194 def __init__(self):
195 self.tokens = []
196 self.prev_row = 1
197 self.prev_col = 0
198 self.encoding = 'utf-8'
199
200 def add_whitespace(self, tok_type, start):
201 row, col = start
202 assert row >= self.prev_row
203 col_offset = col - self.prev_col
204 if col_offset > 0:
205 self.tokens.append(" " * col_offset)
206 elif row > self.prev_row and tok_type not in (NEWLINE, NL, ENDMARKER):
207 # Line was backslash-continued.
208 self.tokens.append(" ")
209
210 def untokenize(self, tokens):
211 iterable = iter(tokens)
212 for t in iterable:
213 if len(t) == 2:
214 self.compat(t, iterable)
215 break
216 tok_type, token, start, end = t[:4]
217 if tok_type == ENCODING:
218 self.encoding = token
219 continue
220 self.add_whitespace(tok_type, start)
221 self.tokens.append(token)
222 self.prev_row, self.prev_col = end
223 if tok_type in (NEWLINE, NL):
224 self.prev_row += 1
225 self.prev_col = 0
226 return "".join(self.tokens)
227
228 def compat(self, token, iterable):
229 # This import is here to avoid problems when the itertools
230 # module is not built yet and tokenize is imported.
231 from itertools import chain
232 startline = False
233 prevstring = False
234 indents = []
235 toks_append = self.tokens.append
236
237 for tok in chain([token], iterable):
238 toknum, tokval = tok[:2]
239 if toknum == ENCODING:
240 self.encoding = tokval
241 continue
242
243 if toknum in (NAME, NUMBER):
244 tokval += ' '
245
246 # Insert a space between two consecutive strings
247 if toknum == STRING:
248 if prevstring:
249 tokval = ' ' + tokval
250 prevstring = True
251 else:
252 prevstring = False
253
254 if toknum == INDENT:
255 indents.append(tokval)
256 continue
257 elif toknum == DEDENT:
258 indents.pop()
259 continue
260 elif toknum in (NEWLINE, NL):
261 startline = True
262 elif startline and indents:
263 toks_append(indents[-1])
264 startline = False
265 toks_append(tokval)
266
267
268 def untokenize(tokens):
269 """
270 Convert ``tokens`` (an iterable) back into Python source code. Return
271 a bytes object, encoded using the encoding specified by the last
272 ENCODING token in ``tokens``, or UTF-8 if no ENCODING token is found.
273
274 The result is guaranteed to tokenize back to match the input so that
275 the conversion is lossless and round-trips are assured. The
276 guarantee applies only to the token type and token string as the
277 spacing between tokens (column positions) may change.
278
279 :func:`untokenize` has two modes. If the input tokens are sequences
280 of length 2 (``type``, ``string``) then spaces are added as necessary to
281 preserve the round-trip property.
282
283 If the input tokens are sequences of length 4 or more (``type``,
284 ``string``, ``start``, ``end``), as returned by :func:`tokenize`, then
285 spaces are added so that each token appears in the result at the
286 position indicated by ``start`` and ``end``, if possible.
287 """
288 return Untokenizer().untokenize(tokens)
289
290
291 def _get_normal_name(orig_enc):
292 """Imitates get_normal_name in tokenizer.c."""
293 # Only care about the first 12 characters.
294 enc = orig_enc[:12].lower().replace("_", "-")
295 if enc == "utf-8" or enc.startswith("utf-8-"):
296 return "utf-8"
297 if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \
298 enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")):
299 return "iso-8859-1"
300 return orig_enc
301
302 def detect_encoding(readline):
303 """
304 The detect_encoding() function is used to detect the encoding that should
305 be used to decode a Python source file. It requires one argment, readline,
306 in the same way as the tokenize() generator.
307
308 It will call readline a maximum of twice, and return the encoding used
309 (as a string) and a list of any lines (left as bytes) it has read in.
310
311 It detects the encoding from the presence of a utf-8 bom or an encoding
312 cookie as specified in pep-0263. If both a bom and a cookie are present,
313 but disagree, a SyntaxError will be raised. If the encoding cookie is an
314 invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found,
315 'utf-8-sig' is returned.
316
317 If no encoding is specified, then the default of 'utf-8' will be returned.
318 """
319 bom_found = False
320 encoding = None
321 default = 'utf-8'
322 def read_or_stop():
323 try:
324 return readline()
325 except StopIteration:
326 return b''
327
328 def find_cookie(line):
329 try:
330 # Decode as UTF-8. Either the line is an encoding declaration,
331 # in which case it should be pure ASCII, or it must be UTF-8
332 # per default encoding.
333 line_string = line.decode('utf-8')
334 except UnicodeDecodeError:
335 raise SyntaxError("invalid or missing encoding declaration")
336
337 matches = cookie_re.findall(line_string)
338 if not matches:
339 return None
340 encoding = _get_normal_name(matches[0])
341 try:
342 codec = lookup(encoding)
343 except LookupError:
344 # This behaviour mimics the Python interpreter
345 raise SyntaxError("unknown encoding: " + encoding)
346
347 if bom_found:
348 if encoding != 'utf-8':
349 # This behaviour mimics the Python interpreter
350 raise SyntaxError('encoding problem: utf-8')
351 encoding += '-sig'
352 return encoding
353
354 first = read_or_stop()
355 if first.startswith(BOM_UTF8):
356 bom_found = True
357 first = first[3:]
358 default = 'utf-8-sig'
359 if not first:
360 return default, []
361
362 encoding = find_cookie(first)
363 if encoding:
364 return encoding, [first]
365
366 second = read_or_stop()
367 if not second:
368 return default, [first]
369
370 encoding = find_cookie(second)
371 if encoding:
372 return encoding, [first, second]
373
374 return default, [first, second]
375
376
377 def open(filename):
378 """Open a file in read only mode using the encoding detected by
379 detect_encoding().
380 """
381 buffer = builtins.open(filename, 'rb')
382 encoding, lines = detect_encoding(buffer.readline)
383 buffer.seek(0)
384 text = TextIOWrapper(buffer, encoding, line_buffering=True)
385 text.mode = 'r'
386 return text
387
388
389 def tokenize(readline):
390 """
391 The tokenize() generator requires one argment, readline, which
392 must be a callable object which provides the same interface as the
393 readline() method of built-in file objects. Each call to the function
394 should return one line of input as bytes. Alternately, readline
395 can be a callable function terminating with StopIteration:
396 readline = open(myfile, 'rb').__next__ # Example of alternate readline
397
398 The generator produces 5-tuples with these members: the token type; the
399 token string; a 2-tuple (srow, scol) of ints specifying the row and
400 column where the token begins in the source; a 2-tuple (erow, ecol) of
401 ints specifying the row and column where the token ends in the source;
402 and the line on which the token was found. The line passed is the
403 logical line; continuation lines are included.
5 404
6 if sys.version_info[0] >= 3:
7 from ._tokenize_py3 import *
405 The first token sequence will always be an ENCODING token
406 which tells you which encoding was used to decode the bytes stream.
407 """
408 # This import is here to avoid problems when the itertools module is not
409 # built yet and tokenize is imported.
410 from itertools import chain, repeat
411 encoding, consumed = detect_encoding(readline)
412 rl_gen = iter(readline, b"")
413 empty = repeat(b"")
414 return _tokenize(chain(consumed, rl_gen, empty).__next__, encoding)
415
416
417 def _tokenize(readline, encoding):
418 lnum = parenlev = continued = 0
419 numchars = '0123456789'
420 contstr, needcont = '', 0
421 contline = None
422 indents = [0]
423
424 if encoding is not None:
425 if encoding == "utf-8-sig":
426 # BOM will already have been stripped.
427 encoding = "utf-8"
428 yield TokenInfo(ENCODING, encoding, (0, 0), (0, 0), '')
429 while True: # loop over lines in stream
430 try:
431 line = readline()
432 except StopIteration:
433 line = b''
434
435 if encoding is not None:
436 line = line.decode(encoding)
437 lnum += 1
438 pos, max = 0, len(line)
439
440 if contstr: # continued string
441 if not line:
442 raise TokenError("EOF in multi-line string", strstart)
443 endmatch = endprog.match(line)
444 if endmatch:
445 pos = end = endmatch.end(0)
446 yield TokenInfo(STRING, contstr + line[:end],
447 strstart, (lnum, end), contline + line)
448 contstr, needcont = '', 0
449 contline = None
450 elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n':
451 yield TokenInfo(ERRORTOKEN, contstr + line,
452 strstart, (lnum, len(line)), contline)
453 contstr = ''
454 contline = None
455 continue
456 else:
457 contstr = contstr + line
458 contline = contline + line
459 continue
460
461 elif parenlev == 0 and not continued: # new statement
462 if not line: break
463 column = 0
464 while pos < max: # measure leading whitespace
465 if line[pos] == ' ':
466 column += 1
467 elif line[pos] == '\t':
468 column = (column//tabsize + 1)*tabsize
469 elif line[pos] == '\f':
470 column = 0
471 else:
472 break
473 pos += 1
474 if pos == max:
475 break
476
477 if line[pos] in '#\r\n': # skip comments or blank lines
478 if line[pos] == '#':
479 comment_token = line[pos:].rstrip('\r\n')
480 nl_pos = pos + len(comment_token)
481 yield TokenInfo(COMMENT, comment_token,
482 (lnum, pos), (lnum, pos + len(comment_token)), line)
483 yield TokenInfo(NEWLINE, line[nl_pos:],
484 (lnum, nl_pos), (lnum, len(line)), line)
485 else:
486 yield TokenInfo(NEWLINE, line[pos:],
487 (lnum, pos), (lnum, len(line)), line)
488 continue
489
490 if column > indents[-1]: # count indents or dedents
491 indents.append(column)
492 yield TokenInfo(INDENT, line[:pos], (lnum, 0), (lnum, pos), line)
493 while column < indents[-1]:
494 if column not in indents:
495 raise IndentationError(
496 "unindent does not match any outer indentation level",
497 ("<tokenize>", lnum, pos, line))
498 indents = indents[:-1]
499 yield TokenInfo(DEDENT, '', (lnum, pos), (lnum, pos), line)
500
501 else: # continued statement
502 if not line:
503 raise TokenError("EOF in multi-line statement", (lnum, 0))
504 continued = 0
505
506 while pos < max:
507 pseudomatch = pseudoprog.match(line, pos)
508 if pseudomatch: # scan for tokens
509 start, end = pseudomatch.span(1)
510 spos, epos, pos = (lnum, start), (lnum, end), end
511 token, initial = line[start:end], line[start]
512
513 if (initial in numchars or # ordinary number
514 (initial == '.' and token != '.' and token != '...')):
515 yield TokenInfo(NUMBER, token, spos, epos, line)
516 elif initial in '\r\n':
517 yield TokenInfo(NL if parenlev > 0 else NEWLINE,
518 token, spos, epos, line)
519 elif initial == '#':
520 assert not token.endswith("\n")
521 yield TokenInfo(COMMENT, token, spos, epos, line)
522 elif token in triple_quoted:
523 endprog = endprogs[token]
524 endmatch = endprog.match(line, pos)
525 if endmatch: # all on one line
526 pos = endmatch.end(0)
527 token = line[start:pos]
528 yield TokenInfo(STRING, token, spos, (lnum, pos), line)
529 else:
530 strstart = (lnum, start) # multiple lines
531 contstr = line[start:]
532 contline = line
533 break
534 elif initial in single_quoted or \
535 token[:2] in single_quoted or \
536 token[:3] in single_quoted:
537 if token[-1] == '\n': # continued string
538 strstart = (lnum, start)
539 endprog = (endprogs[initial] or endprogs[token[1]] or
540 endprogs[token[2]])
541 contstr, needcont = line[start:], 1
542 contline = line
543 break
544 else: # ordinary string
545 yield TokenInfo(STRING, token, spos, epos, line)
546 elif initial.isidentifier(): # ordinary name
547 yield TokenInfo(NAME, token, spos, epos, line)
548 elif initial == '\\': # continued stmt
549 continued = 1
550 else:
551 if initial in '([{':
552 parenlev += 1
553 elif initial in ')]}':
554 parenlev -= 1
555 yield TokenInfo(OP, token, spos, epos, line)
556 else:
557 yield TokenInfo(ERRORTOKEN, line[pos],
558 (lnum, pos), (lnum, pos+1), line)
559 pos += 1
560
561 for indent in indents[1:]: # pop remaining indent levels
562 yield TokenInfo(DEDENT, '', (lnum, 0), (lnum, 0), '')
563 yield TokenInfo(ENDMARKER, '', (lnum, 0), (lnum, 0), '')
564
565
566 # An undocumented, backwards compatible, API for all the places in the standard
567 # library that expect to be able to use tokenize with strings
568 def generate_tokens(readline):
569 return _tokenize(readline, None)
570
571 if __name__ == "__main__":
572 # Quick sanity check
573 s = b'''def parseline(self, line):
574 """Parse the line into a command name and a string containing
575 the arguments. Returns a tuple containing (command, args, line).
576 'command' and 'args' may be None if the line couldn't be parsed.
577 """
578 line = line.strip()
579 if not line:
580 return None, None, line
581 elif line[0] == '?':
582 line = 'help ' + line[1:]
583 elif line[0] == '!':
584 if hasattr(self, 'do_shell'):
585 line = 'shell ' + line[1:]
8 586 else:
9 from ._tokenize_py2 import *
587 return None, None, line
588 i, n = 0, len(line)
589 while i < n and line[i] in self.identchars: i = i+1
590 cmd, arg = line[:i], line[i:].strip()
591 return cmd, arg, line
592 '''
593 for tok in tokenize(iter(s.splitlines()).__next__):
594 print(tok)
@@ -3,7 +3,6 b''
3 3 # Copyright (c) IPython Development Team.
4 4 # Distributed under the terms of the Modified BSD License.
5 5
6 from __future__ import absolute_import, print_function
7 6
8 7 from collections import namedtuple
9 8 from io import StringIO
@@ -1,4 +1,3 b''
1 from __future__ import absolute_import
2 1
3 2 from warnings import warn
4 3
@@ -17,7 +17,6 b' NOTE: this is a modified version of a script originally shipped with the'
17 17 PyMVPA project, which we've adapted for NIPY use. PyMVPA is an MIT-licensed
18 18 project."""
19 19
20 from __future__ import print_function
21 20
22 21 # Stdlib imports
23 22 import ast
@@ -8,7 +8,6 b' embedding which you can cut and paste in your code once you understand how'
8 8 things work.
9 9
10 10 The code in this file is deliberately extra-verbose, meant for learning."""
11 from __future__ import print_function
12 11
13 12 # The basics to get you going:
14 13
@@ -8,7 +8,6 b' resuming execution later.'
8 8
9 9 This is a unicode test, åäö
10 10 """
11 from __future__ import print_function
12 11
13 12 print('Hello, welcome to an interactive IPython demo.')
14 13 print('Executing this block should require confirmation before proceeding,')
@@ -5,7 +5,6 b' http://docs.python.org/2/distutils/builtdist.html#the-postinstallation-script'
5 5
6 6 """
7 7
8 from __future__ import print_function
9 8
10 9 import os
11 10 import sys
@@ -41,8 +41,6 b' See IPython `README.rst` file for more information:'
41 41 print(error, file=sys.stderr)
42 42 sys.exit(1)
43 43
44 PY3 = (sys.version_info[0] >= 3)
45
46 44 # At least we're on the python version we need, move on.
47 45
48 46 #-------------------------------------------------------------------------------
@@ -12,7 +12,6 b' This includes:'
12 12 # Copyright (c) IPython Development Team.
13 13 # Distributed under the terms of the Modified BSD License.
14 14
15 from __future__ import print_function
16 15
17 16 import re
18 17 import os
@@ -26,7 +26,6 b' of that repo.'
26 26
27 27 """
28 28
29 from __future__ import print_function
30 29
31 30 import os
32 31 import re
@@ -8,7 +8,6 b' Usage:'
8 8 It prints summaries and if chosen, line-by-line info of where \\t or \\r
9 9 characters can be found in our source tree.
10 10 """
11 from __future__ import print_function
12 11
13 12 # Config
14 13 # If true, all lines that have tabs are printed, with line number
@@ -9,7 +9,6 b''
9 9 #
10 10 # The original mapping of latex symbols to unicode comes from the `latex_symbols.jl` files from Julia.
11 11
12 from __future__ import print_function
13 12 import os, sys
14 13
15 14 if not sys.version_info[0] == 3:
@@ -1,5 +1,4 b''
1 1 """Functions for Github API requests."""
2 from __future__ import print_function
3 2
4 3 try:
5 4 input = raw_input
@@ -7,7 +7,6 b' Usage:'
7 7 Type `git mpr -h` for details.
8 8 """
9 9
10 from __future__ import print_function
11 10
12 11 import io, os
13 12 import argparse
@@ -9,7 +9,6 b' To generate a report for IPython 2.0, run:'
9 9 # Imports
10 10 #-----------------------------------------------------------------------------
11 11
12 from __future__ import print_function
13 12
14 13 import codecs
15 14 import sys
@@ -114,9 +113,6 b' if __name__ == "__main__":'
114 113 print("DEPRECATE: backport_pr.py is deprecated and is is now recommended"
115 114 "to install `ghpro` from PyPI.", file=sys.stderr)
116 115
117 # deal with unicode
118 if sys.version_info < (3,):
119 sys.stdout = codecs.getwriter('utf8')(sys.stdout)
120 116
121 117 # Whether to add reST urls for all issues in printout.
122 118 show_urls = True
@@ -7,7 +7,6 b' Python, and posts the results to Gist if any tests fail.'
7 7 Usage:
8 8 python test_pr.py 1657
9 9 """
10 from __future__ import print_function
11 10
12 11 import errno
13 12 from glob import glob
@@ -1,6 +1,6 b''
1 1 """This tests that future compiler flags are passed to the embedded IPython."""
2 2 from IPython import embed
3 3 import __future__
4 embed(banner1='', header='check 1/2 == 0 in Python 2')
5 embed(banner1='', header='check 1/2 == 0.5 in Python 2',
6 compile_flags=__future__.division.compiler_flag)
4 embed(banner1='', header='check 1 <> 2 cause SyntaxError')
5 embed(banner1='', header='check 1 <> 2 == True',
6 compile_flags=__future__.barry_as_FLUFL.compiler_flag)
@@ -1,6 +1,5 b''
1 1 """Various utilities common to IPython release and maintenance tools.
2 2 """
3 from __future__ import print_function
4 3
5 4 # Library imports
6 5 import os
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (595 lines changed) Show them Hide them
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now