GH-90344: replace single-call io.IncrementalNewlineDecoder usage with non-incremental newline decoders (GH-30276)
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Brett Cannon <brett@python.org>
This commit is contained in:
@@ -104,7 +104,7 @@ import sys
|
|||||||
import traceback
|
import traceback
|
||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
from io import StringIO, IncrementalNewlineDecoder
|
from io import StringIO, TextIOWrapper, BytesIO
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import _colorize # Used in doctests
|
import _colorize # Used in doctests
|
||||||
from _colorize import ANSIColors, can_colorize
|
from _colorize import ANSIColors, can_colorize
|
||||||
@@ -237,10 +237,6 @@ def _normalize_module(module, depth=2):
|
|||||||
else:
|
else:
|
||||||
raise TypeError("Expected a module, string, or None")
|
raise TypeError("Expected a module, string, or None")
|
||||||
|
|
||||||
def _newline_convert(data):
|
|
||||||
# The IO module provides a handy decoder for universal newline conversion
|
|
||||||
return IncrementalNewlineDecoder(None, True).decode(data, True)
|
|
||||||
|
|
||||||
def _load_testfile(filename, package, module_relative, encoding):
|
def _load_testfile(filename, package, module_relative, encoding):
|
||||||
if module_relative:
|
if module_relative:
|
||||||
package = _normalize_module(package, 3)
|
package = _normalize_module(package, 3)
|
||||||
@@ -252,10 +248,9 @@ def _load_testfile(filename, package, module_relative, encoding):
|
|||||||
pass
|
pass
|
||||||
if hasattr(loader, 'get_data'):
|
if hasattr(loader, 'get_data'):
|
||||||
file_contents = loader.get_data(filename)
|
file_contents = loader.get_data(filename)
|
||||||
file_contents = file_contents.decode(encoding)
|
|
||||||
# get_data() opens files as 'rb', so one must do the equivalent
|
# get_data() opens files as 'rb', so one must do the equivalent
|
||||||
# conversion as universal newlines would do.
|
# conversion as universal newlines would do.
|
||||||
return _newline_convert(file_contents), filename
|
return TextIOWrapper(BytesIO(file_contents), encoding=encoding, newline=None).read(), filename
|
||||||
with open(filename, encoding=encoding) as f:
|
with open(filename, encoding=encoding) as f:
|
||||||
return f.read(), filename
|
return f.read(), filename
|
||||||
|
|
||||||
|
|||||||
@@ -552,8 +552,7 @@ def decode_source(source_bytes):
|
|||||||
import tokenize # To avoid bootstrap issues.
|
import tokenize # To avoid bootstrap issues.
|
||||||
source_bytes_readline = _io.BytesIO(source_bytes).readline
|
source_bytes_readline = _io.BytesIO(source_bytes).readline
|
||||||
encoding = tokenize.detect_encoding(source_bytes_readline)
|
encoding = tokenize.detect_encoding(source_bytes_readline)
|
||||||
newline_decoder = _io.IncrementalNewlineDecoder(None, True)
|
return _io.TextIOWrapper(_io.BytesIO(source_bytes), encoding=encoding[0], newline=None).read()
|
||||||
return newline_decoder.decode(source_bytes.decode(encoding[0]))
|
|
||||||
|
|
||||||
|
|
||||||
# Module specifications #######################################################
|
# Module specifications #######################################################
|
||||||
|
|||||||
@@ -904,7 +904,7 @@ class SourceLoaderGetSourceTests:
|
|||||||
mock = self.SourceOnlyLoaderMock('mod.file')
|
mock = self.SourceOnlyLoaderMock('mod.file')
|
||||||
source = "x = 42\r\ny = -13\r\n"
|
source = "x = 42\r\ny = -13\r\n"
|
||||||
mock.source = source.encode('utf-8')
|
mock.source = source.encode('utf-8')
|
||||||
expect = io.IncrementalNewlineDecoder(None, True).decode(source)
|
expect = io.StringIO(source, newline=None).getvalue()
|
||||||
self.assertEqual(mock.get_source(name), expect)
|
self.assertEqual(mock.get_source(name), expect)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Replace :class:`io.IncrementalNewlineDecoder` with non incremental newline decoders in codebase where :meth:`!io.IncrementalNewlineDecoder.decode` was being called once.
|
||||||
Reference in New Issue
Block a user