from __future__ import unicode_literals from django.utils import timezone from django.db import models from django.core.files.storage import default_storage from django.core.files.base import ContentFile import os from mutagen import oggvorbis class Recording(models.Model): file = models.FileField(upload_to='music/') artist = models.CharField(max_length=200, blank=True) album = models.CharField(max_length=100, blank=True) title = models.CharField(max_length=100, blank=True) location = models.CharField(max_length=100, blank=True) date = models.CharField(max_length=100, blank=True) def performers(self): return self.artist.split(';') def save(self, *args, **kwargs): path = os.path.join('/home/john/jheu/jheu/media', 'tmp','tmp.ogg') tmp = default_storage.save(path, ContentFile(self.file.file.read())) ov = oggvorbis.Open(tmp) if not self.artist: self.artist = ov.get('artist')[0] if not self.album: self.album = ov.get('album')[0] if not self.title: self.title = ov.get('title')[0] if not self.location: self.location = ov.get('location')[0] if not self.date: self.date = ov.get('date')[0] tmp = default_storage.delete(path) super(Recording, self).save(*args, **kwargs) def __unicode__(self): return self.title class Meta: ordering = ['date',] class Set(models.Model): desc = models.TextField(max_length=2000, blank=True) recordings = models.ManyToManyField(Recording) num = models.IntegerField() def __unicode__(self): return "...{}...".format(self.desc[:30]) class Meta: ordering = ['num',] class Session(models.Model): title = models.CharField(max_length=100) date = models.DateTimeField(default=timezone.now) slug = models.SlugField(max_length=100, unique=True, allow_unicode=True, blank=True) sets = models.ManyToManyField(Set) def __unicode__(self): return self.title class Meta: ordering = ['-date',]