From ef5f91ec53f02f314f27222452e3d18cd291c128 Mon Sep 17 00:00:00 2001 From: aditya047-stack Date: Sat, 7 Mar 2026 13:57:02 +0530 Subject: [PATCH 1/2] fix: return 400/501 instead of 500 for invalid country codes - Add not_implemented_501() helper in models/responses.py- Fix /subdivisions to return 501 for unsupported countries- Fix /data, /flag, /name, /officialname to return 400 for invalid codes- Separate ValueError and NotImplementedError handling --- src/models/responses.py | 21 +++++++++++++++++++++ src/routes/geo/country.py | 14 +++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/models/responses.py b/src/models/responses.py index 98924fc..3193b4e 100644 --- a/src/models/responses.py +++ b/src/models/responses.py @@ -36,3 +36,24 @@ def ok_200(data: Any = None) -> JSONResponse: status_code=status.HTTP_200_OK, content={"data": data} ) + +def not_implemented_501(msg: Optional[str] = None) -> HTTPException: + return HTTPException( + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail=HTTPStatus.NOT_IMPLEMENTED(1) if msg is None else msg, + ) + + + + + + + + + + + + + + + diff --git a/src/routes/geo/country.py b/src/routes/geo/country.py index 065f6f2..e8c6a4c 100644 --- a/src/routes/geo/country.py +++ b/src/routes/geo/country.py @@ -20,6 +20,8 @@ async def get_country_data(data: CountryCodeModel = Depends()): try: res = co.code_to_data(data.code) return ok_200(res) + except ValueError as e: + raise bad_request_400(str(e)) except Exception as e: raise internal_error_500() @@ -29,6 +31,8 @@ async def get_country_flag(data: CountryCodeModel = Depends()): try: res = co.code_to_flag(data.code) return ok_200(res) + except ValueError as e: + raise bad_request_400(str(e)) except Exception as e: raise internal_error_500() @@ -38,15 +42,18 @@ async def get_country_name(data: CountryCodeModel = Depends()): try: res = co.code_to_popular_name(data.code) return ok_200(res) + except ValueError as e: + raise bad_request_400(str(e)) except Exception as e: raise internal_error_500() - @country_router.get("/officialname") async def get_official_country_name(data: CountryCodeModel = Depends()): try: res = co.code_to_official_name(data.code) return ok_200(res) + except ValueError as e: + raise bad_request_400(str(e)) except Exception as e: raise internal_error_500() @@ -56,5 +63,10 @@ async def get_country_subdivisions(data: CountryCodeModel = Depends()): try: res = co.code_to_subdivision(data.code) return ok_200(res) + + except ValueError as e: + raise bad_request_400(str(e)) + except NotImplementedError as e: + raise not_implemented_501(str(e)) except Exception as e: raise internal_error_500() From f076294c31673707a57434e3d6713ad03abacd78 Mon Sep 17 00:00:00 2001 From: aditya047-stack Date: Sat, 7 Mar 2026 15:44:47 +0530 Subject: [PATCH 2/2] fix: return 404 instead of 500 for invalid country codes --- src/routes/geo/country.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/routes/geo/country.py b/src/routes/geo/country.py index e8c6a4c..85f4196 100644 --- a/src/routes/geo/country.py +++ b/src/routes/geo/country.py @@ -1,5 +1,6 @@ from fastapi import APIRouter, Depends import foss42.geo.country as co + from models.geo.country import CountryCodeModel from models.responses import * @@ -21,7 +22,7 @@ async def get_country_data(data: CountryCodeModel = Depends()): res = co.code_to_data(data.code) return ok_200(res) except ValueError as e: - raise bad_request_400(str(e)) + raise not_found_404(str(e)) except Exception as e: raise internal_error_500() @@ -32,7 +33,7 @@ async def get_country_flag(data: CountryCodeModel = Depends()): res = co.code_to_flag(data.code) return ok_200(res) except ValueError as e: - raise bad_request_400(str(e)) + raise not_found_404(str(e)) except Exception as e: raise internal_error_500() @@ -43,7 +44,7 @@ async def get_country_name(data: CountryCodeModel = Depends()): res = co.code_to_popular_name(data.code) return ok_200(res) except ValueError as e: - raise bad_request_400(str(e)) + raise not_found_404(str(e)) except Exception as e: raise internal_error_500() @@ -53,7 +54,7 @@ async def get_official_country_name(data: CountryCodeModel = Depends()): res = co.code_to_official_name(data.code) return ok_200(res) except ValueError as e: - raise bad_request_400(str(e)) + raise not_found_404(str(e)) except Exception as e: raise internal_error_500() @@ -65,7 +66,7 @@ async def get_country_subdivisions(data: CountryCodeModel = Depends()): return ok_200(res) except ValueError as e: - raise bad_request_400(str(e)) + raise not_found_404(str(e)) except NotImplementedError as e: raise not_implemented_501(str(e)) except Exception as e: