예제 #1
0
    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)
        ]
예제 #2
0
    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])
예제 #3
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])