From 1056deec9a12caa55e1eb4b31e2dfa65c7d6c3ed Mon Sep 17 00:00:00 2001 From: Heron Valev Date: Fri, 17 Apr 2026 17:10:34 +0100 Subject: [PATCH 1/3] Add custom 404 page for web routes --- src/main.py | 19 +++++++++++++++++- src/templates/404.html | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/templates/404.html diff --git a/src/main.py b/src/main.py index cba520c..6bae176 100644 --- a/src/main.py +++ b/src/main.py @@ -4,8 +4,9 @@ import logfire from fastapi import FastAPI, HTTPException, Request -from fastapi.responses import HTMLResponse, PlainTextResponse +from fastapi.responses import HTMLResponse, PlainTextResponse, JSONResponse from fastapi.staticfiles import StaticFiles +from starlette.exceptions import HTTPException as StarletteHTTPException from src.settings import settings from src.templates_conf import templates @@ -29,6 +30,22 @@ def read_root(request: Request): return templates.TemplateResponse(request=request, name='index.html') +@app.exception_handler(StarletteHTTPException) +def custom_http_exception_handler(request: Request, exc: StarletteHTTPException): + if exc.status_code == 404: + if request.url.path.startswith('/api'): + return JSONResponse(status_code=404, content={'detail': 'Not Found'}) + + return templates.TemplateResponse( + request=request, + name='404.html', + context={'path': request.url.path}, + status_code=404, + ) + + raise exc + + @app.get('/api/list', response_class=PlainTextResponse) def list_templates(): """ diff --git a/src/templates/404.html b/src/templates/404.html new file mode 100644 index 0000000..d88c434 --- /dev/null +++ b/src/templates/404.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + 404 | Do Not Commit by Artefatto + + + + + + + +
+

Artefatto

+ +
+ +
+
+

404
Not Found

+

The page {{ path }} does not exist.

+

Go back home

+
+
+ + + + \ No newline at end of file From 9765be581017c41cd238c17f93c8536a14bd72c2 Mon Sep 17 00:00:00 2001 From: ivansantiagojr Date: Sun, 26 Apr 2026 19:49:55 -0300 Subject: [PATCH 2/3] Format with ruff --- src/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main.py b/src/main.py index 6bae176..832f82f 100644 --- a/src/main.py +++ b/src/main.py @@ -4,7 +4,7 @@ import logfire from fastapi import FastAPI, HTTPException, Request -from fastapi.responses import HTMLResponse, PlainTextResponse, JSONResponse +from fastapi.responses import HTMLResponse, JSONResponse, PlainTextResponse from fastapi.staticfiles import StaticFiles from starlette.exceptions import HTTPException as StarletteHTTPException @@ -31,10 +31,14 @@ def read_root(request: Request): @app.exception_handler(StarletteHTTPException) -def custom_http_exception_handler(request: Request, exc: StarletteHTTPException): +def custom_http_exception_handler( + request: Request, exc: StarletteHTTPException +): if exc.status_code == 404: if request.url.path.startswith('/api'): - return JSONResponse(status_code=404, content={'detail': 'Not Found'}) + return JSONResponse( + status_code=404, content={'detail': 'Not Found'} + ) return templates.TemplateResponse( request=request, From 4da7f6589f5b62e4cb574e26551ced15b8661d31 Mon Sep 17 00:00:00 2001 From: ivansantiagojr Date: Sun, 26 Apr 2026 19:52:05 -0300 Subject: [PATCH 3/3] Change magic numbers for HTTPStatus enum --- src/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main.py b/src/main.py index 832f82f..acc9615 100644 --- a/src/main.py +++ b/src/main.py @@ -34,10 +34,11 @@ def read_root(request: Request): def custom_http_exception_handler( request: Request, exc: StarletteHTTPException ): - if exc.status_code == 404: + if exc.status_code == HTTPStatus.NOT_FOUND: if request.url.path.startswith('/api'): return JSONResponse( - status_code=404, content={'detail': 'Not Found'} + status_code=HTTPStatus.NOT_FOUND, + content={'detail': 'Not Found'}, ) return templates.TemplateResponse(