def get_header(self, filename=None): f = self.fileobj f.seek(0) # Ensure we've got padding at the end, and only at the end. # If adding makes it too large, we'll scale it down later. self.metadata_blocks.append(Padding("\x00" * 1020)) MetadataBlock.group_padding(self.metadata_blocks) header = self.__check_header(f) # "fLaC" and maybe ID3 available = self.__find_audio_offset(f) - header data = MetadataBlock.writeblocks(self.metadata_blocks) if len(data) > available: # If we have too much data, see if we can reduce padding. padding = self.metadata_blocks[-1] newlength = padding.length - (len(data) - available) if newlength > 0: padding.length = newlength data = MetadataBlock.writeblocks(self.metadata_blocks) assert len(data) == available elif len(data) < available: # If we have too little data, increase padding. self.metadata_blocks[-1].length += available - len(data) data = MetadataBlock.writeblocks(self.metadata_blocks) assert len(data) == available self.__offset = len("fLaC" + data) return "fLaC" + data
def get_header(self, filename=None): f = self.fileobj f.seek(0) # Ensure we've got padding at the end, and only at the end. # If adding makes it too large, we'll scale it down later. self.metadata_blocks.append(Padding('\x00' * 1020)) MetadataBlock.group_padding(self.metadata_blocks) header = self.__check_header(f) # "fLaC" and maybe ID3 available = self.__find_audio_offset(f) - header data = MetadataBlock.writeblocks(self.metadata_blocks) if len(data) > available: # If we have too much data, see if we can reduce padding. padding = self.metadata_blocks[-1] newlength = padding.length - (len(data) - available) if newlength > 0: padding.length = newlength data = MetadataBlock.writeblocks(self.metadata_blocks) assert len(data) == available elif len(data) < available: # If we have too little data, increase padding. self.metadata_blocks[-1].length += (available - len(data)) data = MetadataBlock.writeblocks(self.metadata_blocks) assert len(data) == available self.__offset = len("fLaC" + data) return("fLaC" + data)
def test_group_padding(self): blocks = [Padding("\x00" * 20), Padding("\x00" * 30), MetadataBlock("foobar")] blocks[-1].code = 0 length1 = len(MetadataBlock.writeblocks(blocks)) MetadataBlock.group_padding(blocks) length2 = len(MetadataBlock.writeblocks(blocks)) self.failUnlessEqual(length1, length2) self.failUnlessEqual(len(blocks), 2)
def test_group_padding(self): blocks = [Padding(b"\x00" * 20), Padding(b"\x00" * 30), MetadataBlock(b"foobar")] blocks[-1].code = 0 length1 = len(MetadataBlock.writeblocks(blocks)) MetadataBlock.group_padding(blocks) length2 = len(MetadataBlock.writeblocks(blocks)) self.failUnlessEqual(length1, length2) self.failUnlessEqual(len(blocks), 2)
def test_writeblocks(self): blocks = [Padding("\x00" * 20), Padding("\x00" * 30)] self.failUnlessEqual(len(MetadataBlock.writeblocks(blocks)), 58)
def test_writeblocks(self): blocks = [Padding(b"\x00" * 20), Padding(b"\x00" * 30)] self.failUnlessEqual(len(MetadataBlock.writeblocks(blocks)), 58)