Source code for azure.containerregistry._models

# coding=utf-8
# ------------------------------------
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# ------------------------------------

import warnings
from enum import Enum
from typing import TYPE_CHECKING, Dict, Any, List

from ._generated.models import (
    ArtifactTagProperties as GeneratedArtifactTagProperties,
    ContainerRepositoryProperties as GeneratedRepositoryProperties,
    RepositoryWriteableProperties,
    TagWriteableProperties,
    ManifestWriteableProperties,
)
from ._helpers import _host_only, _is_tag, _strip_alg

if TYPE_CHECKING:
    from typing import IO
    from datetime import datetime
    from ._generated.models import ManifestAttributesBase, OCIManifest


[docs]class ArtifactManifestProperties(object): # pylint: disable=too-many-instance-attributes """Represents properties of a registry artifact. :ivar bool can_delete: Delete Permissions for an artifact. :ivar bool can_write: Write Permissions for an artifact. :ivar bool can_read: Read Permissions for an artifact. :ivar bool can_list: List Permissions for an artifact. :ivar architecture: CPU Architecture of an artifact. :vartype architecture: ~azure.containerregistry.ArtifactArchitecture :ivar created_on: Time and date an artifact was created. :vartype created_on: ~datetime.datetime :ivar str digest: Digest for the artifact. :ivar last_updated_on: Time and date an artifact was last updated. :vartype last_updated_on: ~datetime.datetime :ivar operating_system: Operating system for the artifact. :vartype operating_system: ~azure.containerregistry.ArtifactOperatingSystem :ivar str repository_name: Repository name the artifact belongs to. :ivar str size_in_bytes: Size of the artifact. :ivar List[str] tags: Tags associated with a registry artifact. """ def __init__(self, **kwargs): self._architecture = kwargs.get("cpu_architecture", None) if self._architecture is not None: self._architecture = ArtifactArchitecture(self._architecture) self._created_on = kwargs.get("created_on", None) self._digest = kwargs.get("digest", None) self._last_updated_on = kwargs.get("last_updated_on", None) self._operating_system = kwargs.get("operating_system", None) if self._operating_system is not None: self._operating_system = ArtifactOperatingSystem(self._operating_system) self._repository_name = kwargs.get("repository_name", None) self._registry = kwargs.get("registry", None) self._size_in_bytes = kwargs.get("size_in_bytes", None) self._tags = kwargs.get("tags", None) self.can_delete = kwargs.get("can_delete") self.can_read = kwargs.get("can_read") self.can_list = kwargs.get("can_list") self.can_write = kwargs.get("can_write") @classmethod def _from_generated(cls, generated, **kwargs): # type: (ManifestAttributesBase, Dict[str, Any]) -> ArtifactManifestProperties return cls( cpu_architecture=generated.architecture, created_on=generated.created_on, digest=generated.digest, last_updated_on=generated.last_updated_on, operating_system=generated.operating_system, size_in_bytes=generated.size, tags=generated.tags, can_delete=generated.can_delete, can_read=generated.can_read, can_write=generated.can_write, can_list=generated.can_list, repository_name=kwargs.get("repository_name", None), registry=kwargs.get("registry", None), ) def _to_generated(self): # type: () -> ManifestWriteableProperties return ManifestWriteableProperties( can_delete=self.can_delete, can_read=self.can_read, can_write=self.can_write, can_list=self.can_list, ) @property def architecture(self): # type: () -> ArtifactArchitecture return self._architecture @property def created_on(self): # type: () -> datetime return self._created_on @property def digest(self): # type: () -> str return self._digest @property def last_updated_on(self): # type: () -> datetime return self._last_updated_on @property def operating_system(self): # type: () -> ArtifactOperatingSystem return self._operating_system @property def repository_name(self): # type: () -> str return self._repository_name @property def size_in_bytes(self): # type: () -> int return self._size_in_bytes @property def tags(self): # type: () -> List[str] return self._tags @property def fully_qualified_reference(self): # type: () -> str return "{}/{}{}{}".format( _host_only(self._registry), self._repository_name, ":" if _is_tag(self._digest) else "@", _strip_alg(self._digest) ) def _to_generated(self): # type: () -> ManifestWriteableProperties return ManifestWriteableProperties( can_delete=self.can_delete, can_read=self.can_read, can_write=self.can_write, can_list=self.can_list, )
[docs]class RepositoryProperties(object): """Represents properties of a single repository. :ivar bool can_delete: Delete Permissions for a repository. :ivar bool can_write: Write Permissions for a repository. :ivar bool can_read: Read Permissions for a repository. :ivar bool can_list: List Permissions for a repository. :ivar created_on: Time the repository was created :vartype created_on: ~datetime.datetime :ivar last_updated_on: Time the repository was last updated. :vartype last_updated_on: ~datetime.datetime :ivar int manifest_count: Number of manifest in the repository. :ivar str name: Name of the repository. :ivar int tag_count: Number of tags associated with the repository. """ def __init__(self, **kwargs): self._created_on = kwargs.get("created_on", None) self._last_updated_on = kwargs.get("last_updated_on", None) self._manifest_count = kwargs.get("manifest_count", None) self._name = kwargs.get("name", None) self._tag_count = kwargs.get("tag_count", None) self.can_delete = kwargs.get("can_delete") self.can_read = kwargs.get("can_read") self.can_list = kwargs.get("can_list") self.can_write = kwargs.get("can_write") @classmethod def _from_generated(cls, generated): # type: (GeneratedRepositoryProperties) -> RepositoryProperties return cls( created_on=generated.created_on, last_updated_on=generated.last_updated_on, name=generated.name, manifest_count=generated.manifest_count, tag_count=generated.tag_count, can_delete=generated.can_delete, can_read=generated.can_read, can_write=generated.can_write, can_list=generated.can_list, ) def _to_generated(self): # type: () -> RepositoryWriteableProperties return RepositoryWriteableProperties( can_delete=self.can_delete, can_read=self.can_read, can_write=self.can_write, can_list=self.can_list, ) def __getattr__(self, name): if name == "last_udpated_on": warnings.warn( "The property name with a typo called 'last_udpated_on' has been deprecated and will be retired in future versions", # pylint: disable=line-too-long DeprecationWarning) return self.last_updated_on return super().__getattr__(self, name) # pylint: disable=no-member @property def created_on(self): # type: () -> datetime return self._created_on @property def last_updated_on(self): # type: () -> datetime return self._last_updated_on @property def manifest_count(self): # type: () -> int return self._manifest_count @property def name(self): # type: () -> str return self._name @property def tag_count(self): # type: () -> int return self._tag_count
[docs]class ArtifactTagProperties(object): """Represents properties of a single tag :ivar bool can_delete: Delete Permissions for a tag. :ivar bool can_write: Write Permissions for a tag. :ivar bool can_read: Read Permissions for a tag. :ivar bool can_list: List Permissions for a tag. :ivar created_on: Time the tag was created. :vartype created_on: ~datetime.datetime :ivar str digest: Digest for the tag. :ivar last_updated_on: Time the tag was last updated. :vartype last_updated_on: ~datetime.datetime :ivar str name: Name of the image the tag corresponds to. :ivar str repository: Repository the tag belongs to. """ def __init__(self, **kwargs): self._created_on = kwargs.get("created_on", None) self._digest = kwargs.get("digest", None) self._last_updated_on = kwargs.get("last_updated_on", None) self._name = kwargs.get("name", None) self._repository_name = kwargs.get("repository_name", None) self.can_delete = kwargs.get("can_delete") self.can_read = kwargs.get("can_read") self.can_list = kwargs.get("can_list") self.can_write = kwargs.get("can_write") @classmethod def _from_generated(cls, generated, **kwargs): # type: (GeneratedArtifactTagProperties, Dict[str, Any]) -> ArtifactTagProperties return cls( created_on=generated.created_on, digest=generated.digest, last_updated_on=generated.last_updated_on, name=generated.name, can_delete=generated.can_delete, can_read=generated.can_read, can_write=generated.can_write, can_list=generated.can_list, repository_name=kwargs.get("repository_name", None), ) def _to_generated(self): # type: () -> TagWriteableProperties return TagWriteableProperties( can_delete=self.can_delete, can_read=self.can_read, can_write=self.can_write, can_list=self.can_list, ) @property def created_on(self): # type: () -> datetime return self._created_on @property def digest(self): # type: () -> str return self._digest @property def last_updated_on(self): # type: () -> datetime return self._last_updated_on @property def name(self): # type: () -> str return self._name @property def repository_name(self): # type: () -> str return self._repository_name
class DownloadBlobResult(object): """The result from downloading a blob from the registry. :ivar data: The blob content. :vartype data: IO :ivar str digest: The blob's digest, calculated by the registry. """ def __init__(self, **kwargs): self.data = kwargs.get("data") self.digest = kwargs.get("digest") class DownloadManifestResult(object): """The result from downloading a manifest from the registry. :ivar manifest: The OCI manifest that was downloaded. :vartype manifest: ~azure.containerregistry.models.OCIManifest :ivar data: The manifest stream that was downloaded. :vartype data: IO :ivar str digest: The manifest's digest, calculated by the registry. """ def __init__(self, **kwargs): self.manifest = kwargs.get("manifest") self.data = kwargs.get("data") self.digest = kwargs.get("digest")
[docs]class ArtifactArchitecture(str, Enum): # pylint: disable=enum-must-inherit-case-insensitive-enum-meta AMD64 = "amd64" ARM = "arm" ARM64 = "arm64" I386 = "386" MIPS = "mips" MIPS64 = "mips64" MIPS64LE = "mips64le" MIPSLE = "mipsle" PPC64 = "ppc64" PPC64LE = "ppc64le" RISCV64 = "riscv64" S390X = "s390x" WASM = "wasm"
[docs]class ArtifactOperatingSystem(str, Enum): # pylint: disable=enum-must-inherit-case-insensitive-enum-meta AIX = "aix" ANDROID = "android" DARWIN = "darwin" DRAGONFLY = "dragonfly" FREEBSD = "freebsd" ILLUMOS = "illumos" IOS = "ios" JS = "js" LINUX = "linux" NETBSD = "netbsd" OPENBSD = "openbsd" PLAN9 = "plan9" SOLARIS = "solaris" WINDOWS = "windows"