[Suggestions] move existing code into own app
[mygpo.git] / mygpo / suggestions / tasks.py
blobe5a4caf3bfa33a1bb60bfbb3a9ad5323d6df884c
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)
28 # get most relevant
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)