Skip to content

Commit ca19943

Browse files
committed
If size is specified, try to read at least size characters.
This is a alternative version of patch #1379332.
1 parent f8d7671 commit ca19943

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

Lib/codecs.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,10 @@ def read(self, size=-1, chars=-1, firstline=False):
274274
while True:
275275
# can the request can be satisfied from the character buffer?
276276
if chars < 0:
277-
if self.charbuffer:
277+
if size < 0:
278+
if self.charbuffer:
279+
break
280+
elif len(self.charbuffer) >= size:
278281
break
279282
else:
280283
if len(self.charbuffer) >= chars:

Lib/test/test_codecs.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,23 @@ def getreader(input):
4646
stream = StringIO.StringIO(input.encode(self.encoding))
4747
return codecs.getreader(self.encoding)(stream)
4848

49-
def readalllines(input, keepends=True):
49+
def readalllines(input, keepends=True, size=None):
5050
reader = getreader(input)
5151
lines = []
5252
while True:
53-
line = reader.readline(keepends=keepends)
53+
line = reader.readline(size=size, keepends=keepends)
5454
if not line:
5555
break
5656
lines.append(line)
57-
return "".join(lines)
57+
return "|".join(lines)
5858

5959
s = u"foo\nbar\r\nbaz\rspam\u2028eggs"
60-
self.assertEqual(readalllines(s, True), s)
61-
self.assertEqual(readalllines(s, False), u"foobarbazspameggs")
60+
sexpected = u"foo\n|bar\r\n|baz\r|spam\u2028|eggs"
61+
sexpectednoends = u"foo|bar|baz|spam|eggs"
62+
self.assertEqual(readalllines(s, True), sexpected)
63+
self.assertEqual(readalllines(s, False), sexpectednoends)
64+
self.assertEqual(readalllines(s, True, 10), sexpected)
65+
self.assertEqual(readalllines(s, False, 10), sexpectednoends)
6266

6367
# Test long lines (multiple calls to read() in readline())
6468
vw = []

0 commit comments

Comments
 (0)