implement API for podcast directory
[mygpo.git] / mygpo / data / models.py
blob3e002557a222c338e67e828714d58e2b134636c5
1 from django.db import models
2 from django.contrib.auth.models import User
3 from mygpo.api.models import Podcast, Episode, Device, ToplistEntry
4 from mygpo import settings
6 class PodcastTagManager(models.Manager):
8 def top_tags(self, total):
9 tags = self.raw("select *, count(id) as entries from podcast_tags group by tag order by entries desc")[:total]
11 tags = filter(lambda x: not x.tag.startswith('http://'), tags)
13 excluded_tags = getattr(settings, 'DIRECTORY_EXCLUDED_TAGS', [])
14 return filter(lambda x: not x.tag in excluded_tags, tags)
16 def podcasts_for_tag(self, tag):
17 return ToplistEntry.objects.filter(podcast__podcasttag__tag=tag).order_by('-subscriptions').distinct()
20 class PodcastTag(models.Model):
21 tag = models.CharField(max_length=100)
22 podcast = models.ForeignKey(Podcast)
23 source = models.CharField(max_length=100)
24 user = models.ForeignKey(User, null=True)
25 weight = models.IntegerField(default=1)
27 objects = PodcastTagManager()
29 class Meta:
30 db_table = 'podcast_tags'
31 unique_together = ('podcast', 'source', 'user', 'tag')
34 class HistoricPodcastData(models.Model):
35 podcast = models.ForeignKey(Podcast)
36 date = models.DateField()
37 subscriber_count = models.IntegerField()
39 class Meta:
40 db_table = 'historic_podcast_data'
41 unique_together = ('podcast', 'date')
44 class BackendSubscription(models.Model):
45 """
46 Represents the data in the subscriptions table, which
47 contains all subscriptions, even those for currently deleted devices
48 """
49 device = models.ForeignKey(Device)
50 podcast = models.ForeignKey(Podcast)
51 user = models.ForeignKey(User)
52 subscribed_since = models.DateTimeField()
54 class Meta:
55 unique_together = ('device', 'podcast', 'user')
56 db_table = 'subscriptions'
59 class Listener(models.Model):
60 device = models.ForeignKey(Device)
61 user = models.ForeignKey(User)
62 episode = models.ForeignKey(Episode)
63 podcast = models.ForeignKey(Podcast)
64 first_listened = models.DateTimeField()
65 last_listened = models.DateTimeField()
67 class Meta:
68 db_table = 'listeners'
69 managed = False
72 class RelatedPodcast(models.Model):
73 ref_podcast = models.ForeignKey(Podcast, related_name='ref_podcast')
74 rel_podcast = models.ForeignKey(Podcast, related_name='rel_podcast')
75 priority = models.IntegerField()
77 class Meta:
78 db_table = 'related_podcasts'
81 class SuggestionBlacklist(models.Model):
82 user = models.ForeignKey(User)
83 podcast = models.ForeignKey(Podcast)
85 class Meta:
86 db_table = 'suggestion_blacklist'
87 managed = False