Container Registries
        zenml.container_registries
  
      special
  
    Initialization for ZenML's container registries module.
A container registry is a store for (Docker) containers. A ZenML workflow involving a container registry would automatically containerize your code to be transported across stacks running remotely. As part of the deployment to the cluster, the ZenML base image would be downloaded (from a cloud container registry) and used as the basis for the deployed 'run'.
For instance, when you are running a local container-based stack, you would therefore have a local container registry which stores the container images you create that bundle up your pipeline code. You could also use a remote container registry like the Elastic Container Registry at AWS in a more production setting.
        azure_container_registry
    Implementation of an Azure Container Registry class.
        
AzureContainerRegistryFlavor            (BaseContainerRegistryFlavor)
        
    Class for Azure Container Registry.
Source code in zenml/container_registries/azure_container_registry.py
          class AzureContainerRegistryFlavor(BaseContainerRegistryFlavor):
    """Class for Azure Container Registry."""
    @property
    def name(self) -> str:
        """Name of the flavor.
        Returns:
            The name of the flavor.
        """
        return ContainerRegistryFlavor.AZURE.value
    @property
    def service_connector_requirements(
        self,
    ) -> Optional[ServiceConnectorRequirements]:
        """Service connector resource requirements for service connectors.
        Specifies resource requirements that are used to filter the available
        service connector types that are compatible with this flavor.
        Returns:
            Requirements for compatible service connectors, if a service
            connector is required for this flavor.
        """
        return ServiceConnectorRequirements(
            connector_type="azure",
            resource_type=DOCKER_REGISTRY_RESOURCE_TYPE,
            resource_id_attr="uri",
        )
    @property
    def docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_docs_url()
    @property
    def sdk_docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_sdk_docs_url()
    @property
    def logo_url(self) -> str:
        """A url to represent the flavor in the dashboard.
        Returns:
            The flavor logo.
        """
        return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/container_registry/azure.png"
docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
logo_url: str
  
      property
      readonly
  
    A url to represent the flavor in the dashboard.
Returns:
| Type | Description | 
|---|---|
| str | The flavor logo. | 
name: str
  
      property
      readonly
  
    Name of the flavor.
Returns:
| Type | Description | 
|---|---|
| str | The name of the flavor. | 
sdk_docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
service_connector_requirements: Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements]
  
      property
      readonly
  
    Service connector resource requirements for service connectors.
Specifies resource requirements that are used to filter the available service connector types that are compatible with this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements] | Requirements for compatible service connectors, if a service connector is required for this flavor. | 
        base_container_registry
    Implementation of a base container registry class.
        
BaseContainerRegistry            (AuthenticationMixin)
        
    Base class for all ZenML container registries.
