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_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 get_app_release(repo, tag_name, media_type, models_ref): """ Returns (tag, manifest, blob) given a repo object, tag_name, and media_type). """ ManifestListManifest = models_ref.ManifestListManifest Manifest = models_ref.Manifest Blob = models_ref.Blob ManifestBlob = models_ref.ManifestBlob manifestlistmanifest_set_name = models_ref.manifestlistmanifest_set_name tag = tag_model.get_tag(repo, tag_name, models_ref, tag_kind='release') media_type_id = ManifestListManifest.media_type.get_id(manifest_media_type(media_type)) manifestlistmanifest = (getattr(tag.manifest_list, manifestlistmanifest_set_name) .join(Manifest) .where(ManifestListManifest.media_type == media_type_id).get()) manifest = manifestlistmanifest.manifest blob = Blob.select().join(ManifestBlob).where(ManifestBlob.manifest == manifest).get() return (tag, manifest, blob)
def delete_app_release(repo, tag_name, media_type, models_ref): """Terminate a Tag/media-type couple It find the corresponding tag/manifest and remove from the manifestlistmanifest the manifest 1. it terminates the current tag (in all-cases) 2. if the new manifestlist is not empty, it creates a new tag for it """ ManifestListManifest = models_ref.ManifestListManifest manifestlistmanifest_set_name = models_ref.manifestlistmanifest_set_name media_type_id = ManifestListManifest.media_type.get_id(manifest_media_type(media_type)) with db_transaction(): tag = tag_model.get_tag(repo, tag_name, models_ref) manifest_list = tag.manifest_list list_json = manifest_list.manifest_list_json mlm_query = ManifestListManifest.select().where( ManifestListManifest.manifest_list == tag.manifest_list ) list_manifest_ids = sorted([mlm.manifest_id for mlm in mlm_query]) manifestlistmanifest = ( getattr(tag.manifest_list, manifestlistmanifest_set_name) .where(ManifestListManifest.media_type == media_type_id) .get() ) index = list_manifest_ids.index(manifestlistmanifest.manifest_id) list_manifest_ids.pop(index) list_json.pop(index) if not list_json: tag.lifetime_end = get_epoch_timestamp() tag.save() else: manifestlist = manifest_list_model.get_or_create_manifest_list( list_json, LIST_MEDIA_TYPE, SCHEMA_VERSION, models_ref ) manifest_list_model.create_manifestlistmanifest( manifestlist, list_manifest_ids, list_json, models_ref ) tag = tag_model.create_or_update_tag( repo, tag_name, models_ref, manifest_list=manifestlist, tag_kind="release" ) return tag
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