Skip to content

Commit 858623c

Browse files
authored
Add support for deployments.delete endpoint (#331)
Resolves #330 Signed-off-by: Mattt Zmuda <[email protected]>
1 parent b0bbc04 commit 858623c

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

replicate/deployment.py

+26
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,32 @@ async def async_update(
356356

357357
return _json_to_deployment(self._client, resp.json())
358358

359+
def delete(self, deployment_owner: str, deployment_name: str) -> None:
360+
"""
361+
Delete an existing deployment.
362+
363+
Args:
364+
deployment_owner: The owner of the deployment.
365+
deployment_name: The name of the deployment.
366+
"""
367+
self._client._request(
368+
"DELETE",
369+
f"/v1/deployments/{deployment_owner}/{deployment_name}",
370+
)
371+
372+
async def async_delete(self, deployment_owner: str, deployment_name: str) -> None:
373+
"""
374+
Delete an existing deployment asynchronously.
375+
376+
Args:
377+
deployment_owner: The owner of the deployment.
378+
deployment_name: The name of the deployment.
379+
"""
380+
await self._client._async_request(
381+
"DELETE",
382+
f"/v1/deployments/{deployment_owner}/{deployment_name}",
383+
)
384+
359385
@property
360386
def predictions(self) -> "DeploymentsPredictions":
361387
"""

tests/test_deployment.py

+30
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@
178178
)
179179
)
180180

181+
router.route(
182+
method="DELETE",
183+
path="/deployments/acme/image-upscaler",
184+
name="deployments.delete",
185+
).mock(return_value=httpx.Response(204))
181186

182187
router.route(host="api.replicate.com").pass_through()
183188

@@ -399,3 +404,28 @@ async def test_update_deployment(async_flag):
399404
assert updated_deployment.current_release.configuration.hardware == "gpu-v100"
400405
assert updated_deployment.current_release.configuration.min_instances == 2
401406
assert updated_deployment.current_release.configuration.max_instances == 10
407+
408+
409+
@respx.mock
410+
@pytest.mark.asyncio
411+
@pytest.mark.parametrize("async_flag", [True, False])
412+
async def test_delete_deployment(async_flag):
413+
client = Client(
414+
api_token="test-token", transport=httpx.MockTransport(router.handler)
415+
)
416+
417+
if async_flag:
418+
await client.deployments.async_delete(
419+
deployment_owner="acme", deployment_name="image-upscaler"
420+
)
421+
else:
422+
client.deployments.delete(
423+
deployment_owner="acme", deployment_name="image-upscaler"
424+
)
425+
426+
assert router["deployments.delete"].called
427+
assert router["deployments.delete"].calls[0].request.method == "DELETE"
428+
assert (
429+
router["deployments.delete"].calls[0].request.url
430+
== "https://api.replicate.com/v1/deployments/acme/image-upscaler"
431+
)

0 commit comments

Comments
 (0)