Source code in zenml/container_registries/base_container_registry.py
          class BaseContainerRegistry(AuthenticationMixin):
    """Base class for all ZenML container registries."""
    _docker_client: Optional["DockerClient"] = None
    @property
    def config(self) -> BaseContainerRegistryConfig:
        """Returns the `BaseContainerRegistryConfig` config.
        Returns:
            The configuration.
        """
        return cast(BaseContainerRegistryConfig, self._config)
    @property
    def requires_authentication(self) -> bool:
        """Returns whether the container registry requires authentication.
        Returns:
            `True` if the container registry requires authentication,
            `False` otherwise.
        """
        return bool(self.config.authentication_secret)
    @property
    def credentials(self) -> Optional[Tuple[str, str]]:
        """Username and password to authenticate with this container registry.
        Returns:
            Tuple with username and password if this container registry
            requires authentication, `None` otherwise.
        """
        secret = self.get_typed_authentication_secret(
            expected_schema_type=BasicAuthSecretSchema
        )
        if secret:
            return secret.username, secret.password
        connector = self.get_connector()
        if connector:
            from zenml.service_connectors.docker_service_connector import (
                DockerServiceConnector,
            )
            if isinstance(connector, DockerServiceConnector):
                return (
                    connector.config.username.get_secret_value(),
                    connector.config.password.get_secret_value(),
                )
        return None
    @property
    def docker_client(self) -> "DockerClient":
        """Returns a Docker client for this container registry.
        Returns:
            The Docker client.
        Raises:
            RuntimeError: If the connector does not return a Docker client.
        """
        from docker.client import DockerClient
        # Refresh the client also if the connector has expired
        if self._docker_client and not self.connector_has_expired():
            return self._docker_client
        connector = self.get_connector()
        if connector:
            client = connector.connect()
            if not isinstance(client, DockerClient):
                raise RuntimeError(
                    f"Expected a DockerClient while trying to use the "
                    f"linked connector, but got {type(client)}."
                )
            self._docker_client = client
        else:
            self._docker_client = (
                docker_utils._try_get_docker_client_from_env()
            )
            credentials = self.credentials
            if credentials:
                username, password = credentials
                self._docker_client.login(
                    username=username,
                    password=password,
                    registry=self.config.uri,
                    reauth=True,
                )
        return self._docker_client
    def prepare_image_push(self, image_name: str) -> None:
        """Preparation before an image gets pushed.
        Subclasses can overwrite this to do any necessary checks or
        preparations before an image gets pushed.
        Args:
            image_name: Name of the docker image that will be pushed.
        """
    def push_image(self, image_name: str) -> str:
        """Pushes a docker image.
        Args:
            image_name: Name of the docker image that will be pushed.
        Returns:
            The Docker repository digest of the pushed image.
        Raises:
            ValueError: If the image name is not associated with this
                container registry.
        """
        if not image_name.startswith(self.config.uri):
            raise ValueError(
                f"Docker image `{image_name}` does not belong to container "
                f"registry `{self.config.uri}`."
            )
        self.prepare_image_push(image_name)
        return docker_utils.push_image(
            image_name, docker_client=self.docker_client
        )
config: BaseContainerRegistryConfig
  
      property
      readonly
  
    Returns the BaseContainerRegistryConfig config.
Returns:
| Type | Description | 
|---|---|
| BaseContainerRegistryConfig | The configuration. | 
credentials: Optional[Tuple[str, str]]
  
      property
      readonly
  
    Username and password to authenticate with this container registry.
Returns:
| Type | Description | 
|---|---|
| Optional[Tuple[str, str]] | Tuple with username and password if this container registry
requires authentication,  | 
docker_client: DockerClient
  
      property
      readonly
  
    Returns a Docker client for this container registry.
Returns:
| Type | Description | 
|---|---|
| DockerClient | The Docker client. | 
Exceptions:
| Type | Description | 
|---|---|
| RuntimeError | If the connector does not return a Docker client. | 
requires_authentication: bool
  
      property
      readonly
  
    Returns whether the container registry requires authentication.
Returns:
| Type | Description | 
|---|---|
| bool | 
 | 
prepare_image_push(self, image_name)
    Preparation before an image gets pushed.
Subclasses can overwrite this to do any necessary checks or preparations before an image gets pushed.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| image_name | str | Name of the docker image that will be pushed. | required | 
Source code in zenml/container_registries/base_container_registry.py
          def prepare_image_push(self, image_name: str) -> None:
    """Preparation before an image gets pushed.
    Subclasses can overwrite this to do any necessary checks or
    preparations before an image gets pushed.
    Args:
        image_name: Name of the docker image that will be pushed.
    """
push_image(self, image_name)
    Pushes a docker image.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| image_name | str | Name of the docker image that will be pushed. | required | 
Returns:
| Type | Description | 
|---|---|
| str | The Docker repository digest of the pushed image. | 
Exceptions:
| Type | Description | 
|---|---|
| ValueError | If the image name is not associated with this container registry. | 
Source code in zenml/container_registries/base_container_registry.py
          def push_image(self, image_name: str) -> str:
    """Pushes a docker image.
    Args:
        image_name: Name of the docker image that will be pushed.
    Returns:
        The Docker repository digest of the pushed image.
    Raises:
        ValueError: If the image name is not associated with this
            container registry.
    """
    if not image_name.startswith(self.config.uri):
        raise ValueError(
            f"Docker image `{image_name}` does not belong to container "
            f"registry `{self.config.uri}`."
        )
    self.prepare_image_push(image_name)
    return docker_utils.push_image(
        image_name, docker_client=self.docker_client
    )
        
