16
16
router_registry = APIRouter (tags = ["registry" ])
17
17
18
18
19
- def _json_response (data , status = 200 , mimetype = "application/json" , deprecated = False ):
19
+ def _json_response (data , status = 200 , mimetype = "application/json" ):
20
20
response = Response (
21
21
content = json .dumps (data , indent = 3 ), status_code = status , media_type = mimetype
22
22
)
23
23
response .headers ["Docker-Distribution-Api-Version" ] = "registry/2.0"
24
- if deprecated :
25
- response .headers ["Deprecation " ] = "True "
24
+ response . headers [ "Deprecation" ] = "True"
25
+ response .headers ["Sunset " ] = "Mon, 16 Feb 2025 23:59:59 UTC "
26
26
return response
27
27
28
28
29
- def docker_error_message (docker_registry_error : schema .DockerRegistryError , deprecated = False ):
29
+ def docker_error_message (docker_registry_error : schema .DockerRegistryError ):
30
30
response = _json_response (
31
31
{
32
32
"errors" : [
@@ -38,7 +38,6 @@ def docker_error_message(docker_registry_error: schema.DockerRegistryError, depr
38
38
]
39
39
},
40
40
status = docker_registry_error .value ["status" ],
41
- deprecated = deprecated
42
41
)
43
42
44
43
if docker_registry_error == schema .DockerRegistryError .UNAUTHORIZED :
@@ -82,16 +81,16 @@ def replace_words(s, words):
82
81
83
82
def get_docker_image_manifest (conda_store , image , tag , timeout = 10 * 60 ):
84
83
namespace , * image_name = image .split ("/" )
85
- response_headers = {"Deprecation" : "True" }
84
+ response_headers = {"Deprecation" : "True" , "Sunset" : "Mon, 16 Feb 2025 23:59:59 UTC" }
86
85
87
86
# /v2/<image-name>/manifest/<tag>
88
87
if len (image_name ) == 0 :
89
- return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN , deprecated = True )
88
+ return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN )
90
89
91
90
if namespace == "conda-store-dynamic" :
92
91
environment_name = dynamic_conda_store_environment (conda_store , image_name )
93
92
elif len (image_name ) > 1 :
94
- return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN , deprecated = True )
93
+ return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN )
95
94
else :
96
95
environment_name = image_name [0 ]
97
96
@@ -100,7 +99,7 @@ def get_docker_image_manifest(conda_store, image, tag, timeout=10 * 60):
100
99
conda_store .db , namespace = namespace , name = environment_name
101
100
)
102
101
if environment is None :
103
- return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN , deprecated = True )
102
+ return docker_error_message (schema .DockerRegistryError .NAME_UNKNOWN )
104
103
105
104
if tag == "latest" :
106
105
build_key = environment .current_build .build_key
@@ -113,27 +112,27 @@ def get_docker_image_manifest(conda_store, image, tag, timeout=10 * 60):
113
112
114
113
build_id = orm .Build .parse_build_key (conda_store , build_key )
115
114
if build_id is None :
116
- return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN , deprecated = True )
115
+ return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN )
117
116
118
117
build = api .get_build (conda_store .db , build_id )
119
118
if build is None :
120
- return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN , deprecated = True )
119
+ return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN )
121
120
122
121
# waiting for image to be built by conda-store
123
122
start_time = time .time ()
124
123
while not build .has_docker_manifest :
125
124
conda_store .db .refresh (build )
126
125
time .sleep (10 )
127
126
if time .time () - start_time > timeout :
128
- return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN , deprecated = True )
127
+ return docker_error_message (schema .DockerRegistryError .MANIFEST_UNKNOWN )
129
128
130
129
manifests_key = f"docker/manifest/{ build_key } "
131
130
return RedirectResponse (conda_store .storage .get_url (manifests_key ), response_headers = response_headers )
132
131
133
132
134
133
def get_docker_image_blob (conda_store , image , blobsum ):
135
134
blob_key = f"docker/blobs/{ blobsum } "
136
- response_headers = {"Deprecation" : "True" }
135
+ response_headers = {"Deprecation" : "True" , "Sunset" : "Mon, 16 Feb 2025 23:59:59 UTC" }
137
136
return RedirectResponse (conda_store .storage .get_url (blob_key ), response_headers = response_headers )
138
137
139
138
@@ -143,9 +142,9 @@ def v2(
143
142
entity = Depends (dependencies .get_entity ),
144
143
):
145
144
if entity is None :
146
- return docker_error_message (schema .DockerRegistryError .UNAUTHORIZED , deprecated = True )
145
+ return docker_error_message (schema .DockerRegistryError .UNAUTHORIZED )
147
146
148
- return _json_response ({}, deprecated = True )
147
+ return _json_response ({})
149
148
150
149
151
150
@router_registry .get (
@@ -160,10 +159,10 @@ def list_tags(
160
159
):
161
160
parts = rest .split ("/" )
162
161
if len (parts ) <= 3 :
163
- return docker_error_message (schema .DockerRegistryError .UNSUPPORTED , deprecated = True )
162
+ return docker_error_message (schema .DockerRegistryError .UNSUPPORTED )
164
163
165
164
if entity is None :
166
- return docker_error_message (schema .DockerRegistryError .UNAUTHORIZED , deprecated = True )
165
+ return docker_error_message (schema .DockerRegistryError .UNAUTHORIZED )
167
166
168
167
image = "/" .join (parts [:- 2 ])
169
168
@@ -180,7 +179,7 @@ def list_tags(
180
179
)
181
180
except HTTPException as e :
182
181
if e .status_code == 403 :
183
- return docker_error_message (schema .DockerRegistryError .DENIED , deprecated = True )
182
+ return docker_error_message (schema .DockerRegistryError .DENIED )
184
183
185
184
# /v2/<image>/tags/list
186
185
if parts [- 2 :] == ["tags" , "list" ]:
0 commit comments