1 from itertools
import chain
2 from operator
import itemgetter
3 from collections
import Counter
5 from mygpo
.celery
import celery
6 from mygpo
.db
.couchdb
.user
import (suggestions_for_user
,
7 update_suggestions
as update
)
8 from mygpo
.subscriptions
import get_subscribed_podcasts
10 from celery
.utils
.log
import get_task_logger
11 logger
= get_task_logger(__name__
)
14 @celery.task(max_retries
=5, default_retry_delay
=60)
15 def update_suggestions(user
, max_suggestions
=15):
16 """ updates the suggestions of a user """
18 # get suggestions object
19 suggestion
= suggestions_for_user(user
)
21 # calculate possible suggestions
22 subscribed_podcasts
= get_subscribed_podcasts()
23 related
= chain
.from_iterable([p
.related_podcasts
for p
in subscribed_podcasts
])
25 # filter out blacklisted podcasts
26 related
= filter(lambda pid
: not pid
in suggestion
.blacklist
, related
)
29 counter
= Counter(related
)
30 get_podcast_id
= itemgetter(0)
31 suggested
= map(get_podcast_id
, counter
.most_common(max_suggestions
))
32 update(suggestion
, suggested
)