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
.cel
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
, \
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
)
29 raise NotImplemented(_("Can't flattr a '%s'") % thing_type
)
32 if not thing
.flattr_url
:
33 return False, _('No Payment URL available')
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
)
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')
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
])