##// END OF EJS Templates
Fix inconsistencies in parallel direct interface doc...
Fix inconsistencies in parallel direct interface doc Running through the entire page would produce errors, as different variable names were used, or, in the case of the %px a=b example, not throw an exception because a and b actually were defined in an earlier example. The following fixes allow one to follow through the entire page and experience the expected behaviors

File last commit:

r13353:0ca701d5
r14631:b45c402d
Show More
ulinecache.py
45 lines | 1.6 KiB | text/x-python | PythonLexer
"""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
import sys
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."""
filename = py3compat.cast_bytes(filename, sys.getfilesystemencoding())
lines = linecache.getlines(filename, module_globals=module_globals)
# The bits we cache ourselves can be unicode.
if (not lines) or isinstance(lines[0], py3compat.unicode_type):
return lines
readline = openpy._list_readline(lines)
try:
encoding, _ = openpy.detect_encoding(readline)
except SyntaxError:
encoding = 'ascii'
return [l.decode(encoding, 'replace') for l in lines]
# 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 ''