Skip to content

Commit ca11d97

Browse files
authored
Merge pull request #993 from neo4j/swallow-410-instance-deletion
Make instance deletion more idempotent
2 parents 7076ca3 + 451861a commit ca11d97

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

graphdatascience/session/aura_api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,11 @@ def create_instance(
248248
return InstanceCreateDetails.from_json(response.json()["data"])
249249

250250
def delete_instance(self, instance_id: str) -> InstanceSpecificDetails | None:
251+
# Delete an AuraDB instance.
252+
# If the instance cannot be found or was already deleted, returns None.
251253
response = self._request_session.delete(f"{self._base_uri}/v1/instances/{instance_id}")
252254

253-
if response.status_code == HTTPStatus.NOT_FOUND.value:
255+
if response.status_code in [HTTPStatus.NOT_FOUND.value, HTTPStatus.GONE.value]:
254256
return None
255257

256258
self._check_resp(response)

graphdatascience/tests/unit/test_aura_api.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
import re
33
from datetime import datetime, timedelta, timezone
4+
from http import HTTPStatus
45

56
import pytest
67
from _pytest.logging import LogCaptureFixture
@@ -715,7 +716,7 @@ def test_delete_instance(requests_mock: Mocker) -> None:
715716
)
716717

717718

718-
def test_delete_already_deleting_instance(requests_mock: Mocker) -> None:
719+
def test_delete_missing_instance(requests_mock: Mocker) -> None:
719720
api = AuraApi(client_id="", client_secret="", project_id="some-tenant")
720721

721722
mock_auth_token(requests_mock)
@@ -730,6 +731,21 @@ def test_delete_already_deleting_instance(requests_mock: Mocker) -> None:
730731
assert result is None
731732

732733

734+
def test_delete_already_deleted_instance(requests_mock: Mocker) -> None:
735+
api = AuraApi(client_id="", client_secret="", project_id="some-tenant")
736+
737+
mock_auth_token(requests_mock)
738+
requests_mock.delete(
739+
"https://api.neo4j.io/v1/instances/id0",
740+
status_code=HTTPStatus.GONE,
741+
reason="Already Deleted",
742+
json={"errors": [{"message": "DB already deleted: id0", "reason": "db-already-deleted"}]},
743+
)
744+
745+
result = api.delete_instance("id0")
746+
assert result is None
747+
748+
733749
def test_delete_that_fails(requests_mock: Mocker) -> None:
734750
api = AuraApi(client_id="", client_secret="", project_id="some-tenant")
735751

0 commit comments

Comments
 (0)