Source code for spotify.models

from django.db import models
from django.conf import settings
from django.utils.crypto import get_random_string

from events.models import Event2019
from helpers.util import unique_slug_generator


# Create your models here.
[docs]class SpotifyUser(models.Model): """ Represents a user's Spotify Account. Authentication tokens will be saved here. """ user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="spotify_accounts") display_name = models.CharField(max_length=150, blank=True, null=True) spotify_id = models.CharField(max_length=150, blank=True, null=True) token_info = models.TextField(blank=True, null=True) personal = models.BooleanField(default=True, help_text="Uncheck this for shared club accounts") def __str__(self): if self.display_name: return self.display_name return self.user.name + " (No profile data)"
[docs]class Session(models.Model): """ Spotify song request session for a specific event """ event = models.ForeignKey(Event2019, on_delete=models.CASCADE) accepting_requests = models.BooleanField(default=True) allow_explicit = models.BooleanField(default=True) auto_approve = models.BooleanField(default=False) require_payment = models.BooleanField(default=False) allow_silence = models.BooleanField(default=False) private = models.BooleanField(default=False) user = models.ForeignKey(SpotifyUser, on_delete=models.CASCADE) slug = models.SlugField(max_length=128, unique=True) # Payment methods paypal = models.URLField(help_text="PayPal.Me Link", blank=True, null=True) venmo = models.CharField(max_length=16, help_text="Venmo username", blank=True, null=True) venmo_verification = models.CharField(max_length=4, blank=True, null=True) def __str__(self): return self.event.event_name
[docs] def save(self, *args, **kwargs): if self.private: self.slug = unique_slug_generator(self, self.event.event_name, get_random_string(12)) else: self.slug = unique_slug_generator(self, self.event.event_name) super(Session, self).save(*args, **kwargs)
class Meta: permissions = ( ('manage_playback', 'Can manage session playback (play, pause, etc.)'), ) constraints = [ models.UniqueConstraint(fields=['user'], name="active_session_lock", condition=models.Q(accepting_requests=True)) ]
[docs]class SongRequest(models.Model): """ Used in keeping track of a song request """ session = models.ForeignKey(Session, on_delete=models.CASCADE, related_name="requests") name = models.CharField(max_length=150) identifier = models.CharField(max_length=32) duration = models.IntegerField(help_text="Duration in ms") approved = models.BooleanField(default=False) queued = models.DateTimeField(blank=True, null=True) paid = models.BooleanField(default=False) submitted_by = models.CharField(max_length=150) email = models.EmailField(blank=True, null=True) phone = models.CharField(max_length=24, blank=True, null=True) class Meta: permissions = ( ('submit_song_request', 'Can submit song requests'), ('approve_song_request', 'Approve song requests'), )