1 from mygpo
.api
.models
import Podcast
, Episode
, SubscriptionAction
, EpisodeAction
2 from mygpo
.data
.models
import HistoricPodcastData
, HistoricEpisodeData
3 from mygpo
.utils
import daterange
4 from datetime
import date
, timedelta
8 for p
in Podcast
.objects
.all():
12 def calc_podcast(podcast
):
14 latest_historic
= HistoricPodcastData
.objects
.filter(podcast
=podcast
).order_by('-date')
15 if latest_historic
.count() > 0:
16 start
= latest_historic
[0].date
+ timedelta(days
=1)
17 prev
= latest_historic
[0].subscriber_count
20 first
= SubscriptionAction
.objects
.filter(podcast
=podcast
).order_by('timestamp')[0]
21 start
= first
.timestamp
.date()
24 for day
in daterange(start
, date
.today() - timedelta(days
=1)):
25 nextday
= day
+ timedelta(days
=1)
26 act
= [x
['action'] for x
in SubscriptionAction
.objects
.filter(podcast
=podcast
, timestamp__range
=(day
, nextday
)).values('action')]
29 rec
= HistoricPodcastData
.objects
.get_or_create(podcast
=podcast
, date
=day
, defaults
={'subscriber_count': prev
})
32 def calc_episode(episode
):
33 latest_historic
= HistoricEpisodeData
.objects
.filter(episode
=episode
).order_by('-date')
34 if latest_historic
.count() > 0:
35 start
= latest_historic
[0].date
+ timedelta(days
=1)
37 first
= EpisodeAction
.objects
.filter(episode
=episode
).order_by('timestamp')[0]
38 start
= first
.timestamp
.date()
40 for day
in daterange(start
, date
.today() - timedelta(days
=1)):
41 nextday
= day
+ timedelta(days
=1)
43 listeners
= EpisodeAction
.objects
.filter(episode
=episode
, action
='play').values('user').distinct().count()
45 HistoricEpisodeData
.objects
.get_or_create(episode
=episode
, date
=day
, defaults
={'listener_count': listeners
})