Skip to content

Commit

Permalink
Fix bug with changing f._current_pos when call `f.readline() (#182)
Browse files Browse the repository at this point in the history
  • Loading branch information
inksink authored and menshikh-iv committed Apr 4, 2018
1 parent fd227d5 commit 6d7e2af
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
6 changes: 2 additions & 4 deletions smart_open/s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,10 @@ def readline(self, limit=-1):
#
if self._line_terminator in self._buffer:
next_newline = self._buffer.index(self._line_terminator)
the_line.write(self._buffer[:next_newline + 1])
self._buffer = self._buffer[next_newline + 1:]
the_line.write(self._read_from_buffer(next_newline + 1))
break
else:
the_line.write(self._buffer)
self._buffer = b''
the_line.write(self._read_from_buffer(len(self._buffer)))
self._fill_buffer(self._buffer_size)
return the_line.getvalue()

Expand Down
7 changes: 6 additions & 1 deletion smart_open/tests/test_s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,13 @@ def test_readline(self):
content = b'englishman\nin\nnew\nyork\n'
create_bucket_and_key(contents=content)

with smart_open.s3.BufferedInputBase(BUCKET_NAME, KEY_NAME) as fin:
with smart_open.s3.SeekableBufferedInputBase(BUCKET_NAME, KEY_NAME) as fin:
fin.readline()
self.assertEqual(fin.tell(), content.index(b'\n')+1)

fin.seek(0)
actual = list(fin)
self.assertEqual(fin.tell(), len(content))

expected = [b'englishman\n', b'in\n', b'new\n', b'york\n']
self.assertEqual(expected, actual)
Expand Down

0 comments on commit 6d7e2af

Please sign in to comment.