Skip to content

Commit 9c4bb3b

Browse files
author
Andrei Neagu
committed
fixed issue with get_image_name_and_tag
1 parent 306fe84 commit 9c4bb3b

File tree

2 files changed

+45
-5
lines changed

2 files changed

+45
-5
lines changed

packages/service-library/src/servicelib/docker_utils.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,17 @@ def get_image_complete_url(
134134

135135

136136
def get_image_name_and_tag(image_complete_url: URL) -> tuple[str, str]:
137-
if "sha256" in f"{image_complete_url}":
138-
parts = image_complete_url.path.split("@")
137+
parent = f"{image_complete_url.parent}"
138+
no_parent_image_url = f"{image_complete_url}".strip(parent)
139+
if "sha256" in no_parent_image_url:
140+
parts = no_parent_image_url.split("@")
141+
to_split = parts[0]
139142
else:
140-
parts = image_complete_url.path.split(":")
141-
return parts[0].strip("/"), parts[1]
143+
to_split = no_parent_image_url
144+
145+
parts = to_split.split(":")
146+
image_name = parts[0].strip("/")
147+
return f"{parent}/{image_name}".lstrip("/"), parts[1]
142148

143149

144150
@dataclass

packages/service-library/tests/test_docker_utils.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from datetime import datetime, timezone
33

44
import pytest
5-
from servicelib.docker_utils import to_datetime
5+
from servicelib.docker_utils import get_image_name_and_tag, to_datetime
6+
from yarl import URL
67

78
NOW = datetime.now(tz=timezone.utc)
89

@@ -41,3 +42,36 @@
4142
def test_to_datetime(docker_time: str, expected_datetime: datetime):
4243
received_datetime = to_datetime(docker_time)
4344
assert received_datetime == expected_datetime
45+
46+
47+
@pytest.mark.parametrize(
48+
"image, expected_name, expected_tag",
49+
[
50+
("my_image:latest", "my_image", "latest"),
51+
("my_image:1.1.1", "my_image", "1.1.1"),
52+
("my_image:latest@sha256:1234567890abcdef", "my_image", "latest"),
53+
("my_image:1.1.1@sha256:1234567890abcdef", "my_image", "1.1.1"),
54+
("docker.io/my_image:latest", "docker.io/my_image", "latest"),
55+
("docker.io/my_image:1.1.1", "docker.io/my_image", "1.1.1"),
56+
(
57+
"docker.io/my_image:1.1.1@sha256:1234567890abcdef",
58+
"docker.io/my_image",
59+
"1.1.1",
60+
),
61+
("registry:5000/my_image:1.1.1", "registry:5000/my_image", "1.1.1"),
62+
(
63+
"registry:5000/my_image:1.1.1@sha256:1234567890abcdef",
64+
"registry:5000/my_image",
65+
"1.1.1",
66+
),
67+
(
68+
"registry:5000/simcore/services/dynamic/jupyter-fenics:1.1.2",
69+
"registry:5000/simcore/services/dynamic/jupyter-fenics",
70+
"1.1.2",
71+
),
72+
],
73+
)
74+
def test_get_image_name_and_tag(image: str, expected_name: str, expected_tag: str):
75+
name, tag = get_image_name_and_tag(URL(image))
76+
assert name == expected_name
77+
assert tag == expected_tag

0 commit comments

Comments
 (0)