remove print statement in logo.py
[mygpo.git] / mygpo / core / podcasts.py
blob63448d2616aa98e9b44f4979fe862f7b1f36a869
1 from itertools import chain, islice
3 from mygpo.core.models import Podcast
4 from mygpo.core.proxy import proxy_object
5 from mygpo.db.couchdb.episode import episodes_for_podcast
6 from mygpo.utils import sorted_chain
9 class PodcastSet(set):
10 """ Represents a set of podcasts """
12 def __init__(self, podcasts=None):
13 self.podcasts = podcasts or []
16 def get_newest_episodes(self, max_date, num_episodes, max_per_podcast=5):
17 """ Returns the newest episodes for a set of podcasts """
19 podcast_key = lambda p: p.latest_episode_timestamp
21 podcasts = filter(lambda p: p.latest_episode_timestamp, self.podcasts)
22 podcasts = sorted(podcasts, key=podcast_key, reverse=True)
24 # we need at most num_episodes podcasts
25 podcasts = podcasts[:num_episodes]
27 podcast_dict = dict((p.get_id(), p) for p in podcasts)
29 links = [(p.latest_episode_timestamp, lazy_call(episodes_for_podcast,
30 p, since=1, until=max_date, descending=True,
31 limit=max_per_podcast) ) for p in podcasts]
33 episodes = sorted_chain(links, lambda e: e.released, reverse=True)
35 for episode in islice(episodes, num_episodes):
36 p = podcast_dict.get(episode.podcast, None)
37 yield proxy_object(episode, podcast=p)
40 def lazy_call(f, *args, **kwargs):
41 for x in f(*args, **kwargs):
42 yield x