def fetch_channel(self, package_name, channel_name, with_releases=True): """ Returns an AppChannel. """ repo = _application(package_name) try: channel = appr_model.channel.get_channel(repo, channel_name, self.models_ref) except (self.models_ref.Channel.DoesNotExist, self.models_ref.Tag.DoesNotExist): raise_channel_not_found(package_name, channel_name) if with_releases: releases = appr_model.channel.get_channel_releases( repo, channel, self.models_ref) chanview = ChannelReleasesView( current=channel.linked_tag.name, name=channel.name, releases=[channel.linked_tag.name] + [c.name for c in releases], ) else: chanview = ChannelView(current=channel.linked_tag.name, name=channel.name) return chanview
def delete_channel(self, package_name, channel_name): """Delete an AppChannel Note: It doesn't delete the AppReleases """ if self.is_readonly: raise ReadOnlyException("Currently in read-only mode") repo = _application(package_name) try: appr_model.channel.delete_channel(repo, channel_name, self.models_ref) except (self.models_ref.Channel.DoesNotExist, self.models_ref.Tag.DoesNotExist): raise_channel_not_found(package_name, channel_name)
def channel_releases(self, channel): if not self.ischannel_exists(channel): raise_channel_not_found(self.package, channel) releases = [ release for release, x in self.releases_data['releases'].iteritems() if channel in x['channels'] ] ordered_releases = [ str(x) for x in sorted(cnr.semver.versions(releases, False), reverse=True) ] return ordered_releases
def delete_channel(self, channel): """ Delete the channel from all releases """ if not self.ischannel_exists(channel): raise_channel_not_found(channel) try: self.get_lock(self.releases_key) data = self.releases_data for release in self.channel_releases(channel): self._releases = self._delete_channel_release(channel, release) if channel in data['channels']: data['channels'].pop(channel) self._write_data(self.releases_key, data) finally: self.release_lock(self.releases_key)
def remove_release(self, release): if not self.exists(): raise_channel_not_found(self.package, self.name) return self._remove_release(release)
def _check_channel_release(self, channel, release): if not self.ischannel_exists(channel): raise_channel_not_found(channel) if release not in self.releases_data['releases']: raise_package_not_found(self.package, release)
def channel(self, channel): try: return self.releases_data['channels'][channel] except KeyError: raise_channel_not_found(channel)