self.errors = errors
self.bytebuffer = ""
self.charbuffer = u""
- self.atcr = False
def decode(self, input, errors='strict'):
raise NotImplementedError
# If size is given, we call read() only once
while True:
data = self.read(readsize)
- if self.atcr and data.startswith(u"\n"):
- data = data[1:]
if data:
- self.atcr = data.endswith(u"\r")
- # If we're at a "\r" (and are allowed to read more), read one
- # extra character (which might be a "\n") to get a proper
- # line ending. (If the stream is temporarily exhausted we return
- # the wrong line ending, but at least we won't generate a bogus
- # second line.)
- if self.atcr and size is None:
+ # If we're at a "\r" read one extra character (which might
+ # be a "\n") to get a proper line ending. If the stream is
+ # temporarily exhausted we return the wrong line ending.
+ if data.endswith(u"\r"):
data += self.read(size=1, chars=1)
- self.atcr = data.endswith(u"\r")
line += data
lines = line.splitlines(True)
"""
self.bytebuffer = ""
self.charbuffer = u""
- self.atcr = False
def seek(self, offset, whence=0):
""" Set the input stream's current position.
writer.write(u"foo\r")
self.assertEqual(reader.readline(keepends=False), u"foo")
writer.write(u"\nbar\r")
+ self.assertEqual(reader.readline(keepends=False), u"")
self.assertEqual(reader.readline(keepends=False), u"bar")
writer.write(u"baz")
self.assertEqual(reader.readline(keepends=False), u"baz")
writer.write(u"foo\r")
self.assertEqual(reader.readline(keepends=True), u"foo\r")
writer.write(u"\nbar\r")
+ self.assertEqual(reader.readline(keepends=True), u"\n")
self.assertEqual(reader.readline(keepends=True), u"bar\r")
writer.write(u"baz")
self.assertEqual(reader.readline(keepends=True), u"baz")
- distutils.commands.register now encodes the data as UTF-8 before posting
them to PyPI.
+- Partial fixes for SF bugs #1163244 and #1175396: If a chunk read by
+ ``codecs.StreamReader.readline()`` has a trailing "\r", read one more
+ character even if the user has passed a size parameter to get a proper
+ line ending. Remove the special handling of a "\r\n" that has been split
+ between two lines.
+
What's New in Python 2.4.1 final?
=================================