1 from datetime
import datetime
3 from mygpo
.core
.models
import SubscriberData
4 from mygpo
.cel
import celery
5 from mygpo
.data
.feeddownloader
import PodcastUpdater
6 from mygpo
.db
.couchdb
.podcast
import podcast_by_id
, subscriberdata_for_podcast
7 from mygpo
.db
.couchdb
.podcast_state
import podcast_subscriber_count
10 @celery.task(max_retries
=5)
11 def update_podcast_subscribers(podcast_id
):
12 """ Updates the subscriber count of a podcast """
15 podcast
= podcast_by_id(podcast_id
)
17 # calculate current number of subscribers
18 subscriber_count
= podcast_subscriber_count(podcast
)
19 subs_cur
= SubscriberData(timestamp
=datetime
.utcnow(),
20 subscriber_count
=subscriber_count
)
22 # sort all subscriber data entries
23 subs_all
= sorted(podcast
.subscribers
+ [subs_cur
],
24 key
=lambda e
: e
.timestamp
)
26 # move all but latest two to history
27 subs_history
= subscriberdata_for_podcast(podcast_id
)
28 subs_history
.subscribers
= subs_all
[:-2]
31 # move latest two to podcast
32 podcast
.subscribers
= subs_all
[-2:]
35 #TODO: which exceptions?
36 except Exception as ex
:
37 raise update_podcast_subscribers
.retry(exc
=ex
)