Skip to content

Commit 97f59dc

Browse files
authored
Add trace id to dwb import error (#34)
* Added trace id to error response
1 parent 96b4364 commit 97f59dc

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

src/dataworkbench/gateway.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Any
22
import requests
33
from uuid import UUID
4+
import json
45

56
from dataworkbench.utils import get_secret
67
from dataworkbench.auth import TokenManager
@@ -10,6 +11,11 @@
1011
logger = setup_logger(__name__)
1112

1213

14+
def _get_trace_id_from_response(response: requests.Response) -> str | None:
15+
response_dict = json.loads(response.text)
16+
return response_dict.get("traceId")
17+
18+
1319
class Gateway:
1420
"""
1521
Handles interactions with the remote data gateway API.
@@ -135,7 +141,19 @@ def import_dataset(
135141
logger.info(f"Sending request to import dataset: {dataset_name}")
136142

137143
try:
138-
return self.__send_request(url, payload)
144+
response = self.__send_request(url, payload)
145+
logger.info(
146+
f"Successfully imported dataset {dataset_name} to Data Workbench"
147+
)
148+
return response
139149
except requests.exceptions.RequestException as e:
150+
trace_id = (
151+
_get_trace_id_from_response(e.response)
152+
if e.response is not None
153+
else None
154+
)
140155
logger.error(f"Error creating data catalog entry: {e}")
141-
raise
156+
return {
157+
"error": "Failed to create data catalog entry.",
158+
"correlation-id": trace_id,
159+
}

tests/test_gateway.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import requests
33
from unittest.mock import patch, MagicMock
44
from dataworkbench.gateway import Gateway
5-
from requests.exceptions import RequestException
5+
import json
66

77
@pytest.fixture
88
def mock_gateway():
@@ -34,9 +34,20 @@ def test_import_dataset_success(mock_gateway, mock_post):
3434

3535
def test_import_dataset_failure(mock_gateway, mock_post):
3636
"""Test dataset import failure."""
37-
mock_post.side_effect = requests.exceptions.RequestException("Request failed")
3837

39-
with pytest.raises(RequestException):
40-
mock_gateway.import_dataset("dataset_name", "dataset_description", "schema_id", {"tag": "value"}, "folder_id")
38+
response_body = {"type":"BusinessError","traceId":"8b01e7eb14484611add6138618daf112"}
4139

40+
mock_response = MagicMock()
41+
mock_response.return_value.status_code = 400
42+
mock_response.text = json.dumps(response_body)
43+
44+
http_error = requests.exceptions.HTTPError()
45+
http_error.response = mock_response
46+
47+
mock_response.raise_for_status.side_effect = http_error
48+
mock_post.return_value = mock_response
49+
50+
result = mock_gateway.import_dataset("dataset_name", "dataset_description", "schema_id", {"tag": "value"}, "folder_id")
51+
52+
assert result == {"error": "Failed to create data catalog entry.", "correlation-id": response_body["traceId"]}
4253
mock_post.assert_called_once()

0 commit comments

Comments
 (0)