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