def data_generator(self, first_block_of_data, first_block_is_entire_file=False): if len(first_block_of_data) < 128: return [] if classify_header(first_block_of_data[:3]) is None: return [] return [ reader_from_file_like_object_accepting_function( self._mp3_data_processor), reader_from_trailing_block_accepting_function( self._id3v1tagreader, 128) ]
def read_per_chunk(self, testdata, input_chunk_size, request_sizes): total = sum(request_sizes) if total > len(testdata): raise ValueError("Total {0} exceeds {1}".format( total, len(testdata))) elif total < len(testdata): request_sizes.append(len(testdata) - total) called = [False] def read_all(stream): accumulated = [] for request_size in request_sizes: self.assertFalse(stream.closed) data = stream.read(request_size) self.assertEqual( request_size, len(data), "Failure after {0} of {1} bytes".format( len(''.join(accumulated)), len(testdata))) accumulated.append(data) data = stream.read(1) self.assertEqual('', data) self.assertTrue(stream.closed) called[0] = True self.assertEqual(testdata, ''.join(accumulated)) reader = reader_from_file_like_object_accepting_function(read_all) input_chunks = [ testdata[start:start + input_chunk_size] for start in range(0, len(testdata), input_chunk_size) ] for d in input_chunks: self.assertTrue(reader(d)) self.assertFalse(reader('')) self.assertTrue(called[0])
def test_read_all(self): called = [False] def read_all(stream): data = stream.read(100000) self.assertEqual(testdata, data) self.assertTrue(stream.closed) called[0] = True reader = reader_from_file_like_object_accepting_function(read_all) input_chunks = [ testdata[start:start + 30] for start in range(0, len(testdata), 30) ] for d in input_chunks: self.assertTrue(reader(d)) self.assertFalse(reader('')) self.assertTrue(called[0])