From 3b5690614c1794f5c53e6d3893ac027e0b79a429 Mon Sep 17 00:00:00 2001 From: Kay Kurokawa <kay@lbry.io> Date: Wed, 27 Sep 2017 17:00:21 -0400 Subject: [PATCH] Return HashBlobReader instead of file handle in open_for_reading() --- lbrynet/blob/blob_file.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lbrynet/blob/blob_file.py b/lbrynet/blob/blob_file.py index 56e3a4ed6..a1095d528 100644 --- a/lbrynet/blob/blob_file.py +++ b/lbrynet/blob/blob_file.py @@ -75,19 +75,17 @@ class BlobFile(object): """ open blob for reading - returns a file handle that can be read() from. - once finished with the file handle, user must call close_read_handle() - otherwise blob cannot be deleted. + returns a file like object that can be read() from, and closed() when + finished """ if self._verified is True: - file_handle = None try: - file_handle = open(self.file_path, 'rb') + reader = HashBlobReader(self.file_path, self.reader_finished) self.readers += 1 - return file_handle + return reader except IOError: log.exception('Failed to open %s', self.file_path) - self.close_read_handle(file_handle) + reader.close() return None def delete(self): @@ -164,6 +162,10 @@ class BlobFile(object): d = defer.fail(IOError("Could not read the blob")) return d + def reader_finished(self, reader): + self.readers -= 1 + return defer.succeed(True) + def writer_finished(self, writer, err=None): def fire_finished_deferred(): self._verified = True