BaseContainerRegistryConfig            (AuthenticationConfigMixin)
        
    Base config for a container registry.
Attributes:
| Name | Type | Description | 
|---|---|---|
| uri | str | The URI of the container registry. | 
Source code in zenml/container_registries/base_container_registry.py
          class BaseContainerRegistryConfig(AuthenticationConfigMixin):
    """Base config for a container registry.
    Attributes:
        uri: The URI of the container registry.
    """
    uri: str
    default_repository: Optional[str] = None
    @field_validator("uri")
    @classmethod
    def strip_trailing_slash(cls, uri: str) -> str:
        """Removes trailing slashes from the URI.
        Args:
            uri: The URI to be stripped.
        Returns:
            The URI without trailing slashes.
        """
        return uri.rstrip("/")
    @property
    def is_local(self) -> bool:
        """Checks if this stack component is running locally.
        Returns:
            True if this config is for a local component, False otherwise.
        """
        return bool(re.fullmatch(r"localhost:[0-9]{4,5}", self.uri))
is_local: bool
  
      property
      readonly
  
    Checks if this stack component is running locally.
Returns:
| Type | Description | 
|---|---|
| bool | True if this config is for a local component, False otherwise. | 
strip_trailing_slash(uri)
  
      classmethod
  
    Removes trailing slashes from the URI.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| uri | str | The URI to be stripped. | required | 
Returns:
| Type | Description | 
|---|---|
| str | The URI without trailing slashes. | 
Source code in zenml/container_registries/base_container_registry.py
          @field_validator("uri")
@classmethod
def strip_trailing_slash(cls, uri: str) -> str:
    """Removes trailing slashes from the URI.
    Args:
        uri: The URI to be stripped.
    Returns:
        The URI without trailing slashes.
    """
    return uri.rstrip("/")
        
BaseContainerRegistryFlavor            (Flavor)
        
    Base flavor for container registries.
Source code in zenml/container_registries/base_container_registry.py
          class BaseContainerRegistryFlavor(Flavor):
    """Base flavor for container registries."""
    @property
    def type(self) -> StackComponentType:
        """Returns the flavor type.
        Returns:
            The flavor type.
        """
        return StackComponentType.CONTAINER_REGISTRY
    @property
    def service_connector_requirements(
        self,
    ) -> Optional[ServiceConnectorRequirements]:
        """Service connector resource requirements for service connectors.
        Specifies resource requirements that are used to filter the available
        service connector types that are compatible with this flavor.
        Returns:
            Requirements for compatible service connectors, if a service
            connector is required for this flavor.
        """
        return ServiceConnectorRequirements(
            resource_type=DOCKER_REGISTRY_RESOURCE_TYPE,
            resource_id_attr="uri",
        )
    @property
    def config_class(self) -> Type[BaseContainerRegistryConfig]:
        """Config class for this flavor.
        Returns:
            The config class.
        """
        return BaseContainerRegistryConfig
    @property
    def implementation_class(self) -> Type[BaseContainerRegistry]:
        """Implementation class.
        Returns:
            The implementation class.
        """
        return BaseContainerRegistry
config_class: Type[zenml.container_registries.base_container_registry.BaseContainerRegistryConfig]
  
      property
      readonly
  
    Config class for this flavor.
Returns:
| Type | Description | 
|---|---|
| Type[zenml.container_registries.base_container_registry.BaseContainerRegistryConfig] | The config class. | 
implementation_class: Type[zenml.container_registries.base_container_registry.BaseContainerRegistry]
  
      property
      readonly
  
    Implementation class.
