Skip to content

Commit ea16769

Browse files
authored
fix: catch exceptions for get_table (#3)
* fix: 404 error returns empty response * fix: raises exception from powerplatform-client * linter * fix: test not included in last commit
1 parent fa10516 commit ea16769

2 files changed

Lines changed: 56 additions & 5 deletions

File tree

aind-dataverse-service-server/src/aind_dataverse_service_server/route.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from typing import List
44

5-
from fastapi import APIRouter, Path, status
5+
from fastapi import APIRouter, HTTPException, Path, status
66
from aind_dataverse_service_server.models import HealthCheck, EntityTableRow
77
from fastapi_cache.decorator import cache
88
from azure.core.credentials import AccessToken
@@ -87,9 +87,15 @@ async def get_table(
8787
body = allen_powerplatform_client.GetTableRequest(
8888
table_name=entity_set_table_name
8989
)
90-
api_response = api_instance.get_table(
91-
api_version=api_version, body=body
92-
)
90+
try:
91+
api_response = api_instance.get_table(
92+
api_version=api_version, body=body, _request_timeout=10
93+
)
94+
except allen_powerplatform_client.exceptions.ApiException as e:
95+
raise HTTPException(
96+
status_code=e.status,
97+
detail=f"Error fetching {entity_set_table_name}: {e.reason}",
98+
)
9399
return api_response
94100

95101

aind-dataverse-service-server/tests/test_route.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66
from azure.core.credentials import AccessToken
77
from starlette.testclient import TestClient
8-
8+
from allen_powerplatform_client.exceptions import NotFoundException
99
from aind_dataverse_service_server.route import get_access_token
1010

1111

@@ -69,6 +69,51 @@ def test_get_table_200_response(
6969
assert isinstance(response.json(), list)
7070
assert len(response.json()) == 2
7171

72+
@patch(
73+
"aind_dataverse_service_server.route."
74+
"allen_powerplatform_client.DefaultApi"
75+
)
76+
@patch(
77+
"aind_dataverse_service_server.route."
78+
"allen_powerplatform_client.ApiClient"
79+
)
80+
@patch("aind_dataverse_service_server.route.get_access_token")
81+
def test_get_table_exception_response(
82+
self,
83+
mock_get_token: MagicMock,
84+
mock_api_client: MagicMock,
85+
mock_default_api: MagicMock,
86+
client: TestClient,
87+
mock_table_data,
88+
):
89+
"""Tests error is properly handled during table data retrieval"""
90+
91+
mock_get_token.return_value = "mock_token"
92+
mock_instance = MagicMock()
93+
94+
# Create a proper NotFoundException instance with required attributes
95+
mock_http_resp = MagicMock()
96+
mock_http_resp.status = 404
97+
mock_http_resp.reason = "Not Found"
98+
not_found_exception = NotFoundException(
99+
http_resp=mock_http_resp,
100+
body="",
101+
data=None,
102+
)
103+
not_found_exception.status = 404
104+
not_found_exception.reason = "Not Found"
105+
106+
mock_instance.get_table.side_effect = not_found_exception
107+
mock_default_api.return_value = mock_instance
108+
mock_api_client.return_value.__enter__.return_value = MagicMock()
109+
110+
response = client.get("/tables/non_existent_table")
111+
assert 404 == response.status_code
112+
assert (
113+
"Error fetching non_existent_table"
114+
in response.json()["detail"]
115+
)
116+
72117
@patch(
73118
"aind_dataverse_service_server.route."
74119
"allen_powerplatform_client.DefaultApi"

0 commit comments

Comments
 (0)