Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 64d58b6

Browse files
astraldawntiangolo
authored andcommitted
✨ Allow hiding from OpenAPI (and Swagger UI) Query, Cookie, Header, and Path parameters (fastapi#3144)
Co-authored-by: Sebastián Ramírez <[email protected]>
1 parent cf76ea2 commit 64d58b6

9 files changed

Lines changed: 474 additions & 0 deletions

File tree

docs/en/docs/tutorial/query-params-str-validations.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,22 @@ The docs will show it like this:
387387

388388
<img src="/img/tutorial/query-params-str-validations/image01.png">
389389

390+
## Exclude from OpenAPI
391+
392+
To exclude a query parameter from the generated OpenAPI schema (and thus, from the automatic documentation systems), set the parameter `include_in_schema` of `Query` to `False`:
393+
394+
=== "Python 3.6 and above"
395+
396+
```Python hl_lines="10"
397+
{!> ../../../docs_src/query_params_str_validations/tutorial014.py!}
398+
```
399+
400+
=== "Python 3.10 and above"
401+
402+
```Python hl_lines="7"
403+
{!> ../../../docs_src/query_params_str_validations/tutorial014_py310.py!}
404+
```
405+
390406
## Recap
391407

392408
You can declare additional validations and metadata for your parameters.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from typing import Optional
2+
3+
from fastapi import FastAPI, Query
4+
5+
app = FastAPI()
6+
7+
8+
@app.get("/items/")
9+
async def read_items(
10+
hidden_query: Optional[str] = Query(None, include_in_schema=False)
11+
):
12+
if hidden_query:
13+
return {"hidden_query": hidden_query}
14+
else:
15+
return {"hidden_query": "Not found"}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from fastapi import FastAPI, Query
2+
3+
app = FastAPI()
4+
5+
6+
@app.get("/items/")
7+
async def read_items(hidden_query: str | None = Query(None, include_in_schema=False)):
8+
if hidden_query:
9+
return {"hidden_query": hidden_query}
10+
else:
11+
return {"hidden_query": "Not found"}

fastapi/openapi/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ def get_openapi_operation_parameters(
9292
for param in all_route_params:
9393
field_info = param.field_info
9494
field_info = cast(Param, field_info)
95+
if not field_info.include_in_schema:
96+
continue
9597
parameter = {
9698
"name": param.alias,
9799
"in": field_info.in_.value,

fastapi/param_functions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def Path( # noqa: N802
2020
example: Any = Undefined,
2121
examples: Optional[Dict[str, Any]] = None,
2222
deprecated: Optional[bool] = None,
23+
include_in_schema: bool = True,
2324
**extra: Any,
2425
) -> Any:
2526
return params.Path(
@@ -37,6 +38,7 @@ def Path( # noqa: N802
3738
example=example,
3839
examples=examples,
3940
deprecated=deprecated,
41+
include_in_schema=include_in_schema,
4042
**extra,
4143
)
4244

@@ -57,6 +59,7 @@ def Query( # noqa: N802
5759
example: Any = Undefined,
5860
examples: Optional[Dict[str, Any]] = None,
5961
deprecated: Optional[bool] = None,
62+
include_in_schema: bool = True,
6063
**extra: Any,
6164
) -> Any:
6265
return params.Query(
@@ -74,6 +77,7 @@ def Query( # noqa: N802
7477
example=example,
7578
examples=examples,
7679
deprecated=deprecated,
80+
include_in_schema=include_in_schema,
7781
**extra,
7882
)
7983

@@ -95,6 +99,7 @@ def Header( # noqa: N802
9599
example: Any = Undefined,
96100
examples: Optional[Dict[str, Any]] = None,
97101
deprecated: Optional[bool] = None,
102+
include_in_schema: bool = True,
98103
**extra: Any,
99104
) -> Any:
100105
return params.Header(
@@ -113,6 +118,7 @@ def Header( # noqa: N802
113118
example=example,
114119
examples=examples,
115120
deprecated=deprecated,
121+
include_in_schema=include_in_schema,
116122
**extra,
117123
)
118124

@@ -133,6 +139,7 @@ def Cookie( # noqa: N802
133139
example: Any = Undefined,
134140
examples: Optional[Dict[str, Any]] = None,
135141
deprecated: Optional[bool] = None,
142+
include_in_schema: bool = True,
136143
**extra: Any,
137144
) -> Any:
138145
return params.Cookie(
@@ -150,6 +157,7 @@ def Cookie( # noqa: N802
150157
example=example,
151158
examples=examples,
152159
deprecated=deprecated,
160+
include_in_schema=include_in_schema,
153161
**extra,
154162
)
155163

fastapi/params.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@ def __init__(
3131
example: Any = Undefined,
3232
examples: Optional[Dict[str, Any]] = None,
3333
deprecated: Optional[bool] = None,
34+
include_in_schema: bool = True,
3435
**extra: Any,
3536
):
3637
self.deprecated = deprecated
3738
self.example = example
3839
self.examples = examples
40+
self.include_in_schema = include_in_schema
3941
super().__init__(
4042
default,
4143
alias=alias,
@@ -75,6 +77,7 @@ def __init__(
7577
example: Any = Undefined,
7678
examples: Optional[Dict[str, Any]] = None,
7779
deprecated: Optional[bool] = None,
80+
include_in_schema: bool = True,
7881
**extra: Any,
7982
):
8083
self.in_ = self.in_
@@ -93,6 +96,7 @@ def __init__(
9396
deprecated=deprecated,
9497
example=example,
9598
examples=examples,
99+
include_in_schema=include_in_schema,
96100
**extra,
97101
)
98102

@@ -117,6 +121,7 @@ def __init__(
117121
example: Any = Undefined,
118122
examples: Optional[Dict[str, Any]] = None,
119123
deprecated: Optional[bool] = None,
124+
include_in_schema: bool = True,
120125
**extra: Any,
121126
):
122127
super().__init__(
@@ -134,6 +139,7 @@ def __init__(
134139
deprecated=deprecated,
135140
example=example,
136141
examples=examples,
142+
include_in_schema=include_in_schema,
137143
**extra,
138144
)
139145

@@ -159,6 +165,7 @@ def __init__(
159165
example: Any = Undefined,
160166
examples: Optional[Dict[str, Any]] = None,
161167
deprecated: Optional[bool] = None,
168+
include_in_schema: bool = True,
162169
**extra: Any,
163170
):
164171
self.convert_underscores = convert_underscores
@@ -177,6 +184,7 @@ def __init__(
177184
deprecated=deprecated,
178185
example=example,
179186
examples=examples,
187+
include_in_schema=include_in_schema,
180188
**extra,
181189
)
182190

@@ -201,6 +209,7 @@ def __init__(
201209
example: Any = Undefined,
202210
examples: Optional[Dict[str, Any]] = None,
203211
deprecated: Optional[bool] = None,
212+
include_in_schema: bool = True,
204213
**extra: Any,
205214
):
206215
super().__init__(
@@ -218,6 +227,7 @@ def __init__(
218227
deprecated=deprecated,
219228
example=example,
220229
examples=examples,
230+
include_in_schema=include_in_schema,
221231
**extra,
222232
)
223233

0 commit comments

Comments
 (0)