Returns:
| Type | Description | 
|---|---|
| Type[zenml.container_registries.base_container_registry.BaseContainerRegistry] | The implementation class. | 
service_connector_requirements: Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements]
  
      property
      readonly
  
    Service connector resource requirements for service connectors.
Specifies resource requirements that are used to filter the available service connector types that are compatible with this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements] | Requirements for compatible service connectors, if a service connector is required for this flavor. | 
type: StackComponentType
  
      property
      readonly
  
    Returns the flavor type.
Returns:
| Type | Description | 
|---|---|
| StackComponentType | The flavor type. | 
        default_container_registry
    Implementation of a default container registry class.
        
DefaultContainerRegistryFlavor            (BaseContainerRegistryFlavor)
        
    Class for default ZenML container registries.
Source code in zenml/container_registries/default_container_registry.py
          class DefaultContainerRegistryFlavor(BaseContainerRegistryFlavor):
    """Class for default ZenML container registries."""
    @property
    def name(self) -> str:
        """Name of the flavor.
        Returns:
            The name of the flavor.
        """
        return ContainerRegistryFlavor.DEFAULT.value
    @property
    def docs_url(self) -> Optional[str]:
        """A URL to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_docs_url()
    @property
    def sdk_docs_url(self) -> Optional[str]:
        """A URL to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_sdk_docs_url()
    @property
    def logo_url(self) -> str:
        """A URL to represent the flavor in the dashboard.
        Returns:
            The flavor logo.
        """
        return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/container_registry/local.svg"
docs_url: Optional[str]
  
      property
      readonly
  
    A URL to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
logo_url: str
  
      property
      readonly
  
    A URL to represent the flavor in the dashboard.
Returns:
| Type | Description | 
|---|---|
| str | The flavor logo. | 
name: str
  
      property
      readonly
  
    Name of the flavor.
Returns:
| Type | Description | 
|---|---|
| str | The name of the flavor. | 
sdk_docs_url: Optional[str]
  
      property
      readonly
  
    A URL to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
        dockerhub_container_registry
    Implementation of a DockerHub Container Registry class.
        
DockerHubContainerRegistryFlavor            (BaseContainerRegistryFlavor)
        
    Class for DockerHub Container Registry.
Source code in zenml/container_registries/dockerhub_container_registry.py
          class DockerHubContainerRegistryFlavor(BaseContainerRegistryFlavor):
    """Class for DockerHub Container Registry."""
    @property
    def name(self) -> str:
        """Name of the flavor.
        Returns:
            The name of the flavor.
        """
        return ContainerRegistryFlavor.DOCKERHUB.value
    @property
    def service_connector_requirements(
        self,
    ) -> Optional[ServiceConnectorRequirements]:
        """Service connector resource requirements for service connectors.
        Specifies resource requirements that are used to filter the available
        service connector types that are compatible with this flavor.
        Returns:
            Requirements for compatible service connectors, if a service
            connector is required for this flavor.
        """
        return ServiceConnectorRequirements(
            connector_type="docker",
            resource_type=DOCKER_REGISTRY_RESOURCE_TYPE,
            resource_id_attr="uri",
        )
    @property
    def docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_docs_url()
    @property
    def sdk_docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_sdk_docs_url()
    @property
    def logo_url(self) -> str:
        """A url to represent the flavor in the dashboard.
        Returns:
            The flavor logo.
        """
        return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/container_registry/docker.png"
docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
logo_url: str
  
      property
      readonly
  
    A url to represent the flavor in the dashboard.
Returns:
| Type | Description | 
|---|---|
| str | The flavor logo. | 
name: str
  
      property
      readonly
  
    Name of the flavor.
Returns:
| Type | Description | 
|---|---|
| str | The name of the flavor. | 
sdk_docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
service_connector_requirements: Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements]
  
      property
      readonly
  
    Service connector resource requirements for service connectors.
