Coverage for polar/exception_handlers.py: 83%
23 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
1from urllib.parse import urlencode 1a
3from fastapi import FastAPI, Request 1a
4from fastapi.encoders import jsonable_encoder 1a
5from fastapi.exceptions import RequestValidationError 1a
6from fastapi.responses import JSONResponse, RedirectResponse, Response 1a
8from polar.config import settings 1a
9from polar.exceptions import ( 1a
10 PolarError,
11 PolarRedirectionError,
12 PolarRequestValidationError,
13 ResourceNotModified,
14)
17async def polar_exception_handler(request: Request, exc: PolarError) -> JSONResponse: 1a
18 return JSONResponse( 1c
19 status_code=exc.status_code,
20 content={"error": type(exc).__name__, "detail": exc.message},
21 headers=exc.headers,
22 )
25async def request_validation_exception_handler( 1a
26 request: Request, exc: RequestValidationError | PolarRequestValidationError
27) -> JSONResponse:
28 return JSONResponse( 1c
29 status_code=422,
30 content={"error": type(exc).__name__, "detail": jsonable_encoder(exc.errors())},
31 )
34async def polar_redirection_exception_handler( 1a
35 request: Request, exc: PolarRedirectionError
36) -> RedirectResponse:
37 error_url_params = urlencode(
38 {
39 "message": exc.message,
40 "return_to": exc.return_to or settings.FRONTEND_DEFAULT_RETURN_PATH,
41 }
42 )
43 error_url = f"{settings.generate_frontend_url('/error')}?{error_url_params}"
44 return RedirectResponse(error_url, 303)
47async def polar_not_modified_handler( 1a
48 request: Request, exc: ResourceNotModified
49) -> Response:
50 return Response(status_code=exc.status_code)
53def add_exception_handlers(app: FastAPI) -> None: 1a
54 app.add_exception_handler(
55 PolarRedirectionError,
56 polar_redirection_exception_handler, # type: ignore
57 )
58 app.add_exception_handler(
59 ResourceNotModified,
60 polar_not_modified_handler, # type: ignore
61 )
63 app.add_exception_handler(
64 RequestValidationError,
65 request_validation_exception_handler, # type: ignore
66 )
67 app.add_exception_handler(
68 PolarRequestValidationError,
69 request_validation_exception_handler, # type: ignore
70 )
71 app.add_exception_handler(PolarError, polar_exception_handler) # type: ignore