Exemple #1
0
class MusicFile:
    def __init__(self, filename = None):
        self.t = Tag()
        if filename:
            self.open(filename)
    def open(self, filename):
        if not isinstance(filename, unicode):
            filename = filename.decode(detect(filename)['encoding'])
        self.t.link(filename)
        self.filename = filename
    def __getattr__(self, name):
        if name == 'album':
            return self.t.getAlbum()
        elif name == 'artist':
            return self.t.getArtist()
        elif name == 'comment':
            return self.t.getComment()
        elif name == 'comments':
            return self.t.getComments()
        elif name == 'disc':
            return self.t.getDiscNum()
        elif name == 'genre':
            return self.t.getGenre()
        elif name == 'images':
            return self.t.getImages()
        elif name == 'lyric':
            return self.t.getLyrics()[0]
        elif name == 'playcount':
            return self.t.getPlayCount()
        elif name == 'publisher':
            return self.t.getPublisher()
        elif name == 'title':
            return self.t.getTitle()
        elif name == 'track':
            return self.t.getTrackNum()
        elif name == 'ver':
            return self.t.getVersionStr()
        elif name == 'year':
            return self.t.getYear()
        else:
            raise NameError
    def __repr__(self):
        return self.filename.encode(Encoding)
    def getNewname(self, pattern):
        if not isinstance(pattern, unicode):
            pattern = pattern.decode(detect(pattern)['encoding'])
        newname = pattern
        for match in re.compile('(#\\((title|album|artist|track|genre)(:(\\d*))?\\))').finditer(newname):
            newname = newname.replace(match.group(),
                                      self.__getattr__(match.groups()[1])
                                      [:int(match.groups()[3]) if match.groups()[3] else None]
                                      )
        return reduce(lambda s, x: s.replace(x, ''), [newname, '/', ':', '*', '?', '"', '<', '>', '|'])
    def rename(self, pattern):
        newname = self.getNewname()
        newpath = dirname(self.filename) + newname + '.' + self.filename.split('.')[-1] 
        os.rename(self.filename, newpath.encode(Encoding))
        self.open(newpath.encode(Encoding))
        return self
Exemple #2
0
	if len(args) == 0:
		parser.print_usage()
		sys.exit(-1)
	
	if options.quiet:
		options.force = True
	
	fn = args[0]
	if options.eyeD3:
		from eyeD3 import Tag
		tag = Tag()
		tag.link(fn)
	if options.artist is None:
		if options.eyeD3:
			options.artist = tag.getArtist()
		else:
			print "error: no artist specified"
			sys.exit(-1)
	else:
		if (options.eyeD3 and options.artist != tag.getArtist() 
				and not options.quiet):
			print "warning: %s (input) != %s (tag)" % (
					options.artist, tag.getArtist())

	if options.title is None:
		if options.eyeD3:
			options.title = tag.getTitle()
		else:
			print "error: no title specified"
			sys.exit(-2)