From 475c0de6842d57fc1cede7960ba9fd617270aeb2 Mon Sep 17 00:00:00 2001 From: jsibitoye Date: Tue, 23 Sep 2025 04:06:57 -0500 Subject: [PATCH] Add helper function get_query_param to safely fetch query parameters --- fastapi/routing.py | 17 +++++++++++++++++ tests/test_get_query_param.py | 24 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 tests/test_get_query_param.py diff --git a/fastapi/routing.py b/fastapi/routing.py index f620ced5f..7d5059ba9 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -4444,3 +4444,20 @@ class APIRouter(routing.Router): return func return decorator + +def get_query_param(request, name: str, default: str | None = None) -> str | None: + """ + Utility function to safely fetch a query parameter from a request. + + Args: + request: The request object. + name (str): The name of the query parameter to retrieve. + default (str | None, optional): The value to return if the parameter is missing. Defaults to None. + + Returns: + str | None: The query parameter value, or the default if not found. + """ + try: + return request.query_params.get(name, default) + except Exception: + return default diff --git a/tests/test_get_query_param.py b/tests/test_get_query_param.py new file mode 100644 index 000000000..b6287227d --- /dev/null +++ b/tests/test_get_query_param.py @@ -0,0 +1,24 @@ +import pytest +from starlette.requests import Request +from fastapi.routing import get_query_param +from starlette.testclient import TestClient +from fastapi import FastAPI + +app = FastAPI() + +@app.get("/demo") +async def demo(request: Request): + value = get_query_param(request, "name", default="guest") + return {"name": value} + +client = TestClient(app) + + +def test_existing_query_param(): + response = client.get("/demo?name=josh") + assert response.json() == {"name": "josh"} + + +def test_missing_query_param_returns_default(): + response = client.get("/demo") + assert response.json() == {"name": "guest"}