예제 #1
0
    def test_binarydataspec(self):
        from mutagen.id3 import BinaryDataSpec

        s = BinaryDataSpec("name")
        self.assertEquals(("abcdefg", ""), s.read(None, "abcdefg"))
        self.assertEquals("None", s.write(None, None))
        self.assertEquals("43", s.write(None, 43))
예제 #2
0
 def test_binarydataspec(self):
     from mutagen.id3 import BinaryDataSpec
     s = BinaryDataSpec('name')
     self.assertEqual(s.validate(None, None), None)
     self.assertEqual(s.validate(None, b"abc"), b"abc")
     if PY3:
         self.assertRaises(TypeError, s.validate, None, "abc")
     else:
         self.assertEqual(s.validate(None, u"abc"), b"abc")
         self.assertRaises(ValueError, s.validate, None, u"\xf6\xe4\xfc")
예제 #3
0
 def test_binarydataspec(self):
     from mutagen.id3 import BinaryDataSpec
     s = BinaryDataSpec('name')
     self.assertEquals((b'abcdefg', b''), s.read(None, b'abcdefg'))
     self.assertEquals(b'', s.write(None, None))
     self.assertEquals(b'43', s.write(None, 43))
     self.assertEquals(b'abc', s.write(None, b'abc'))
예제 #4
0
class CTOC(Frame):
    """
    The table of contents frame specified in
    http://www.id3.org/id3v2-chapters-1.0
    """
    _framespec = [StringSpec('element_id', 8), BinaryDataSpec('flags')]

    def __init__(self,
                 element_id,
                 has_parent,
                 ordered,
                 child_element_ids,
                 embeded_frames=[]):
        self.has_parent = has_parent
        self.ordered = ordered
        self.child_element_ids = child_element_ids
        flags = []
        for i in (self.has_parent, self.ordered):
            if i:
                flags.append('1')
            else:
                flags.append('0')
        flags = int(''.join(flags))
        flags = pack('>H', flags)
        self.embeded_frames = embeded_frames
        super(CTOC, self).__init__(element_id, flags)

    def _writeData(self):
        def save_frame(frame):
            #Copied from mutagen.id3.ID3
            flags = 0
            framedata = frame._writeData()
            datasize = BitPaddedInt.to_str(len(framedata), width=4)
            header = pack('>4s4sH', type(frame).__name__, datasize, flags)
            return header + framedata

        data = super(CTOC, self)._writeData()
        for frame in self.embeded_frames:
            frame = save_frame(frame)
            data += frame
        return data