Exemplo n.º 1
0
 def test_make_v1_from_tyer(self):
     self.assertEquals(
         MakeID3v1({"TDRC": TDRC(text="2010-10-10")}),
         MakeID3v1({"TYER": TYER(text="2010")}))
     self.assertEquals(
         ParseID3v1(MakeID3v1({"TDRC": TDRC(text="2010-10-10")})),
         ParseID3v1(MakeID3v1({"TYER": TYER(text="2010")})))
Exemplo n.º 2
0
 def test_v1_not_v11(self):
     self.id3["TRCK"] = TRCK(encoding=0, text="32")
     tag = MakeID3v1(self.id3)
     self.failUnless(32, ParseID3v1(tag)["TRCK"])
     del (self.id3["TRCK"])
     tag = MakeID3v1(self.id3)
     tag = tag[:125] + b'  ' + tag[-1:]
     self.failIf("TRCK" in ParseID3v1(tag))
Exemplo n.º 3
0
 def test_nulls(self):
     s = u'TAG%(title)30s%(artist)30s%(album)30s%(year)4s%(cmt)29s\x03\x01'
     s = s % dict(artist=u'abcd\00fg', title=u'hijklmn\x00p',
                  album=u'qrst\x00v', cmt=u'wxyz', year=u'1224')
     tags = ParseID3v1(s.encode("ascii"))
     self.assertEquals(b'abcd'.decode('latin1'), tags['TPE1'])
     self.assertEquals(b'hijklmn'.decode('latin1'), tags['TIT2'])
     self.assertEquals(b'qrst'.decode('latin1'), tags['TALB'])
Exemplo n.º 4
0
    def test_remove_v1(self):
        from mutagen.id3 import ParseID3v1
        res, out = self.call("--remove-v1", self.filename)

        with open(self.filename, "rb") as h:
            h.seek(-128, 2)
            data = h.read()
            self.failUnlessEqual(len(data), 128)
            self.failIf(ParseID3v1(data))
Exemplo n.º 5
0
    def test_include_id3v1(self):
        self.call(fsn(u'--write-v1'), self.filename, self.blank_file)

        with open(self.blank_file, 'rb') as fileobj:
            fileobj.seek(-128, 2)
            frames = ParseID3v1(fileobj.read(128))

        # If ID3v1 frames are present, assume they've been written correctly by
        # mutagen, so no need to check them
        self.failUnless(frames)
Exemplo n.º 6
0
def id3v1_values(fn):
    close_file = isinstance(fn, basestring)
    fileobj = open(fn, 'rb') if close_file else fn

    fileobj.seek(-128, 2)
    frames = ParseID3v1(fileobj.read(128))
    if close_file:
        fileobj.close()
    if frames:
        return convert_id3_frames(frames)
Exemplo n.º 7
0
 def test_missing_year(self):
     tag = ParseID3v1(
         b'ABCTAGhello world\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x00\xff')
     self.failUnlessEqual(tag["TIT2"], "hello world")
Exemplo n.º 8
0
 def test_nonascii(self):
     s = u'TAG%(title)30s%(artist)30s%(album)30s%(year)4s%(cmt)29s\x03\x01'
     s = s % dict(artist=u'abcd\xe9fg', title=u'hijklmn\xf3p',
                  album=u'qrst\xfcv', cmt=u'wxyz', year=u'1234')
     tags = ParseID3v1(s.encode("latin-1"))
     self.assertEquals(b'abcd\xe9fg'.decode('latin1'), tags['TPE1'])
     self.assertEquals(b'hijklmn\xf3p'.decode('latin1'), tags['TIT2'])
     self.assertEquals(b'qrst\xfcv'.decode('latin1'), tags['TALB'])
     self.assertEquals('wxyz', tags['COMM'])
     self.assertEquals("3", tags['TRCK'])
     self.assertEquals("1234", tags['TDRC'])
    def test_include_id3v1(self):
        fd, blank_file = mkstemp(suffix='.mp3')
        os.close(fd)

        self.call('--write-v1', self.filename, blank_file)

        fileobj = open(blank_file, 'rb')
        fileobj.seek(-128, 2)
        frames = ParseID3v1(fileobj.read(128))

        # If ID3v1 frames are present, assume they've been written correctly by
        # mutagen, so no need to check them
        self.failUnless(frames)
