"""Logic Tier for Show Family.""" from podcast.logic import user_v2 as user_v2_logic from podcast.models import podcast as podcast_model from podcast.models import show_family as show_family_model from podcast.utils import exc def get_show_family_by_id(show_family_id): """Get show_family metadata by id. Args: show_family_id (int): The show_family unique identifier. Returns: dict: containing show_family metadata. """ user_v2_logic.current_user_owns_show_family_or_raise(show_family_id) return show_family_model.get_show_family_by_id(show_family_id) def get_show_families(limit=0, offset=0, network_ids=None, ids=None): """Get show families that user has access to. Args: limit (int): how many show families to retrieve. offset (int): the offset (for pagination). Returns: dict: containing a list of dicts with show family metadata. """ user_owned_show_family_ids = user_v2_logic.show_family_ids_owned_by_current_user() if not ids and not network_ids: show_family_ids = user_owned_show_family_ids else: show_family_ids = [] if ids: if not set(ids).issubset(user_owned_show_family_ids): raise exc.OwsError.forbidden() show_family_ids += ids if network_ids: user_v2_logic.current_user_owns_network_ids_or_raise(network_ids, True) networks_show_family_ids = show_family_model.get_show_family_ids_by_network_ids(network_ids) show_family_ids += list(set(user_owned_show_family_ids).intersection(set(networks_show_family_ids))) show_families = show_family_model.get_show_families(limit, offset, show_family_ids) _attach_feeds_count(show_families['items']) return show_families def _attach_feeds_count(show_families): """Attach number of feeds count per show family.""" show_family_ids = [show_family['id'] for show_family in show_families] show_families_feeds_count = podcast_model.get_feeds_count_for_show_family_ids(show_family_ids) for show_family in show_families: show_family['feeds_count'] = show_families_feeds_count.get(show_family['id'], 0)