diff --git a/IPython/utils/openpy.py b/IPython/utils/openpy.py index 000eff0..1c1f8af 100644 --- a/IPython/utils/openpy.py +++ b/IPython/utils/openpy.py @@ -139,7 +139,22 @@ def strip_encoding_cookie(filelike): for line in it: yield line -def read_py_file(filename, errors='replace', skip_encoding_cookie=True): +def read_py_file(filename, skip_encoding_cookie=True): + """Read a Python file, using the encoding declared inside the file. + + Parameters + ---------- + filename : str + The path to the file to read. + skip_encoding_cookie : bool + If True (the default), and the encoding declaration is found in the first + two lines, that line will be excluded from the output - compiling a + unicode string with an encoding declaration is a SyntaxError in Python 2. + + Returns + ------- + A unicode string containing the contents of the file. + """ with open(filename) as f: # the open function defined in this module. if skip_encoding_cookie: return "".join(strip_encoding_cookie(f)) @@ -147,8 +162,23 @@ def read_py_file(filename, errors='replace', skip_encoding_cookie=True): return f.read() def read_py_url(url, errors='replace', skip_encoding_cookie=True): - """Open a URL to a raw Python file, using the encoding detected by - detect_encoding(). + """Read a Python file from a URL, using the encoding declared inside the file. + + Parameters + ---------- + url : str + The URL from which to fetch the file. + errors : str + How to handle decoding errors in the file. Options are the same as for + bytes.decode(), but here 'replace' is the default. + skip_encoding_cookie : bool + If True (the default), and the encoding declaration is found in the first + two lines, that line will be excluded from the output - compiling a + unicode string with an encoding declaration is a SyntaxError in Python 2. + + Returns + ------- + A unicode string containing the contents of the file. """ response = urllib.urlopen(url) buffer = io.BytesIO(response.read())