def add_user_recursive(self, user, docs): """ adds a user and all the podcast and episodes it references """ # User docs.add(user._id) # Suggestions suggestions = suggestions_for_user(user) docs.add(suggestions._id) progress(0, len(docs), '', stream=sys.stderr) # Podcast States for p_state in podcast_states_for_user(user): self.add_podcast_state(p_state, docs) progress(0, len(docs), p_state, stream=sys.stderr) # Podcast podcast = podcast_by_id(p_state.podcast) self.add_podcast(podcast, docs) progress(0, len(docs), podcast, stream=sys.stderr) # Episodes for episode in episodes_for_podcast(podcast): self.add_episode(episode, docs) progress(0, len(docs), episode, stream=sys.stderr) e_state = episode_state_for_user_episode(user, episode) self.add_episode_state(e_state, docs) progress(0, len(docs), e_state, stream=sys.stderr)
def get_subscription_history(self, device_id=None, reverse=False, public=None): """ Returns chronologically ordered subscription history entries Setting device_id restricts the actions to a certain device """ from mygpo.db.couchdb.podcast_state import podcast_states_for_user, \ podcast_states_for_device def action_iter(state): for action in sorted(state.actions, reverse=reverse): if device_id is not None and device_id != action.device: continue if public is not None and state.is_public() != public: continue entry = HistoryEntry() entry.timestamp = action.timestamp entry.action = action.action entry.podcast_id = state.podcast entry.device_id = action.device yield entry if device_id is None: podcast_states = podcast_states_for_user(self) else: podcast_states = podcast_states_for_device(device_id) # create an action_iter for each PodcastUserState subscription_action_lists = [action_iter(x) for x in podcast_states] action_cmp_key = lambda x: x.timestamp # Linearize their subscription-actions return linearize(action_cmp_key, subscription_action_lists, reverse)
def set_device_task_state(user): """ updates the device states of a user in all his/her podcast states """ from mygpo.db.couchdb.podcast_state import podcast_states_for_user podcast_states = podcast_states_for_user(user) for state in podcast_states: update_device_state(state, user.devices)