from typing import ClassVar
from zenml.enums import StackComponentType
from zenml.stack import StackComponent
from zenml.utils import docker_utils
class BaseContainerRegistry(StackComponent):
"""Base class for all ZenML container registries."""
TYPE: ClassVar[StackComponentType] = StackComponentType.CONTAINER_REGISTRY
def prepare_image_push(self, image_name: str) -> None:
"""Conduct necessary checks/preparations before an image gets pushed."""
def push_image(self, image_name: str) -> None:
"""Pushes a docker image."""
if not image_name.startswith(self.uri):
f"Docker image `{image_name}` does not belong to container "
f"registry `{self.uri}`."
self.prepare_image_push(image_name)
docker_utils.push_docker_image(image_name)