Пример #1
0
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")
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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
Пример #5
0
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