[Tasks] Update Celery configuration / setup
[mygpo.git] / mygpo / core / tasks.py
blob4047a8df4200dd096e89f628877100bf020faf6b
1 from datetime import datetime
3 from django.utils.translation import ugettext as _
4 from django.conf import settings
6 from mygpo.podcasts.models import Podcast, Episode
7 from mygpo.celery import celery
8 from mygpo.data.feeddownloader import PodcastUpdater
9 from mygpo.utils import get_timestamp
10 from mygpo.users.models import EpisodeAction
11 from mygpo.flattr import Flattr
12 from mygpo.db.couchdb.episode_state import episode_state_for_user_episode, \
13 add_episode_actions
16 @celery.task(max_retries=5, default_retry_delay=60)
17 def flattr_thing(user, thing_id, domain, is_secure, thing_type):
18 """ Task to flattr a thing """
20 flattr = Flattr(user, domain, is_secure)
22 if thing_type == 'Podcast':
23 thing = Podcast.objects.get(id=thing_id)
25 elif thing_type == 'Episode':
26 thing = Episode.objects.get(id=thing_id)
28 else:
29 raise NotImplemented(_("Can't flattr a '%s'") % thing_type)
32 if not thing.flattr_url:
33 return False, _('No Payment URL available')
35 try:
36 success, msg = flattr.flattr_url(thing.flattr_url)
38 if settings.FLATTR_MYGPO_THING:
39 flattr.flattr_url(settings.FLATTR_MYGPO_THING)
41 except Exception as ex:
42 raise flattr_thing.retry(exc=ex)
44 return success, msg
47 @celery.task(max_retries=5, default_retry_delay=60)
48 def auto_flattr_episode(user, episode_id):
49 """ Task to auto-flattr an episode
51 In addition to the flattring itself, it also records the event """
53 success, msg = flattr_thing(user, episode_id, None, False, 'Episode')
55 if not success:
56 return False
58 episode = Episode.objects.get(id=episode_id)
59 state = episode_state_for_user_episode(user, episode)
61 action = EpisodeAction()
62 action.action = 'flattr'
63 action.upload_timestamp = get_timestamp(datetime.utcnow())
64 add_episode_actions(state, [action])
66 return True