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()
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()
40 db_table
= 'historic_podcast_data'
41 unique_together
= ('podcast', 'date')
44 class BackendSubscription(models
.Model
):
46 Represents the data in the subscriptions table, which
47 contains all subscriptions, even those for currently deleted devices
49 device
= models
.ForeignKey(Device
)
50 podcast
= models
.ForeignKey(Podcast
)
51 user
= models
.ForeignKey(User
)
52 subscribed_since
= models
.DateTimeField()
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()
68 db_table
= 'listeners'
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()
78 db_table
= 'related_podcasts'
81 class SuggestionBlacklist(models
.Model
):
82 user
= models
.ForeignKey(User
)
83 podcast
= models
.ForeignKey(Podcast
)
86 db_table
= 'suggestion_blacklist'