Skip to content

Commit 4e91959

Browse files
Add error handling for missing VuMark database deletion (#2972)
The delete_vumark_database endpoint was missing the try/except ValueError error handling present in delete_cloud_database. When no matching VuMark database exists, the set unpacking raises an unhandled ValueError, resulting in a 500 error instead of a 404 response. Added proper error handling and corresponding tests. Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 795b2a9 commit 4e91959

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

src/mock_vws/_flask_server/target_manager.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,15 @@ def delete_vumark_database(database_name: str) -> Response:
9191
9292
:status 200: The VuMark database has been deleted.
9393
"""
94-
(matching_database,) = {
95-
database
96-
for database in TARGET_MANAGER.vumark_databases
97-
if database_name == database.database_name
98-
}
94+
try:
95+
(matching_database,) = {
96+
database
97+
for database in TARGET_MANAGER.vumark_databases
98+
if database_name == database.database_name
99+
}
100+
except ValueError:
101+
return Response(response="", status=HTTPStatus.NOT_FOUND)
102+
99103
TARGET_MANAGER.remove_vumark_database(vumark_database=matching_database)
100104
return Response(response="", status=HTTPStatus.OK)
101105

tests/mock_vws/test_flask_app_usage.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,33 @@ def test_delete_database() -> None:
280280
response = requests.delete(url=delete_url, json={}, timeout=30)
281281
assert response.status_code == HTTPStatus.NOT_FOUND
282282

283+
@staticmethod
284+
def test_vumark_not_found() -> None:
285+
"""
286+
A 404 error is returned when trying to delete a VuMark database
287+
which
288+
does not exist.
289+
"""
290+
databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/vumark_databases"
291+
delete_url = databases_url + "/" + "foobar"
292+
response = requests.delete(url=delete_url, json={}, timeout=30)
293+
assert response.status_code == HTTPStatus.NOT_FOUND
294+
295+
@staticmethod
296+
def test_delete_vumark_database() -> None:
297+
"""It is possible to delete a VuMark database."""
298+
databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/vumark_databases"
299+
response = requests.post(url=databases_url, json={}, timeout=30)
300+
assert response.status_code == HTTPStatus.CREATED
301+
302+
data = json.loads(s=response.text)
303+
delete_url = databases_url + "/" + data["database_name"]
304+
response = requests.delete(url=delete_url, json={}, timeout=30)
305+
assert response.status_code == HTTPStatus.OK
306+
307+
response = requests.delete(url=delete_url, json={}, timeout=30)
308+
assert response.status_code == HTTPStatus.NOT_FOUND
309+
283310

284311
class TestQueryImageMatchers:
285312
"""Tests for query image matchers."""

0 commit comments

Comments
 (0)