Exemplo n.º 10
0
    def test_short_year(self):
        data = (
            b'XTAGhello world\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x001\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x00\xff')
        tag = ParseID3v1(data)
        self.failUnlessEqual(tag["TIT2"], "hello world")
        self.failUnlessEqual(tag["TDRC"], "0001")

        frames, offset = find_id3v1(cBytesIO(data))
        self.assertEqual(offset, -125)
        self.assertEqual(frames, tag)
Exemplo n.º 11
0
class ID3File(ID3):
    def load(self, fp, known_frames=None, translate=True):
        self.filename = fp.name
        self.__known_frames = known_frames
        self.__fileobj = fp
        try:
            self.__filesize = fp.size
        except AttributeError:
            self.__filesize = len(fp.read())
            fp.seek(0)

        # grumble grumble
        self.__load_header = self._ID3__load_header
        self.__fullread = self._ID3__fullread
        self.__read_frames = self._ID3__read_frames
        self._ID3__known_frames = self.__known_frames
        self._ID3__fileobj = self.__fileobj
        self._ID3__filesize = self.__filesize

        try:
            try:
                self.__load_header()
            except EOFError:
                self.size = 0
                raise ID3NoHeaderError("%s: too small (%d bytes)" %(
                    filename, self.__filesize))
            except (ID3NoHeaderError, ID3UnsupportedVersionError), err:
                self.size = 0
                import sys
                stack = sys.exc_info()[2]
                try: self.__fileobj.seek(-128, 2)
                except EnvironmentError: raise err, None, stack
                else:
                    frames = ParseID3v1(self.__fileobj.read(128))
                    if frames is not None:
                        self.version = (1, 1)
                        map(self.add, frames.values())
                    else: raise err, None, stack
Exemplo n.º 12
0
 def test_short(self):
     s = MakeID3v1(dict(TDRC="1"))
     self.failUnlessEqual(len(s), 128)
     tag = ParseID3v1(s)
     self.failUnlessEqual(tag["TDRC"], "0001")
Exemplo n.º 13
0
 def test_v1_genre(self):
     tag = {}
     tag["TCON"] = TCON(encoding=0, text="Pop")
     v1tag = MakeID3v1(tag)
     self.failUnlessEqual(ParseID3v1(v1tag)["TCON"].genres, ["Pop"])
Exemplo n.º 14
0
 def test_invalid_track(self):
     tag = {}
     tag["TRCK"] = TRCK(encoding=0, text="not a number")
     v1tag = MakeID3v1(tag)
     self.failIf("TRCK" in ParseID3v1(v1tag))
Exemplo n.º 15
0
 def test_invalid(self):
     self.failUnless(ParseID3v1(b"") is None)
Exemplo n.º 16
0
 def test_roundtrip(self):
     frames = {}
     for key in ["TIT2", "TALB", "TPE1", "TDRC"]:
         frames[key] = self.id3[key]
     self.assertEquals(ParseID3v1(MakeID3v1(frames)), frames)
Exemplo n.º 17
0
 def test_long(self):
     s = MakeID3v1(dict(TDRC="123456789"))
     self.failUnlessEqual(len(s), 128)
     tag = ParseID3v1(s)
     self.failUnlessEqual(tag["TDRC"], "1234")
Exemplo n.º 18
0
 def test_empty(self):
     s = MakeID3v1(dict(TDRC=""))
     self.failUnlessEqual(len(s), 128)
     tag = ParseID3v1(s)
     self.failIf("TDRC" in tag)
Exemplo n.º 19
0
 def test_none(self):
     s = MakeID3v1(dict())
     self.failUnlessEqual(len(s), 128)
     tag = ParseID3v1(s)
     self.failIf("TDRC" in tag)