Example #1
0
    def test_stringspec(self):
        from mutagen.id3 import StringSpec
        s = StringSpec('byte', 3)
        self.assertEqual(s.validate(None, None), None)
        self.assertEqual(s.validate(None, "ABC"), "ABC")
        self.assertEqual(s.validate(None, u"ABC"), u"ABC")
        self.assertRaises(ValueError, s.validate, None, "abc2")
        self.assertRaises(ValueError, s.validate, None, "ab")

        if PY3:
            self.assertRaises(TypeError, s.validate, None, b"ABC")
            self.assertRaises(ValueError, s.validate, None, u"\xf6\xe4\xfc")
Example #2
0
 def test_stringspec(self):
     from mutagen.id3 import StringSpec
     s = StringSpec('name', 3)
     self.assertEquals(('abc', b'defg'), s.read(None, b'abcdefg'))
     self.assertEquals(b'abc', s.write(None, 'abcdefg'))
     self.assertEquals(b'\x00\x00\x00', s.write(None, None))
     self.assertEquals(b'\x00\x00\x00', s.write(None, '\x00'))
     self.assertEquals(b'a\x00\x00', s.write(None, 'a'))
Example #3
0
 def test_StringSpec(self):
     from mutagen.id3 import StringSpec
     s = StringSpec('name', 3)
     self.assertEquals(('abc', b'defg'),  s.read(None, b'abcdefg'))
     self.assertEquals(b'abc', s.write(None, 'abcdefg'))
     self.assertEquals(b'\x00\x00\x00', s.write(None, None))
     self.assertEquals(b'\x00\x00\x00', s.write(None, '\x00'))
     self.assertEquals(b'a\x00\x00', s.write(None, 'a'))
Example #4
0
    def test_stringspec(self):
        from mutagen.id3 import StringSpec

        s = StringSpec("name", 3)
        self.assertEquals(("abc", "defg"), s.read(None, "abcdefg"))
        self.assertEquals("abc", s.write(None, "abcdefg"))
        self.assertEquals("\x00\x00\x00", s.write(None, None))
        self.assertEquals("\x00\x00\x00", s.write(None, "\x00"))
        self.assertEquals("a\x00\x00", s.write(None, "a"))
Example #5
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
Example #6
0
class CHAP(Frame):
    """
    The chapter frame specified in http://www.id3.org/id3v2-chapters-1.0
    """
    _framespec = [
        StringSpec('element_id', 8),
        IntegerSpec('start'),
        IntegerSpec('stop'),
        IntegerSpec('start_offset'),
        IntegerSpec('stop_offset')
    ]

    def __init__(self,
                 element_id,
                 start,
                 stop,
                 start_offset=0xffffffff,
                 stop_offset=0xffffffff,
                 embeded_frames=[]):
        super(CHAP, self).__init__(element_id=element_id,
                                   start=start,
                                   stop=stop,
                                   start_offset=0xffffffff,
                                   stop_offset=0xffffffff)
        self.embeded_frames = embeded_frames

    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(CHAP, self)._writeData()
        for frame in self.embeded_frames:
            frame = save_frame(frame)
            data += frame
        return data