def _header_flag_and_extra_bytes(self, int_write_type, uncompressed_size): """Returns the flag bytes (if any) along with any extra bytes those flags require.""" buf = bytes() extra_header_bytes = 0 #extra bytes added from flags #Version 2 has no header flags to parse if self.version == 3: flags = self.tag_alter_discard << 7 flags += self.file_alter_discard << 6 flags += self.read_only << 5 buf += bytes([flags,]) flags = self.compressed_flag << 7 flags += self.encrypted_flag << 6 flags += self.group_flag << 5 buf += bytes([flags,]) if self.compressed_flag: buf += int_write_type(uncompressed_size, 4) extra_header_bytes += 4 if self.encrypted_flag: buf += int_write_type(self.encryption, 1) extra_header_bytes += 1 if self.group_flag: buf += int_write_type(self.group, 1) extra_header_bytes +=1 elif self.version == 4: flags = self.tag_alter_discard << 6 flags += self.file_alter_discard << 5 flags += self.read_only << 4 buf += bytes([flags,]) flags = self.group_flag << 6 flags += self.compressed_flag << 3 flags += self.encrypted_flag << 2 flags += self.unsync_flag << 1 flags += self.data_length_flag buf += bytes([flags,]) if self.group_flag: buf += id3v2common.write_normal(self.group, 1) extra_header_bytes += 1 if self.encrypted_flag: buf += id3v2common.write_normal(self.encryption, 1) extra_header_bytes += 1 if self.data_length_flag: buf += int_write_type(len(self.data), 4) extra_header_bytes += 4 return extra_header_bytes, buf
def test_short_02_write(self): self.assertEqual(id3v2common.write_normal(511, 2), bytes([1,255]), "failed to convert an int to non-syncsafed bytes") self.assertEqual(id3v2common.write_syncsafe(511, 2), bytes([3,127]), "failed to convert an int to syncsafed bytes") self.assertRaises(ValueError, id3v2common.write_syncsafe, 511, 1)