fastapi 0.99.0__py3-none-any.whl → 0.100.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fastapi might be problematic. Click here for more details.
- fastapi/__init__.py +1 -1
- fastapi/_compat.py +616 -0
- fastapi/applications.py +21 -22
- fastapi/datastructures.py +31 -4
- fastapi/dependencies/models.py +1 -1
- fastapi/dependencies/utils.py +76 -120
- fastapi/encoders.py +90 -12
- fastapi/exceptions.py +20 -8
- fastapi/openapi/constants.py +1 -0
- fastapi/openapi/models.py +223 -72
- fastapi/openapi/utils.py +84 -40
- fastapi/param_functions.py +247 -16
- fastapi/params.py +347 -34
- fastapi/routing.py +84 -47
- fastapi/security/oauth2.py +16 -12
- fastapi/types.py +9 -1
- fastapi/utils.py +66 -60
- {fastapi-0.99.0.dist-info → fastapi-0.100.0.dist-info}/METADATA +7 -3
- {fastapi-0.99.0.dist-info → fastapi-0.100.0.dist-info}/RECORD +21 -20
- {fastapi-0.99.0.dist-info → fastapi-0.100.0.dist-info}/WHEEL +0 -0
- {fastapi-0.99.0.dist-info → fastapi-0.100.0.dist-info}/licenses/LICENSE +0 -0
fastapi/params.py
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import warnings
|
|
2
2
|
from enum import Enum
|
|
3
|
-
from typing import Any, Callable, List, Optional, Sequence
|
|
3
|
+
from typing import Any, Callable, Dict, List, Optional, Sequence, Union
|
|
4
4
|
|
|
5
|
-
from pydantic.fields import FieldInfo
|
|
5
|
+
from pydantic.fields import FieldInfo
|
|
6
6
|
from typing_extensions import Annotated, deprecated
|
|
7
7
|
|
|
8
|
+
from ._compat import PYDANTIC_V2, Undefined
|
|
9
|
+
|
|
10
|
+
_Unset: Any = Undefined
|
|
11
|
+
|
|
8
12
|
|
|
9
13
|
class ParamTypes(Enum):
|
|
10
14
|
query = "query"
|
|
@@ -20,7 +24,14 @@ class Param(FieldInfo):
|
|
|
20
24
|
self,
|
|
21
25
|
default: Any = Undefined,
|
|
22
26
|
*,
|
|
27
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
28
|
+
annotation: Optional[Any] = None,
|
|
23
29
|
alias: Optional[str] = None,
|
|
30
|
+
alias_priority: Union[int, None] = _Unset,
|
|
31
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
32
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
33
|
+
validation_alias: Union[str, None] = None,
|
|
34
|
+
serialization_alias: Union[str, None] = None,
|
|
24
35
|
title: Optional[str] = None,
|
|
25
36
|
description: Optional[str] = None,
|
|
26
37
|
gt: Optional[float] = None,
|
|
@@ -29,7 +40,19 @@ class Param(FieldInfo):
|
|
|
29
40
|
le: Optional[float] = None,
|
|
30
41
|
min_length: Optional[int] = None,
|
|
31
42
|
max_length: Optional[int] = None,
|
|
32
|
-
|
|
43
|
+
pattern: Optional[str] = None,
|
|
44
|
+
regex: Annotated[
|
|
45
|
+
Optional[str],
|
|
46
|
+
deprecated(
|
|
47
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
48
|
+
),
|
|
49
|
+
] = None,
|
|
50
|
+
discriminator: Union[str, None] = None,
|
|
51
|
+
strict: Union[bool, None] = _Unset,
|
|
52
|
+
multiple_of: Union[float, None] = _Unset,
|
|
53
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
54
|
+
max_digits: Union[int, None] = _Unset,
|
|
55
|
+
decimal_places: Union[int, None] = _Unset,
|
|
33
56
|
examples: Optional[List[Any]] = None,
|
|
34
57
|
example: Annotated[
|
|
35
58
|
Optional[Any],
|
|
@@ -37,25 +60,24 @@ class Param(FieldInfo):
|
|
|
37
60
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
38
61
|
"although still supported. Use examples instead."
|
|
39
62
|
),
|
|
40
|
-
] =
|
|
63
|
+
] = _Unset,
|
|
41
64
|
deprecated: Optional[bool] = None,
|
|
42
65
|
include_in_schema: bool = True,
|
|
66
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
43
67
|
**extra: Any,
|
|
44
68
|
):
|
|
45
69
|
self.deprecated = deprecated
|
|
46
|
-
if example is not
|
|
70
|
+
if example is not _Unset:
|
|
47
71
|
warnings.warn(
|
|
48
72
|
"`example` has been depreacated, please use `examples` instead",
|
|
49
73
|
category=DeprecationWarning,
|
|
50
|
-
stacklevel=
|
|
74
|
+
stacklevel=4,
|
|
51
75
|
)
|
|
52
76
|
self.example = example
|
|
53
77
|
self.include_in_schema = include_in_schema
|
|
54
|
-
|
|
55
|
-
if examples:
|
|
56
|
-
extra_kwargs["examples"] = examples
|
|
57
|
-
super().__init__(
|
|
78
|
+
kwargs = dict(
|
|
58
79
|
default=default,
|
|
80
|
+
default_factory=default_factory,
|
|
59
81
|
alias=alias,
|
|
60
82
|
title=title,
|
|
61
83
|
description=description,
|
|
@@ -65,9 +87,40 @@ class Param(FieldInfo):
|
|
|
65
87
|
le=le,
|
|
66
88
|
min_length=min_length,
|
|
67
89
|
max_length=max_length,
|
|
68
|
-
|
|
69
|
-
|
|
90
|
+
discriminator=discriminator,
|
|
91
|
+
multiple_of=multiple_of,
|
|
92
|
+
allow_nan=allow_inf_nan,
|
|
93
|
+
max_digits=max_digits,
|
|
94
|
+
decimal_places=decimal_places,
|
|
95
|
+
**extra,
|
|
70
96
|
)
|
|
97
|
+
if examples is not None:
|
|
98
|
+
kwargs["examples"] = examples
|
|
99
|
+
if regex is not None:
|
|
100
|
+
warnings.warn(
|
|
101
|
+
"`regex` has been depreacated, please use `pattern` instead",
|
|
102
|
+
category=DeprecationWarning,
|
|
103
|
+
stacklevel=4,
|
|
104
|
+
)
|
|
105
|
+
current_json_schema_extra = json_schema_extra or extra
|
|
106
|
+
if PYDANTIC_V2:
|
|
107
|
+
kwargs.update(
|
|
108
|
+
{
|
|
109
|
+
"annotation": annotation,
|
|
110
|
+
"alias_priority": alias_priority,
|
|
111
|
+
"validation_alias": validation_alias,
|
|
112
|
+
"serialization_alias": serialization_alias,
|
|
113
|
+
"strict": strict,
|
|
114
|
+
"json_schema_extra": current_json_schema_extra,
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
kwargs["pattern"] = pattern or regex
|
|
118
|
+
else:
|
|
119
|
+
kwargs["regex"] = pattern or regex
|
|
120
|
+
kwargs.update(**current_json_schema_extra)
|
|
121
|
+
use_kwargs = {k: v for k, v in kwargs.items() if v is not _Unset}
|
|
122
|
+
|
|
123
|
+
super().__init__(**use_kwargs)
|
|
71
124
|
|
|
72
125
|
def __repr__(self) -> str:
|
|
73
126
|
return f"{self.__class__.__name__}({self.default})"
|
|
@@ -80,7 +133,14 @@ class Path(Param):
|
|
|
80
133
|
self,
|
|
81
134
|
default: Any = ...,
|
|
82
135
|
*,
|
|
136
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
137
|
+
annotation: Optional[Any] = None,
|
|
83
138
|
alias: Optional[str] = None,
|
|
139
|
+
alias_priority: Union[int, None] = _Unset,
|
|
140
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
141
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
142
|
+
validation_alias: Union[str, None] = None,
|
|
143
|
+
serialization_alias: Union[str, None] = None,
|
|
84
144
|
title: Optional[str] = None,
|
|
85
145
|
description: Optional[str] = None,
|
|
86
146
|
gt: Optional[float] = None,
|
|
@@ -89,7 +149,19 @@ class Path(Param):
|
|
|
89
149
|
le: Optional[float] = None,
|
|
90
150
|
min_length: Optional[int] = None,
|
|
91
151
|
max_length: Optional[int] = None,
|
|
92
|
-
|
|
152
|
+
pattern: Optional[str] = None,
|
|
153
|
+
regex: Annotated[
|
|
154
|
+
Optional[str],
|
|
155
|
+
deprecated(
|
|
156
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
157
|
+
),
|
|
158
|
+
] = None,
|
|
159
|
+
discriminator: Union[str, None] = None,
|
|
160
|
+
strict: Union[bool, None] = _Unset,
|
|
161
|
+
multiple_of: Union[float, None] = _Unset,
|
|
162
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
163
|
+
max_digits: Union[int, None] = _Unset,
|
|
164
|
+
decimal_places: Union[int, None] = _Unset,
|
|
93
165
|
examples: Optional[List[Any]] = None,
|
|
94
166
|
example: Annotated[
|
|
95
167
|
Optional[Any],
|
|
@@ -97,16 +169,22 @@ class Path(Param):
|
|
|
97
169
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
98
170
|
"although still supported. Use examples instead."
|
|
99
171
|
),
|
|
100
|
-
] =
|
|
172
|
+
] = _Unset,
|
|
101
173
|
deprecated: Optional[bool] = None,
|
|
102
174
|
include_in_schema: bool = True,
|
|
175
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
103
176
|
**extra: Any,
|
|
104
177
|
):
|
|
105
178
|
assert default is ..., "Path parameters cannot have a default value"
|
|
106
179
|
self.in_ = self.in_
|
|
107
180
|
super().__init__(
|
|
108
181
|
default=default,
|
|
182
|
+
default_factory=default_factory,
|
|
183
|
+
annotation=annotation,
|
|
109
184
|
alias=alias,
|
|
185
|
+
alias_priority=alias_priority,
|
|
186
|
+
validation_alias=validation_alias,
|
|
187
|
+
serialization_alias=serialization_alias,
|
|
110
188
|
title=title,
|
|
111
189
|
description=description,
|
|
112
190
|
gt=gt,
|
|
@@ -115,11 +193,19 @@ class Path(Param):
|
|
|
115
193
|
le=le,
|
|
116
194
|
min_length=min_length,
|
|
117
195
|
max_length=max_length,
|
|
196
|
+
pattern=pattern,
|
|
118
197
|
regex=regex,
|
|
198
|
+
discriminator=discriminator,
|
|
199
|
+
strict=strict,
|
|
200
|
+
multiple_of=multiple_of,
|
|
201
|
+
allow_inf_nan=allow_inf_nan,
|
|
202
|
+
max_digits=max_digits,
|
|
203
|
+
decimal_places=decimal_places,
|
|
119
204
|
deprecated=deprecated,
|
|
120
205
|
example=example,
|
|
121
206
|
examples=examples,
|
|
122
207
|
include_in_schema=include_in_schema,
|
|
208
|
+
json_schema_extra=json_schema_extra,
|
|
123
209
|
**extra,
|
|
124
210
|
)
|
|
125
211
|
|
|
@@ -131,7 +217,14 @@ class Query(Param):
|
|
|
131
217
|
self,
|
|
132
218
|
default: Any = Undefined,
|
|
133
219
|
*,
|
|
220
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
221
|
+
annotation: Optional[Any] = None,
|
|
134
222
|
alias: Optional[str] = None,
|
|
223
|
+
alias_priority: Union[int, None] = _Unset,
|
|
224
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
225
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
226
|
+
validation_alias: Union[str, None] = None,
|
|
227
|
+
serialization_alias: Union[str, None] = None,
|
|
135
228
|
title: Optional[str] = None,
|
|
136
229
|
description: Optional[str] = None,
|
|
137
230
|
gt: Optional[float] = None,
|
|
@@ -140,7 +233,19 @@ class Query(Param):
|
|
|
140
233
|
le: Optional[float] = None,
|
|
141
234
|
min_length: Optional[int] = None,
|
|
142
235
|
max_length: Optional[int] = None,
|
|
143
|
-
|
|
236
|
+
pattern: Optional[str] = None,
|
|
237
|
+
regex: Annotated[
|
|
238
|
+
Optional[str],
|
|
239
|
+
deprecated(
|
|
240
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
241
|
+
),
|
|
242
|
+
] = None,
|
|
243
|
+
discriminator: Union[str, None] = None,
|
|
244
|
+
strict: Union[bool, None] = _Unset,
|
|
245
|
+
multiple_of: Union[float, None] = _Unset,
|
|
246
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
247
|
+
max_digits: Union[int, None] = _Unset,
|
|
248
|
+
decimal_places: Union[int, None] = _Unset,
|
|
144
249
|
examples: Optional[List[Any]] = None,
|
|
145
250
|
example: Annotated[
|
|
146
251
|
Optional[Any],
|
|
@@ -148,14 +253,20 @@ class Query(Param):
|
|
|
148
253
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
149
254
|
"although still supported. Use examples instead."
|
|
150
255
|
),
|
|
151
|
-
] =
|
|
256
|
+
] = _Unset,
|
|
152
257
|
deprecated: Optional[bool] = None,
|
|
153
258
|
include_in_schema: bool = True,
|
|
259
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
154
260
|
**extra: Any,
|
|
155
261
|
):
|
|
156
262
|
super().__init__(
|
|
157
263
|
default=default,
|
|
264
|
+
default_factory=default_factory,
|
|
265
|
+
annotation=annotation,
|
|
158
266
|
alias=alias,
|
|
267
|
+
alias_priority=alias_priority,
|
|
268
|
+
validation_alias=validation_alias,
|
|
269
|
+
serialization_alias=serialization_alias,
|
|
159
270
|
title=title,
|
|
160
271
|
description=description,
|
|
161
272
|
gt=gt,
|
|
@@ -164,11 +275,19 @@ class Query(Param):
|
|
|
164
275
|
le=le,
|
|
165
276
|
min_length=min_length,
|
|
166
277
|
max_length=max_length,
|
|
278
|
+
pattern=pattern,
|
|
167
279
|
regex=regex,
|
|
280
|
+
discriminator=discriminator,
|
|
281
|
+
strict=strict,
|
|
282
|
+
multiple_of=multiple_of,
|
|
283
|
+
allow_inf_nan=allow_inf_nan,
|
|
284
|
+
max_digits=max_digits,
|
|
285
|
+
decimal_places=decimal_places,
|
|
168
286
|
deprecated=deprecated,
|
|
169
287
|
example=example,
|
|
170
288
|
examples=examples,
|
|
171
289
|
include_in_schema=include_in_schema,
|
|
290
|
+
json_schema_extra=json_schema_extra,
|
|
172
291
|
**extra,
|
|
173
292
|
)
|
|
174
293
|
|
|
@@ -180,7 +299,14 @@ class Header(Param):
|
|
|
180
299
|
self,
|
|
181
300
|
default: Any = Undefined,
|
|
182
301
|
*,
|
|
302
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
303
|
+
annotation: Optional[Any] = None,
|
|
183
304
|
alias: Optional[str] = None,
|
|
305
|
+
alias_priority: Union[int, None] = _Unset,
|
|
306
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
307
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
308
|
+
validation_alias: Union[str, None] = None,
|
|
309
|
+
serialization_alias: Union[str, None] = None,
|
|
184
310
|
convert_underscores: bool = True,
|
|
185
311
|
title: Optional[str] = None,
|
|
186
312
|
description: Optional[str] = None,
|
|
@@ -190,7 +316,19 @@ class Header(Param):
|
|
|
190
316
|
le: Optional[float] = None,
|
|
191
317
|
min_length: Optional[int] = None,
|
|
192
318
|
max_length: Optional[int] = None,
|
|
193
|
-
|
|
319
|
+
pattern: Optional[str] = None,
|
|
320
|
+
regex: Annotated[
|
|
321
|
+
Optional[str],
|
|
322
|
+
deprecated(
|
|
323
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
324
|
+
),
|
|
325
|
+
] = None,
|
|
326
|
+
discriminator: Union[str, None] = None,
|
|
327
|
+
strict: Union[bool, None] = _Unset,
|
|
328
|
+
multiple_of: Union[float, None] = _Unset,
|
|
329
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
330
|
+
max_digits: Union[int, None] = _Unset,
|
|
331
|
+
decimal_places: Union[int, None] = _Unset,
|
|
194
332
|
examples: Optional[List[Any]] = None,
|
|
195
333
|
example: Annotated[
|
|
196
334
|
Optional[Any],
|
|
@@ -198,15 +336,21 @@ class Header(Param):
|
|
|
198
336
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
199
337
|
"although still supported. Use examples instead."
|
|
200
338
|
),
|
|
201
|
-
] =
|
|
339
|
+
] = _Unset,
|
|
202
340
|
deprecated: Optional[bool] = None,
|
|
203
341
|
include_in_schema: bool = True,
|
|
342
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
204
343
|
**extra: Any,
|
|
205
344
|
):
|
|
206
345
|
self.convert_underscores = convert_underscores
|
|
207
346
|
super().__init__(
|
|
208
347
|
default=default,
|
|
348
|
+
default_factory=default_factory,
|
|
349
|
+
annotation=annotation,
|
|
209
350
|
alias=alias,
|
|
351
|
+
alias_priority=alias_priority,
|
|
352
|
+
validation_alias=validation_alias,
|
|
353
|
+
serialization_alias=serialization_alias,
|
|
210
354
|
title=title,
|
|
211
355
|
description=description,
|
|
212
356
|
gt=gt,
|
|
@@ -215,11 +359,19 @@ class Header(Param):
|
|
|
215
359
|
le=le,
|
|
216
360
|
min_length=min_length,
|
|
217
361
|
max_length=max_length,
|
|
362
|
+
pattern=pattern,
|
|
218
363
|
regex=regex,
|
|
364
|
+
discriminator=discriminator,
|
|
365
|
+
strict=strict,
|
|
366
|
+
multiple_of=multiple_of,
|
|
367
|
+
allow_inf_nan=allow_inf_nan,
|
|
368
|
+
max_digits=max_digits,
|
|
369
|
+
decimal_places=decimal_places,
|
|
219
370
|
deprecated=deprecated,
|
|
220
371
|
example=example,
|
|
221
372
|
examples=examples,
|
|
222
373
|
include_in_schema=include_in_schema,
|
|
374
|
+
json_schema_extra=json_schema_extra,
|
|
223
375
|
**extra,
|
|
224
376
|
)
|
|
225
377
|
|
|
@@ -231,7 +383,14 @@ class Cookie(Param):
|
|
|
231
383
|
self,
|
|
232
384
|
default: Any = Undefined,
|
|
233
385
|
*,
|
|
386
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
387
|
+
annotation: Optional[Any] = None,
|
|
234
388
|
alias: Optional[str] = None,
|
|
389
|
+
alias_priority: Union[int, None] = _Unset,
|
|
390
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
391
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
392
|
+
validation_alias: Union[str, None] = None,
|
|
393
|
+
serialization_alias: Union[str, None] = None,
|
|
235
394
|
title: Optional[str] = None,
|
|
236
395
|
description: Optional[str] = None,
|
|
237
396
|
gt: Optional[float] = None,
|
|
@@ -240,7 +399,19 @@ class Cookie(Param):
|
|
|
240
399
|
le: Optional[float] = None,
|
|
241
400
|
min_length: Optional[int] = None,
|
|
242
401
|
max_length: Optional[int] = None,
|
|
243
|
-
|
|
402
|
+
pattern: Optional[str] = None,
|
|
403
|
+
regex: Annotated[
|
|
404
|
+
Optional[str],
|
|
405
|
+
deprecated(
|
|
406
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
407
|
+
),
|
|
408
|
+
] = None,
|
|
409
|
+
discriminator: Union[str, None] = None,
|
|
410
|
+
strict: Union[bool, None] = _Unset,
|
|
411
|
+
multiple_of: Union[float, None] = _Unset,
|
|
412
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
413
|
+
max_digits: Union[int, None] = _Unset,
|
|
414
|
+
decimal_places: Union[int, None] = _Unset,
|
|
244
415
|
examples: Optional[List[Any]] = None,
|
|
245
416
|
example: Annotated[
|
|
246
417
|
Optional[Any],
|
|
@@ -248,14 +419,20 @@ class Cookie(Param):
|
|
|
248
419
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
249
420
|
"although still supported. Use examples instead."
|
|
250
421
|
),
|
|
251
|
-
] =
|
|
422
|
+
] = _Unset,
|
|
252
423
|
deprecated: Optional[bool] = None,
|
|
253
424
|
include_in_schema: bool = True,
|
|
425
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
254
426
|
**extra: Any,
|
|
255
427
|
):
|
|
256
428
|
super().__init__(
|
|
257
429
|
default=default,
|
|
430
|
+
default_factory=default_factory,
|
|
431
|
+
annotation=annotation,
|
|
258
432
|
alias=alias,
|
|
433
|
+
alias_priority=alias_priority,
|
|
434
|
+
validation_alias=validation_alias,
|
|
435
|
+
serialization_alias=serialization_alias,
|
|
259
436
|
title=title,
|
|
260
437
|
description=description,
|
|
261
438
|
gt=gt,
|
|
@@ -264,11 +441,19 @@ class Cookie(Param):
|
|
|
264
441
|
le=le,
|
|
265
442
|
min_length=min_length,
|
|
266
443
|
max_length=max_length,
|
|
444
|
+
pattern=pattern,
|
|
267
445
|
regex=regex,
|
|
446
|
+
discriminator=discriminator,
|
|
447
|
+
strict=strict,
|
|
448
|
+
multiple_of=multiple_of,
|
|
449
|
+
allow_inf_nan=allow_inf_nan,
|
|
450
|
+
max_digits=max_digits,
|
|
451
|
+
decimal_places=decimal_places,
|
|
268
452
|
deprecated=deprecated,
|
|
269
453
|
example=example,
|
|
270
454
|
examples=examples,
|
|
271
455
|
include_in_schema=include_in_schema,
|
|
456
|
+
json_schema_extra=json_schema_extra,
|
|
272
457
|
**extra,
|
|
273
458
|
)
|
|
274
459
|
|
|
@@ -278,9 +463,16 @@ class Body(FieldInfo):
|
|
|
278
463
|
self,
|
|
279
464
|
default: Any = Undefined,
|
|
280
465
|
*,
|
|
466
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
467
|
+
annotation: Optional[Any] = None,
|
|
281
468
|
embed: bool = False,
|
|
282
469
|
media_type: str = "application/json",
|
|
283
470
|
alias: Optional[str] = None,
|
|
471
|
+
alias_priority: Union[int, None] = _Unset,
|
|
472
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
473
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
474
|
+
validation_alias: Union[str, None] = None,
|
|
475
|
+
serialization_alias: Union[str, None] = None,
|
|
284
476
|
title: Optional[str] = None,
|
|
285
477
|
description: Optional[str] = None,
|
|
286
478
|
gt: Optional[float] = None,
|
|
@@ -289,7 +481,19 @@ class Body(FieldInfo):
|
|
|
289
481
|
le: Optional[float] = None,
|
|
290
482
|
min_length: Optional[int] = None,
|
|
291
483
|
max_length: Optional[int] = None,
|
|
292
|
-
|
|
484
|
+
pattern: Optional[str] = None,
|
|
485
|
+
regex: Annotated[
|
|
486
|
+
Optional[str],
|
|
487
|
+
deprecated(
|
|
488
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
489
|
+
),
|
|
490
|
+
] = None,
|
|
491
|
+
discriminator: Union[str, None] = None,
|
|
492
|
+
strict: Union[bool, None] = _Unset,
|
|
493
|
+
multiple_of: Union[float, None] = _Unset,
|
|
494
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
495
|
+
max_digits: Union[int, None] = _Unset,
|
|
496
|
+
decimal_places: Union[int, None] = _Unset,
|
|
293
497
|
examples: Optional[List[Any]] = None,
|
|
294
498
|
example: Annotated[
|
|
295
499
|
Optional[Any],
|
|
@@ -297,23 +501,26 @@ class Body(FieldInfo):
|
|
|
297
501
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
298
502
|
"although still supported. Use examples instead."
|
|
299
503
|
),
|
|
300
|
-
] =
|
|
504
|
+
] = _Unset,
|
|
505
|
+
deprecated: Optional[bool] = None,
|
|
506
|
+
include_in_schema: bool = True,
|
|
507
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
301
508
|
**extra: Any,
|
|
302
509
|
):
|
|
303
510
|
self.embed = embed
|
|
304
511
|
self.media_type = media_type
|
|
305
|
-
|
|
512
|
+
self.deprecated = deprecated
|
|
513
|
+
if example is not _Unset:
|
|
306
514
|
warnings.warn(
|
|
307
515
|
"`example` has been depreacated, please use `examples` instead",
|
|
308
516
|
category=DeprecationWarning,
|
|
309
|
-
stacklevel=
|
|
517
|
+
stacklevel=4,
|
|
310
518
|
)
|
|
311
519
|
self.example = example
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
extra_kwargs["examples"] = examples
|
|
315
|
-
super().__init__(
|
|
520
|
+
self.include_in_schema = include_in_schema
|
|
521
|
+
kwargs = dict(
|
|
316
522
|
default=default,
|
|
523
|
+
default_factory=default_factory,
|
|
317
524
|
alias=alias,
|
|
318
525
|
title=title,
|
|
319
526
|
description=description,
|
|
@@ -323,9 +530,41 @@ class Body(FieldInfo):
|
|
|
323
530
|
le=le,
|
|
324
531
|
min_length=min_length,
|
|
325
532
|
max_length=max_length,
|
|
326
|
-
|
|
327
|
-
|
|
533
|
+
discriminator=discriminator,
|
|
534
|
+
multiple_of=multiple_of,
|
|
535
|
+
allow_nan=allow_inf_nan,
|
|
536
|
+
max_digits=max_digits,
|
|
537
|
+
decimal_places=decimal_places,
|
|
538
|
+
**extra,
|
|
328
539
|
)
|
|
540
|
+
if examples is not None:
|
|
541
|
+
kwargs["examples"] = examples
|
|
542
|
+
if regex is not None:
|
|
543
|
+
warnings.warn(
|
|
544
|
+
"`regex` has been depreacated, please use `pattern` instead",
|
|
545
|
+
category=DeprecationWarning,
|
|
546
|
+
stacklevel=4,
|
|
547
|
+
)
|
|
548
|
+
current_json_schema_extra = json_schema_extra or extra
|
|
549
|
+
if PYDANTIC_V2:
|
|
550
|
+
kwargs.update(
|
|
551
|
+
{
|
|
552
|
+
"annotation": annotation,
|
|
553
|
+
"alias_priority": alias_priority,
|
|
554
|
+
"validation_alias": validation_alias,
|
|
555
|
+
"serialization_alias": serialization_alias,
|
|
556
|
+
"strict": strict,
|
|
557
|
+
"json_schema_extra": current_json_schema_extra,
|
|
558
|
+
}
|
|
559
|
+
)
|
|
560
|
+
kwargs["pattern"] = pattern or regex
|
|
561
|
+
else:
|
|
562
|
+
kwargs["regex"] = pattern or regex
|
|
563
|
+
kwargs.update(**current_json_schema_extra)
|
|
564
|
+
|
|
565
|
+
use_kwargs = {k: v for k, v in kwargs.items() if v is not _Unset}
|
|
566
|
+
|
|
567
|
+
super().__init__(**use_kwargs)
|
|
329
568
|
|
|
330
569
|
def __repr__(self) -> str:
|
|
331
570
|
return f"{self.__class__.__name__}({self.default})"
|
|
@@ -336,8 +575,15 @@ class Form(Body):
|
|
|
336
575
|
self,
|
|
337
576
|
default: Any = Undefined,
|
|
338
577
|
*,
|
|
578
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
579
|
+
annotation: Optional[Any] = None,
|
|
339
580
|
media_type: str = "application/x-www-form-urlencoded",
|
|
340
581
|
alias: Optional[str] = None,
|
|
582
|
+
alias_priority: Union[int, None] = _Unset,
|
|
583
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
584
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
585
|
+
validation_alias: Union[str, None] = None,
|
|
586
|
+
serialization_alias: Union[str, None] = None,
|
|
341
587
|
title: Optional[str] = None,
|
|
342
588
|
description: Optional[str] = None,
|
|
343
589
|
gt: Optional[float] = None,
|
|
@@ -346,7 +592,19 @@ class Form(Body):
|
|
|
346
592
|
le: Optional[float] = None,
|
|
347
593
|
min_length: Optional[int] = None,
|
|
348
594
|
max_length: Optional[int] = None,
|
|
349
|
-
|
|
595
|
+
pattern: Optional[str] = None,
|
|
596
|
+
regex: Annotated[
|
|
597
|
+
Optional[str],
|
|
598
|
+
deprecated(
|
|
599
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
600
|
+
),
|
|
601
|
+
] = None,
|
|
602
|
+
discriminator: Union[str, None] = None,
|
|
603
|
+
strict: Union[bool, None] = _Unset,
|
|
604
|
+
multiple_of: Union[float, None] = _Unset,
|
|
605
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
606
|
+
max_digits: Union[int, None] = _Unset,
|
|
607
|
+
decimal_places: Union[int, None] = _Unset,
|
|
350
608
|
examples: Optional[List[Any]] = None,
|
|
351
609
|
example: Annotated[
|
|
352
610
|
Optional[Any],
|
|
@@ -354,14 +612,22 @@ class Form(Body):
|
|
|
354
612
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
355
613
|
"although still supported. Use examples instead."
|
|
356
614
|
),
|
|
357
|
-
] =
|
|
615
|
+
] = _Unset,
|
|
616
|
+
deprecated: Optional[bool] = None,
|
|
617
|
+
include_in_schema: bool = True,
|
|
618
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
358
619
|
**extra: Any,
|
|
359
620
|
):
|
|
360
621
|
super().__init__(
|
|
361
622
|
default=default,
|
|
623
|
+
default_factory=default_factory,
|
|
624
|
+
annotation=annotation,
|
|
362
625
|
embed=True,
|
|
363
626
|
media_type=media_type,
|
|
364
627
|
alias=alias,
|
|
628
|
+
alias_priority=alias_priority,
|
|
629
|
+
validation_alias=validation_alias,
|
|
630
|
+
serialization_alias=serialization_alias,
|
|
365
631
|
title=title,
|
|
366
632
|
description=description,
|
|
367
633
|
gt=gt,
|
|
@@ -370,9 +636,19 @@ class Form(Body):
|
|
|
370
636
|
le=le,
|
|
371
637
|
min_length=min_length,
|
|
372
638
|
max_length=max_length,
|
|
639
|
+
pattern=pattern,
|
|
373
640
|
regex=regex,
|
|
641
|
+
discriminator=discriminator,
|
|
642
|
+
strict=strict,
|
|
643
|
+
multiple_of=multiple_of,
|
|
644
|
+
allow_inf_nan=allow_inf_nan,
|
|
645
|
+
max_digits=max_digits,
|
|
646
|
+
decimal_places=decimal_places,
|
|
647
|
+
deprecated=deprecated,
|
|
374
648
|
example=example,
|
|
375
649
|
examples=examples,
|
|
650
|
+
include_in_schema=include_in_schema,
|
|
651
|
+
json_schema_extra=json_schema_extra,
|
|
376
652
|
**extra,
|
|
377
653
|
)
|
|
378
654
|
|
|
@@ -382,8 +658,15 @@ class File(Form):
|
|
|
382
658
|
self,
|
|
383
659
|
default: Any = Undefined,
|
|
384
660
|
*,
|
|
661
|
+
default_factory: Union[Callable[[], Any], None] = _Unset,
|
|
662
|
+
annotation: Optional[Any] = None,
|
|
385
663
|
media_type: str = "multipart/form-data",
|
|
386
664
|
alias: Optional[str] = None,
|
|
665
|
+
alias_priority: Union[int, None] = _Unset,
|
|
666
|
+
# TODO: update when deprecating Pydantic v1, import these types
|
|
667
|
+
# validation_alias: str | AliasPath | AliasChoices | None
|
|
668
|
+
validation_alias: Union[str, None] = None,
|
|
669
|
+
serialization_alias: Union[str, None] = None,
|
|
387
670
|
title: Optional[str] = None,
|
|
388
671
|
description: Optional[str] = None,
|
|
389
672
|
gt: Optional[float] = None,
|
|
@@ -392,7 +675,19 @@ class File(Form):
|
|
|
392
675
|
le: Optional[float] = None,
|
|
393
676
|
min_length: Optional[int] = None,
|
|
394
677
|
max_length: Optional[int] = None,
|
|
395
|
-
|
|
678
|
+
pattern: Optional[str] = None,
|
|
679
|
+
regex: Annotated[
|
|
680
|
+
Optional[str],
|
|
681
|
+
deprecated(
|
|
682
|
+
"Deprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead."
|
|
683
|
+
),
|
|
684
|
+
] = None,
|
|
685
|
+
discriminator: Union[str, None] = None,
|
|
686
|
+
strict: Union[bool, None] = _Unset,
|
|
687
|
+
multiple_of: Union[float, None] = _Unset,
|
|
688
|
+
allow_inf_nan: Union[bool, None] = _Unset,
|
|
689
|
+
max_digits: Union[int, None] = _Unset,
|
|
690
|
+
decimal_places: Union[int, None] = _Unset,
|
|
396
691
|
examples: Optional[List[Any]] = None,
|
|
397
692
|
example: Annotated[
|
|
398
693
|
Optional[Any],
|
|
@@ -400,13 +695,21 @@ class File(Form):
|
|
|
400
695
|
"Deprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, "
|
|
401
696
|
"although still supported. Use examples instead."
|
|
402
697
|
),
|
|
403
|
-
] =
|
|
698
|
+
] = _Unset,
|
|
699
|
+
deprecated: Optional[bool] = None,
|
|
700
|
+
include_in_schema: bool = True,
|
|
701
|
+
json_schema_extra: Union[Dict[str, Any], None] = None,
|
|
404
702
|
**extra: Any,
|
|
405
703
|
):
|
|
406
704
|
super().__init__(
|
|
407
705
|
default=default,
|
|
706
|
+
default_factory=default_factory,
|
|
707
|
+
annotation=annotation,
|
|
408
708
|
media_type=media_type,
|
|
409
709
|
alias=alias,
|
|
710
|
+
alias_priority=alias_priority,
|
|
711
|
+
validation_alias=validation_alias,
|
|
712
|
+
serialization_alias=serialization_alias,
|
|
410
713
|
title=title,
|
|
411
714
|
description=description,
|
|
412
715
|
gt=gt,
|
|
@@ -415,9 +718,19 @@ class File(Form):
|
|
|
415
718
|
le=le,
|
|
416
719
|
min_length=min_length,
|
|
417
720
|
max_length=max_length,
|
|
721
|
+
pattern=pattern,
|
|
418
722
|
regex=regex,
|
|
723
|
+
discriminator=discriminator,
|
|
724
|
+
strict=strict,
|
|
725
|
+
multiple_of=multiple_of,
|
|
726
|
+
allow_inf_nan=allow_inf_nan,
|
|
727
|
+
max_digits=max_digits,
|
|
728
|
+
decimal_places=decimal_places,
|
|
729
|
+
deprecated=deprecated,
|
|
419
730
|
example=example,
|
|
420
731
|
examples=examples,
|
|
732
|
+
include_in_schema=include_in_schema,
|
|
733
|
+
json_schema_extra=json_schema_extra,
|
|
421
734
|
**extra,
|
|
422
735
|
)
|
|
423
736
|
|