7852: Bugfix _filepos tracking in PySDK readline method.
authorBrett Smith <brett@curoverse.com>
Thu, 17 Mar 2016 22:03:21 +0000 (18:03 -0400)
committerBrett Smith <brett@curoverse.com>
Fri, 18 Mar 2016 15:30:42 +0000 (11:30 -0400)
Make sure self._filepos is always in the right position to return
uncached data before another read method could be called, to avoid
inconsistent results when interleaving those calls with readline
calls.

sdk/python/arvados/arvfile.py

index 71af6445a5ec508f1953777871a345c2d3e03ca1..b78c63e301b81d5ddb2644983e2e83017e98bbdf 100644 (file)
@@ -108,6 +108,7 @@ class ArvadosFileReaderBase(_FileLikeObjectBase):
         cache_pos, cache_data = self._readline_cache
         if self.tell() == cache_pos:
             data = [cache_data]
+            self._filepos += len(cache_data)
         else:
             data = ['']
         data_size = len(data[-1])
@@ -123,6 +124,7 @@ class ArvadosFileReaderBase(_FileLikeObjectBase):
         except ValueError:
             nextline_index = len(data)
         nextline_index = min(nextline_index, size)
+        self._filepos -= len(data) - nextline_index
         self._readline_cache = (self.tell(), data[nextline_index:])
         return data[:nextline_index]