diff --git a/behave_utils/docker.py b/behave_utils/docker.py index 5873d509bcbc74f713280b651107c266b2b572c2..72eb7a15dce49553b9394a1fd7febf7980a8cab4 100644 --- a/behave_utils/docker.py +++ b/behave_utils/docker.py @@ -174,6 +174,8 @@ class Image(Item): Docker image items """ + _cache = dict[str, str]() + T = TypeVar('T', bound='Image') def __init__(self, iid: str): @@ -200,10 +202,23 @@ class Image(Item): """ Pull an image from a registry """ - docker(b"pull", repository) - iid = Item(repository).inspect().path('$.Id', str) + try: + iid = cls._cache[repository] + except KeyError: + docker(b"pull", repository) + iid = cls._process_image(repository) return cls(iid) + @classmethod + def _process_image(cls, reference: str) -> str: + report = Item(reference).inspect() + iid = report.path("$.Id", str) + cls._cache.update( + ((tag, iid) for tag in report.path("$.RepoTags", list[str])), + reference=iid, + ) + return iid + def get_id(self) -> str: """ Return an identifier for the Docker Image