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")
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'))
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'))
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"))
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
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