Automatically read the ID3 tag from a mp3 on save

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from mutagen.easyid3 import EasyID3
from django.utils.translation import ugettext_lazy as _
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile


class Song(models.Model):
    file = models.FileField(_('File'), upload_to='medialibrary/songs', blank=True, null=True,
                            help_text=_('Upload an mp3 here and hit [Save and continue editing].<br />The song
                                          infos are read out automatically.'))
    artist = models.CharField(_('Artist'), max_length=50, blank=True)
    album = models.CharField(_('Album'), max_length=50, blank=True)
    title = models.CharField(_('Title'), max_length=50, blank=True)

    def clean(self):      
        if self.file:
            path = default_storage.save(os.path.join(settings.MEDIA_ROOT,'tmp','temp.mp3'),
                   ContentFile(self.file.file.read()))
            id3 = EasyID3(os.path.join(settings.MEDIA_ROOT, path))
            if not self.artist: self.artist = id3.get('artist', '')[0]
            if not self.title: self.title = id3.get('title', '')[0]
            if not self.album: self.album = id3.get('album', '')[0]
            print id3.get('artist', '')
            path = default_storage.delete(os.path.join(settings.MEDIA_ROOT,'tmp','temp.mp3'))
        super(Song, self).clean()

More like this

  1. Git Revision Template Tag by sbaechler 6 months, 1 week ago
  2. iTunes Podcast RSS Feed by Kyle_Dickerson 2 years, 10 months ago
  3. Friendly ID by willhardy 4 years, 5 months ago
  4. Username filled automatically with id by djangoman 3 years, 4 months ago
  5. Customizable newforms labels with a template tag by exogen 5 years, 1 month ago

Comments

MechanisM (on October 26, 2011):

Nice snippet! How about albumart from mp3 to ImageField?

#

(Forgotten your password?)