Skip to content

Commit 44c9463

Browse files
eli-425 custom error for person value (#335)
* custom error for person value * formatting --------- Co-authored-by: karthikeyannhs <[email protected]>
1 parent 2edc8b8 commit 44c9463

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

src/eligibility_signposting_api/common/error_handler.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,26 @@
66
from werkzeug.exceptions import HTTPException
77

88
from eligibility_signposting_api.common.api_error_response import INTERNAL_SERVER_ERROR
9+
from eligibility_signposting_api.services.processors.token_processor import TokenError
910

1011
logger = logging.getLogger(__name__)
1112

1213

1314
def handle_exception(e: Exception) -> ResponseReturnValue | HTTPException:
14-
logger.exception("Unexpected Exception", exc_info=e)
15-
16-
# Let Flask handle its own exceptions for now.
1715
if isinstance(e, HTTPException):
1816
return e
1917

20-
full_traceback = "".join(traceback.format_exception(e))
18+
if isinstance(e, TokenError):
19+
tb = traceback.extract_tb(e.__traceback__)
20+
clean_traceback = "".join(traceback.format_list(tb))
21+
logger.error("A ValueError occurred (value redacted). Traceback follows:\n%s", clean_traceback)
22+
log_msg = f"An unexpected error occurred: {clean_traceback}"
23+
else:
24+
full_traceback = "".join(traceback.format_exception(e))
25+
logger.exception("Unexpected Exception", exc_info=e)
26+
log_msg = f"An unexpected error occurred: {full_traceback}"
27+
2128
response = INTERNAL_SERVER_ERROR.log_and_generate_response(
22-
log_message=f"An unexpected error occurred: {full_traceback}", diagnostics="An unexpected error occurred."
29+
log_message=log_msg, diagnostics="An unexpected error occurred."
2330
)
2431
return make_response(response.get("body"), response.get("statusCode"), response.get("headers"))

src/eligibility_signposting_api/services/processors/token_processor.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
}
2525

2626

27+
class TokenError(Exception):
28+
"""Person value error."""
29+
30+
2731
@service
2832
class TokenProcessor:
2933
@staticmethod
@@ -130,6 +134,6 @@ def apply_formatting[T](attributes: dict[str, T], attribute_name: str, date_form
130134
except AttributeError as error:
131135
message = "Invalid token format"
132136
raise AttributeError(message) from error
133-
except Exception as error:
137+
except ValueError as error:
134138
message = "Invalid value error"
135-
raise ValueError(message) from error
139+
raise TokenError(message) from error

tests/unit/processor/test_token_processor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from eligibility_signposting_api.services.processors.token_processor import TokenProcessor
3+
from eligibility_signposting_api.services.processors.token_processor import TokenError, TokenProcessor
44

55

66
@pytest.mark.parametrize(
@@ -49,5 +49,5 @@ def test_apply_formatting_raises_value_error_on_invalid_date():
4949
attribute_value = "DATE_OF_BIRTH"
5050
date_format = "%Y-%m-%d"
5151

52-
with pytest.raises(ValueError, match="Invalid value error$"):
52+
with pytest.raises(TokenError, match="Invalid value error"):
5353
TokenProcessor.apply_formatting(attribute, attribute_value, date_format)

0 commit comments

Comments
 (0)