remove gevent monkey-patch from feed-downloader
[mygpo.git] / mygpo / directory / tasks.py
blob18856043a586665970448dcd751c2e6c938b00f2
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 """
14 try:
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]
29 subs_history.save()
31 # move latest two to podcast
32 podcast.subscribers = subs_all[-2:]
33 podcast.save()
35 #TODO: which exceptions?
36 except Exception as ex:
37 raise update_podcast_subscribers.retry(exc=ex)