Add V2 storage methods to Swift storage engine

Fixes #508
This commit is contained in:
Joseph Schorr 2015-09-25 14:57:14 -04:00
parent 7bb15d8f19
commit 6c59161527
2 changed files with 112 additions and 3 deletions

View file

@ -82,6 +82,27 @@ class FilelikeStreamConcat(BaseStreamFilelike):
return self.read(size)
class LimitingStream(BaseStreamFilelike):
def __init__(self, fileobj, read_limit=READ_UNTIL_END):
super(LimitingStream, self).__init__(fileobj)
self._read_limit = read_limit
self.byte_count_read = 0
def read(self, size=READ_UNTIL_END):
max_bytes_to_read = -1
# If a read limit is specified, then determine the maximum number of bytes to return.
if self._read_limit != READ_UNTIL_END:
if size == READ_UNTIL_END:
size = self._read_limit
max_bytes_to_read = min(self._read_limit - self.byte_count_read, size)
byte_data_read = super(LimitingStream, self).read(max_bytes_to_read)
self.byte_count_read = self.byte_count_read + len(byte_data_read)
return byte_data_read
class StreamSlice(BaseStreamFilelike):
def __init__(self, fileobj, start_offset=0, end_offset_exclusive=READ_UNTIL_END):
super(StreamSlice, self).__init__(fileobj)