##// END OF EJS Templates
Merge pull request #3323 from takluyver/strip-prompts...
Merge pull request #3323 from takluyver/strip-prompts Strip prompts even if the prompt isn't present on the first line. Users (including me) often copy and paste examples from just after the first prompt. This checks for prompts in the first two lines of a block, but if they aren't found there, it will ignore prompt-like prefixes in later lines, to minimise interference with multi-line strings etc. This fixes both incoming copies (transformed before running code) and outgoing (copied from the Qt console). Closes #3206

File last commit:

r8335:50c631dd
r10679:689d7bfc merge
Show More
ulinecache.py
45 lines | 1.6 KiB | text/x-python | PythonLexer
Thomas Kluyver
Fix getting unicode lines in IPython.core.debugger.
r8324 """Wrapper around linecache which decodes files to unicode according to PEP 263.
This is only needed for Python 2 - linecache in Python 3 does the same thing
itself.
"""
import functools
import linecache
Jörgen Stenarson
Convert filename to bytes in getlines....
r8335 import sys
Thomas Kluyver
Fix getting unicode lines in IPython.core.debugger.
r8324
from IPython.utils import py3compat
from IPython.utils import openpy
if py3compat.PY3:
getline = linecache.getline
# getlines has to be looked up at runtime, because doctests monkeypatch it.
@functools.wraps(linecache.getlines)
def getlines(filename, module_globals=None):
return linecache.getlines(filename, module_globals=module_globals)
else:
def getlines(filename, module_globals=None):
"""Get the lines (as unicode) for a file from the cache.
Update the cache if it doesn't contain an entry for this file already."""
Jörgen Stenarson
Convert filename to bytes in getlines....
r8335 filename = py3compat.cast_bytes(filename, sys.getfilesystemencoding())
Thomas Kluyver
Fixes for producing unicode tracebacks.
r8325 lines = linecache.getlines(filename, module_globals=module_globals)
# The bits we cache ourselves can be unicode.
if (not lines) or isinstance(lines[0], unicode):
return lines
readline = openpy._list_readline(lines)
Thomas Kluyver
Fix getting unicode lines in IPython.core.debugger.
r8324 try:
encoding, _ = openpy.detect_encoding(readline)
except SyntaxError:
encoding = 'ascii'
Thomas Kluyver
Fixes for producing unicode tracebacks.
r8325 return [l.decode(encoding, 'replace') for l in lines]
Thomas Kluyver
Fix getting unicode lines in IPython.core.debugger.
r8324
# This is a straight copy of linecache.getline
def getline(filename, lineno, module_globals=None):
lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno-1]
else:
return ''