Oops, fix read_filebytes not stopping at the range_max properly.

master
voussoir 2018-07-22 14:40:59 -07:00
parent 4c65ccaf68
commit d740e6d686
1 changed files with 8 additions and 3 deletions

View File

@ -296,24 +296,29 @@ def random_hex(length=12):
token = token[:length] token = token[:length]
return token return token
def read_filebytes(filepath, range_min=0, range_max=None, chunk_size=2 ** 20): def read_filebytes(filepath, range_min=0, range_max=None, chunk_size=bytestring.MIBIBYTE):
''' '''
Yield chunks of bytes from the file between the endpoints. Yield chunks of bytes from the file between the endpoints.
''' '''
filepath = pathclass.Path(filepath) filepath = pathclass.Path(filepath)
if range_max is None: if range_max is None:
range_max = filepath.size range_max = filepath.size
range_span = range_max - range_min range_span = (range_max + 1) - range_min
f = open(filepath.absolute_path, 'rb') f = open(filepath.absolute_path, 'rb')
f.seek(range_min)
sent_amount = 0 sent_amount = 0
with f: with f:
f.seek(range_min)
while sent_amount < range_span: while sent_amount < range_span:
chunk = f.read(chunk_size) chunk = f.read(chunk_size)
if len(chunk) == 0: if len(chunk) == 0:
break break
needed = range_span - sent_amount
if len(chunk) >= needed:
yield chunk[:needed]
break
yield chunk yield chunk
sent_amount += len(chunk) sent_amount += len(chunk)