Specifies resource requirements that are used to filter the available service connector types that are compatible with this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements] | Requirements for compatible service connectors, if a service connector is required for this flavor. | 
        gcp_container_registry
    Implementation of a GCP Container Registry class.
        
GCPContainerRegistryFlavor            (BaseContainerRegistryFlavor)
        
    Class for GCP Container Registry.
Source code in zenml/container_registries/gcp_container_registry.py
          class GCPContainerRegistryFlavor(BaseContainerRegistryFlavor):
    """Class for GCP Container Registry."""
    @property
    def name(self) -> str:
        """Name of the flavor.
        Returns:
            The name of the flavor.
        """
        return ContainerRegistryFlavor.GCP.value
    @property
    def service_connector_requirements(
        self,
    ) -> Optional[ServiceConnectorRequirements]:
        """Service connector resource requirements for service connectors.
        Specifies resource requirements that are used to filter the available
        service connector types that are compatible with this flavor.
        Returns:
            Requirements for compatible service connectors, if a service
            connector is required for this flavor.
        """
        return ServiceConnectorRequirements(
            connector_type="gcp",
            resource_type=DOCKER_REGISTRY_RESOURCE_TYPE,
            resource_id_attr="uri",
        )
    @property
    def docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_docs_url()
    @property
    def sdk_docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_sdk_docs_url()
    @property
    def logo_url(self) -> str:
        """A url to represent the flavor in the dashboard.
        Returns:
            The flavor logo.
        """
        return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/container_registry/gcp.png"
docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
logo_url: str
  
      property
      readonly
  
    A url to represent the flavor in the dashboard.
Returns:
| Type | Description | 
|---|---|
| str | The flavor logo. | 
name: str
  
      property
      readonly
  
    Name of the flavor.
Returns:
| Type | Description | 
|---|---|
| str | The name of the flavor. | 
sdk_docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
service_connector_requirements: Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements]
  
      property
      readonly
  
    Service connector resource requirements for service connectors.
Specifies resource requirements that are used to filter the available service connector types that are compatible with this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[zenml.models.v2.misc.service_connector_type.ServiceConnectorRequirements] | Requirements for compatible service connectors, if a service connector is required for this flavor. | 
        github_container_registry
    Implementation of the GitHub Container Registry.
        
GitHubContainerRegistryConfig            (BaseContainerRegistryConfig)
        
    Configuration for the GitHub Container Registry.
Source code in zenml/container_registries/github_container_registry.py
          class GitHubContainerRegistryConfig(BaseContainerRegistryConfig):
    """Configuration for the GitHub Container Registry."""
        
GitHubContainerRegistryFlavor            (BaseContainerRegistryFlavor)
        
    Class for GitHub Container Registry.
Source code in zenml/container_registries/github_container_registry.py
          class GitHubContainerRegistryFlavor(BaseContainerRegistryFlavor):
    """Class for GitHub Container Registry."""
    @property
    def name(self) -> str:
        """Name of the flavor.
        Returns:
            The name of the flavor.
        """
        return ContainerRegistryFlavor.GITHUB
    @property
    def docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_docs_url()
    @property
    def sdk_docs_url(self) -> Optional[str]:
        """A url to point at docs explaining this flavor.
        Returns:
            A flavor docs url.
        """
        return self.generate_default_sdk_docs_url()
    @property
    def logo_url(self) -> str:
        """A url to represent the flavor in the dashboard.
        Returns:
            The flavor logo.
        """
        return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/container_registry/github.png"
docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. | 
logo_url: str
  
      property
      readonly
  
    A url to represent the flavor in the dashboard.
Returns:
| Type | Description | 
|---|---|
| str | The flavor logo. | 
name: str
  
      property
      readonly
  
    Name of the flavor.
Returns:
| Type | Description | 
|---|---|
| str | The name of the flavor. | 
sdk_docs_url: Optional[str]
  
      property
      readonly
  
    A url to point at docs explaining this flavor.
Returns:
| Type | Description | 
|---|---|
| Optional[str] | A flavor docs url. |