from data.appr_model import tag as tag_model def get_channel_releases(repo, channel, models_ref): """ Return all previously linked tags. This works based upon Tag lifetimes. """ Channel = models_ref.Channel Tag = models_ref.Tag tag_kind_id = Channel.tag_kind.get_id('channel') channel_name = channel.name return (Tag .select(Tag, Channel) .join(Channel, on=(Tag.id == Channel.linked_tag)) .where(Channel.repository == repo, Channel.name == channel_name, Channel.tag_kind == tag_kind_id, Channel.lifetime_end != None) .order_by(Tag.lifetime_end)) def get_channel(repo, channel_name, models_ref): """ Find a Channel by name. """ channel = tag_model.get_tag(repo, channel_name, models_ref, "channel") return channel def get_tag_channels(repo, tag_name, models_ref, active=True): """ Find the Channels associated with a Tag. """ Tag = models_ref.Tag tag = tag_model.get_tag(repo, tag_name, models_ref, "release") query = tag.tag_parents if active: query = tag_model.tag_is_alive(query, Tag) return query def delete_channel(repo, channel_name, models_ref): """ Delete a channel by name. """ return tag_model.delete_tag(repo, channel_name, models_ref, "channel") def create_or_update_channel(repo, channel_name, tag_name, models_ref): """ Creates or updates a channel to include a particular tag. """ tag = tag_model.get_tag(repo, tag_name, models_ref, 'release') return tag_model.create_or_update_tag(repo, channel_name, models_ref, linked_tag=tag, tag_kind="channel") def get_repo_channels(repo, models_ref): """ Creates or updates a channel to include a particular tag. """ Channel = models_ref.Channel Tag = models_ref.Tag tag_kind_id = Channel.tag_kind.get_id('channel') query = (Channel .select(Channel, Tag) .join(Tag, on=(Tag.id == Channel.linked_tag)) .where(Channel.repository == repo, Channel.tag_kind == tag_kind_id)) return tag_model.tag_is_alive(query, Channel)