From 086018525d96b40a2ee41b3d14af6e1c55fc5f44 Mon Sep 17 00:00:00 2001 From: Anders Westrheim Date: Wed, 23 Apr 2025 10:44:47 +0200 Subject: [PATCH 1/5] Added trace id to error response --- src/dataworkbench/gateway.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/dataworkbench/gateway.py b/src/dataworkbench/gateway.py index 0e3132b..262f600 100644 --- a/src/dataworkbench/gateway.py +++ b/src/dataworkbench/gateway.py @@ -1,6 +1,7 @@ from typing import Any import requests from uuid import UUID +import json from dataworkbench.utils import get_secret from dataworkbench.auth import TokenManager @@ -10,6 +11,11 @@ logger = setup_logger(__name__) +def _get_trace_id_from_response(response: requests.Response) -> str | None: + response_dict = json.loads(response.text) + return response_dict.get("traceId") + + class Gateway: """ Handles interactions with the remote data gateway API. @@ -135,7 +141,19 @@ def import_dataset( logger.info(f"Sending request to import dataset: {dataset_name}") try: - return self.__send_request(url, payload) + response = self.__send_request(url, payload) + logger.info( + f"Successfully imported dataset {dataset_name} to Data Workbench" + ) + return response except requests.exceptions.RequestException as e: + trace_id = ( + _get_trace_id_from_response(e.response) + if e.response is not None + else None + ) logger.error(f"Error creating data catalog entry: {e}") - return {"error": f"Failed to create data catalog entry: {str(e)}"} + return { + "Error ID": trace_id, + "error": "Failed to create data catalog entry.", + } From 03d090d2c562e769977f38c008f3debfce153069 Mon Sep 17 00:00:00 2001 From: Anders Westrheim Date: Wed, 23 Apr 2025 12:59:50 +0200 Subject: [PATCH 2/5] Fixed bugs in unit tests --- src/dataworkbench/gateway.py | 2 +- tests/test_gateway.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/dataworkbench/gateway.py b/src/dataworkbench/gateway.py index 262f600..7ccdd55 100644 --- a/src/dataworkbench/gateway.py +++ b/src/dataworkbench/gateway.py @@ -154,6 +154,6 @@ def import_dataset( ) logger.error(f"Error creating data catalog entry: {e}") return { - "Error ID": trace_id, + "error ID": trace_id, "error": "Failed to create data catalog entry.", } diff --git a/tests/test_gateway.py b/tests/test_gateway.py index 87e3f4c..159399d 100644 --- a/tests/test_gateway.py +++ b/tests/test_gateway.py @@ -2,6 +2,7 @@ import requests from unittest.mock import patch, MagicMock from dataworkbench.gateway import Gateway +import json @pytest.fixture def mock_gateway(): @@ -33,9 +34,20 @@ def test_import_dataset_success(mock_gateway, mock_post): def test_import_dataset_failure(mock_gateway, mock_post): """Test dataset import failure.""" - mock_post.side_effect = requests.exceptions.RequestException("Request failed") + + response_body = {"type":"BusinessError","traceId":"8b01e7eb14484611add6138618daf112"} + + mock_response = MagicMock() + mock_response.return_value.status_code = 400 + mock_response.text = json.dumps(response_body) + + http_error = requests.exceptions.HTTPError() + http_error.response = mock_response + + mock_response.raise_for_status.side_effect = http_error + mock_post.return_value = mock_response result = mock_gateway.import_dataset("dataset_name", "dataset_description", "schema_id", {"tag": "value"}, "folder_id") - assert result == {"error": "Failed to create data catalog entry: Request failed"} + assert result == {"error ID": response_body["traceId"], "error": "Failed to create data catalog entry."} mock_post.assert_called_once() From afdc6437e997678e19903da7baa26eb6ea2685a4 Mon Sep 17 00:00:00 2001 From: Anders Westrheim Date: Thu, 24 Apr 2025 11:05:05 +0200 Subject: [PATCH 3/5] Renamed error id to correlation_id --- src/dataworkbench/gateway.py | 2 +- tests/test_gateway.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dataworkbench/gateway.py b/src/dataworkbench/gateway.py index 7ccdd55..2e9e2b3 100644 --- a/src/dataworkbench/gateway.py +++ b/src/dataworkbench/gateway.py @@ -154,6 +154,6 @@ def import_dataset( ) logger.error(f"Error creating data catalog entry: {e}") return { - "error ID": trace_id, "error": "Failed to create data catalog entry.", + "correlation_id": trace_id, } diff --git a/tests/test_gateway.py b/tests/test_gateway.py index 159399d..924bd8a 100644 --- a/tests/test_gateway.py +++ b/tests/test_gateway.py @@ -49,5 +49,5 @@ def test_import_dataset_failure(mock_gateway, mock_post): result = mock_gateway.import_dataset("dataset_name", "dataset_description", "schema_id", {"tag": "value"}, "folder_id") - assert result == {"error ID": response_body["traceId"], "error": "Failed to create data catalog entry."} + assert result == {"error": "Failed to create data catalog entry.", "correlation_id": response_body["traceId"]} mock_post.assert_called_once() From a7c4f34fd8e86b6b253c8021e29200aa8c9d1b9f Mon Sep 17 00:00:00 2001 From: Anders Westrheim Date: Thu, 24 Apr 2025 11:11:34 +0200 Subject: [PATCH 4/5] renamed to correlation-id --- src/dataworkbench/gateway.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dataworkbench/gateway.py b/src/dataworkbench/gateway.py index 2e9e2b3..dff246d 100644 --- a/src/dataworkbench/gateway.py +++ b/src/dataworkbench/gateway.py @@ -155,5 +155,5 @@ def import_dataset( logger.error(f"Error creating data catalog entry: {e}") return { "error": "Failed to create data catalog entry.", - "correlation_id": trace_id, + "correlation-id": trace_id, } From df518c38a188268174f0559d601d9eb1e70c916e Mon Sep 17 00:00:00 2001 From: Anders Westrheim Date: Thu, 24 Apr 2025 11:13:42 +0200 Subject: [PATCH 5/5] fixed faulty test --- tests/test_gateway.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_gateway.py b/tests/test_gateway.py index 924bd8a..64707a9 100644 --- a/tests/test_gateway.py +++ b/tests/test_gateway.py @@ -49,5 +49,5 @@ def test_import_dataset_failure(mock_gateway, mock_post): result = mock_gateway.import_dataset("dataset_name", "dataset_description", "schema_id", {"tag": "value"}, "folder_id") - assert result == {"error": "Failed to create data catalog entry.", "correlation_id": response_body["traceId"]} + assert result == {"error": "Failed to create data catalog entry.", "correlation-id": response_body["traceId"]} mock_post.assert_called_once()