Coverage for fastapi/applications.py: 100%
153 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-09-22 00:03 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-09-22 00:03 +0000
1from enum import Enum 1abcdef
2from typing import ( 1abcdef
3 Any,
4 Awaitable,
5 Callable,
6 Coroutine,
7 Dict,
8 List,
9 Optional,
10 Sequence,
11 Type,
12 TypeVar,
13 Union,
14)
16from fastapi import routing 1abcdef
17from fastapi.datastructures import Default, DefaultPlaceholder 1abcdef
18from fastapi.exception_handlers import ( 1abcdef
19 http_exception_handler,
20 request_validation_exception_handler,
21 websocket_request_validation_exception_handler,
22)
23from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcdef
24from fastapi.logger import logger 1abcdef
25from fastapi.openapi.docs import ( 1abcdef
26 get_redoc_html,
27 get_swagger_ui_html,
28 get_swagger_ui_oauth2_redirect_html,
29)
30from fastapi.openapi.utils import get_openapi 1abcdef
31from fastapi.params import Depends 1abcdef
32from fastapi.types import DecoratedCallable, IncEx 1abcdef
33from fastapi.utils import generate_unique_id 1abcdef
34from starlette.applications import Starlette 1abcdef
35from starlette.datastructures import State 1abcdef
36from starlette.exceptions import HTTPException 1abcdef
37from starlette.middleware import Middleware 1abcdef
38from starlette.middleware.base import BaseHTTPMiddleware 1abcdef
39from starlette.requests import Request 1abcdef
40from starlette.responses import HTMLResponse, JSONResponse, Response 1abcdef
41from starlette.routing import BaseRoute 1abcdef
42from starlette.types import ASGIApp, Lifespan, Receive, Scope, Send 1abcdef
43from typing_extensions import Annotated, Doc, deprecated 1abcdef
45AppType = TypeVar("AppType", bound="FastAPI") 1abcdef
48class FastAPI(Starlette): 1abcdef
49 """
50 `FastAPI` app class, the main entrypoint to use FastAPI.
52 Read more in the
53 [FastAPI docs for First Steps](https://fastapi.tiangolo.com/tutorial/first-steps/).
55 ## Example
57 ```python
58 from fastapi import FastAPI
60 app = FastAPI()
61 ```
62 """
64 def __init__( 1abcdef
65 self: AppType,
66 *,
67 debug: Annotated[
68 bool,
69 Doc(
70 """
71 Boolean indicating if debug tracebacks should be returned on server
72 errors.
74 Read more in the
75 [Starlette docs for Applications](https://www.starlette.io/applications/#instantiating-the-application).
76 """
77 ),
78 ] = False,
79 routes: Annotated[
80 Optional[List[BaseRoute]],
81 Doc(
82 """
83 **Note**: you probably shouldn't use this parameter, it is inherited
84 from Starlette and supported for compatibility.
86 ---
88 A list of routes to serve incoming HTTP and WebSocket requests.
89 """
90 ),
91 deprecated(
92 """
93 You normally wouldn't use this parameter with FastAPI, it is inherited
94 from Starlette and supported for compatibility.
96 In FastAPI, you normally would use the *path operation methods*,
97 like `app.get()`, `app.post()`, etc.
98 """
99 ),
100 ] = None,
101 title: Annotated[
102 str,
103 Doc(
104 """
105 The title of the API.
107 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
109 Read more in the
110 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
112 **Example**
114 ```python
115 from fastapi import FastAPI
117 app = FastAPI(title="ChimichangApp")
118 ```
119 """
120 ),
121 ] = "FastAPI",
122 summary: Annotated[
123 Optional[str],
124 Doc(
125 """
126 A short summary of the API.
128 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
130 Read more in the
131 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
133 **Example**
135 ```python
136 from fastapi import FastAPI
138 app = FastAPI(summary="Deadpond's favorite app. Nuff said.")
139 ```
140 """
141 ),
142 ] = None,
143 description: Annotated[
144 str,
145 Doc(
146 '''
147 A description of the API. Supports Markdown (using
148 [CommonMark syntax](https://commonmark.org/)).
150 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
152 Read more in the
153 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
155 **Example**
157 ```python
158 from fastapi import FastAPI
160 app = FastAPI(
161 description="""
162 ChimichangApp API helps you do awesome stuff. 🚀
164 ## Items
166 You can **read items**.
168 ## Users
170 You will be able to:
172 * **Create users** (_not implemented_).
173 * **Read users** (_not implemented_).
175 """
176 )
177 ```
178 '''
179 ),
180 ] = "",
181 version: Annotated[
182 str,
183 Doc(
184 """
185 The version of the API.
187 **Note** This is the version of your application, not the version of
188 the OpenAPI specification nor the version of FastAPI being used.
190 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
192 Read more in the
193 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
195 **Example**
197 ```python
198 from fastapi import FastAPI
200 app = FastAPI(version="0.0.1")
201 ```
202 """
203 ),
204 ] = "0.1.0",
205 openapi_url: Annotated[
206 Optional[str],
207 Doc(
208 """
209 The URL where the OpenAPI schema will be served from.
211 If you set it to `None`, no OpenAPI schema will be served publicly, and
212 the default automatic endpoints `/docs` and `/redoc` will also be
213 disabled.
215 Read more in the
216 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#openapi-url).
218 **Example**
220 ```python
221 from fastapi import FastAPI
223 app = FastAPI(openapi_url="/api/v1/openapi.json")
224 ```
225 """
226 ),
227 ] = "/openapi.json",
228 openapi_tags: Annotated[
229 Optional[List[Dict[str, Any]]],
230 Doc(
231 """
232 A list of tags used by OpenAPI, these are the same `tags` you can set
233 in the *path operations*, like:
235 * `@app.get("/users/", tags=["users"])`
236 * `@app.get("/items/", tags=["items"])`
238 The order of the tags can be used to specify the order shown in
239 tools like Swagger UI, used in the automatic path `/docs`.
241 It's not required to specify all the tags used.
243 The tags that are not declared MAY be organized randomly or based
244 on the tools' logic. Each tag name in the list MUST be unique.
246 The value of each item is a `dict` containing:
248 * `name`: The name of the tag.
249 * `description`: A short description of the tag.
250 [CommonMark syntax](https://commonmark.org/) MAY be used for rich
251 text representation.
252 * `externalDocs`: Additional external documentation for this tag. If
253 provided, it would contain a `dict` with:
254 * `description`: A short description of the target documentation.
255 [CommonMark syntax](https://commonmark.org/) MAY be used for
256 rich text representation.
257 * `url`: The URL for the target documentation. Value MUST be in
258 the form of a URL.
260 Read more in the
261 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-tags).
263 **Example**
265 ```python
266 from fastapi import FastAPI
268 tags_metadata = [
269 {
270 "name": "users",
271 "description": "Operations with users. The **login** logic is also here.",
272 },
273 {
274 "name": "items",
275 "description": "Manage items. So _fancy_ they have their own docs.",
276 "externalDocs": {
277 "description": "Items external docs",
278 "url": "https://fastapi.tiangolo.com/",
279 },
280 },
281 ]
283 app = FastAPI(openapi_tags=tags_metadata)
284 ```
285 """
286 ),
287 ] = None,
288 servers: Annotated[
289 Optional[List[Dict[str, Union[str, Any]]]],
290 Doc(
291 """
292 A `list` of `dict`s with connectivity information to a target server.
294 You would use it, for example, if your application is served from
295 different domains and you want to use the same Swagger UI in the
296 browser to interact with each of them (instead of having multiple
297 browser tabs open). Or if you want to leave fixed the possible URLs.
299 If the servers `list` is not provided, or is an empty `list`, the
300 default value would be a `dict` with a `url` value of `/`.
302 Each item in the `list` is a `dict` containing:
304 * `url`: A URL to the target host. This URL supports Server Variables
305 and MAY be relative, to indicate that the host location is relative
306 to the location where the OpenAPI document is being served. Variable
307 substitutions will be made when a variable is named in `{`brackets`}`.
308 * `description`: An optional string describing the host designated by
309 the URL. [CommonMark syntax](https://commonmark.org/) MAY be used for
310 rich text representation.
311 * `variables`: A `dict` between a variable name and its value. The value
312 is used for substitution in the server's URL template.
314 Read more in the
315 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#additional-servers).
317 **Example**
319 ```python
320 from fastapi import FastAPI
322 app = FastAPI(
323 servers=[
324 {"url": "https://stag.example.com", "description": "Staging environment"},
325 {"url": "https://prod.example.com", "description": "Production environment"},
326 ]
327 )
328 ```
329 """
330 ),
331 ] = None,
332 dependencies: Annotated[
333 Optional[Sequence[Depends]],
334 Doc(
335 """
336 A list of global dependencies, they will be applied to each
337 *path operation*, including in sub-routers.
339 Read more about it in the
340 [FastAPI docs for Global Dependencies](https://fastapi.tiangolo.com/tutorial/dependencies/global-dependencies/).
342 **Example**
344 ```python
345 from fastapi import Depends, FastAPI
347 from .dependencies import func_dep_1, func_dep_2
349 app = FastAPI(dependencies=[Depends(func_dep_1), Depends(func_dep_2)])
350 ```
351 """
352 ),
353 ] = None,
354 default_response_class: Annotated[
355 Type[Response],
356 Doc(
357 """
358 The default response class to be used.
360 Read more in the
361 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
363 **Example**
365 ```python
366 from fastapi import FastAPI
367 from fastapi.responses import ORJSONResponse
369 app = FastAPI(default_response_class=ORJSONResponse)
370 ```
371 """
372 ),
373 ] = Default(JSONResponse),
374 redirect_slashes: Annotated[
375 bool,
376 Doc(
377 """
378 Whether to detect and redirect slashes in URLs when the client doesn't
379 use the same format.
381 **Example**
383 ```python
384 from fastapi import FastAPI
386 app = FastAPI(redirect_slashes=True) # the default
388 @app.get("/items/")
389 async def read_items():
390 return [{"item_id": "Foo"}]
391 ```
393 With this app, if a client goes to `/items` (without a trailing slash),
394 they will be automatically redirected with an HTTP status code of 307
395 to `/items/`.
396 """
397 ),
398 ] = True,
399 docs_url: Annotated[
400 Optional[str],
401 Doc(
402 """
403 The path to the automatic interactive API documentation.
404 It is handled in the browser by Swagger UI.
406 The default URL is `/docs`. You can disable it by setting it to `None`.
408 If `openapi_url` is set to `None`, this will be automatically disabled.
410 Read more in the
411 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls).
413 **Example**
415 ```python
416 from fastapi import FastAPI
418 app = FastAPI(docs_url="/documentation", redoc_url=None)
419 ```
420 """
421 ),
422 ] = "/docs",
423 redoc_url: Annotated[
424 Optional[str],
425 Doc(
426 """
427 The path to the alternative automatic interactive API documentation
428 provided by ReDoc.
430 The default URL is `/redoc`. You can disable it by setting it to `None`.
432 If `openapi_url` is set to `None`, this will be automatically disabled.
434 Read more in the
435 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls).
437 **Example**
439 ```python
440 from fastapi import FastAPI
442 app = FastAPI(docs_url="/documentation", redoc_url="redocumentation")
443 ```
444 """
445 ),
446 ] = "/redoc",
447 swagger_ui_oauth2_redirect_url: Annotated[
448 Optional[str],
449 Doc(
450 """
451 The OAuth2 redirect endpoint for the Swagger UI.
453 By default it is `/docs/oauth2-redirect`.
455 This is only used if you use OAuth2 (with the "Authorize" button)
456 with Swagger UI.
457 """
458 ),
459 ] = "/docs/oauth2-redirect",
460 swagger_ui_init_oauth: Annotated[
461 Optional[Dict[str, Any]],
462 Doc(
463 """
464 OAuth2 configuration for the Swagger UI, by default shown at `/docs`.
466 Read more about the available configuration options in the
467 [Swagger UI docs](https://swagger.io/docs/open-source-tools/swagger-ui/usage/oauth2/).
468 """
469 ),
470 ] = None,
471 middleware: Annotated[
472 Optional[Sequence[Middleware]],
473 Doc(
474 """
475 List of middleware to be added when creating the application.
477 In FastAPI you would normally do this with `app.add_middleware()`
478 instead.
480 Read more in the
481 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/).
482 """
483 ),
484 ] = None,
485 exception_handlers: Annotated[
486 Optional[
487 Dict[
488 Union[int, Type[Exception]],
489 Callable[[Request, Any], Coroutine[Any, Any, Response]],
490 ]
491 ],
492 Doc(
493 """
494 A dictionary with handlers for exceptions.
496 In FastAPI, you would normally use the decorator
497 `@app.exception_handler()`.
499 Read more in the
500 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).
501 """
502 ),
503 ] = None,
504 on_startup: Annotated[
505 Optional[Sequence[Callable[[], Any]]],
506 Doc(
507 """
508 A list of startup event handler functions.
510 You should instead use the `lifespan` handlers.
512 Read more in the [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
513 """
514 ),
515 ] = None,
516 on_shutdown: Annotated[
517 Optional[Sequence[Callable[[], Any]]],
518 Doc(
519 """
520 A list of shutdown event handler functions.
522 You should instead use the `lifespan` handlers.
524 Read more in the
525 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
526 """
527 ),
528 ] = None,
529 lifespan: Annotated[
530 Optional[Lifespan[AppType]],
531 Doc(
532 """
533 A `Lifespan` context manager handler. This replaces `startup` and
534 `shutdown` functions with a single context manager.
536 Read more in the
537 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
538 """
539 ),
540 ] = None,
541 terms_of_service: Annotated[
542 Optional[str],
543 Doc(
544 """
545 A URL to the Terms of Service for your API.
547 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
549 Read more at the
550 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
552 **Example**
554 ```python
555 app = FastAPI(terms_of_service="http://example.com/terms/")
556 ```
557 """
558 ),
559 ] = None,
560 contact: Annotated[
561 Optional[Dict[str, Union[str, Any]]],
562 Doc(
563 """
564 A dictionary with the contact information for the exposed API.
566 It can contain several fields.
568 * `name`: (`str`) The name of the contact person/organization.
569 * `url`: (`str`) A URL pointing to the contact information. MUST be in
570 the format of a URL.
571 * `email`: (`str`) The email address of the contact person/organization.
572 MUST be in the format of an email address.
574 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
576 Read more at the
577 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
579 **Example**
581 ```python
582 app = FastAPI(
583 contact={
584 "name": "Deadpoolio the Amazing",
585 "url": "http://x-force.example.com/contact/",
586 "email": "dp@x-force.example.com",
587 }
588 )
589 ```
590 """
591 ),
592 ] = None,
593 license_info: Annotated[
594 Optional[Dict[str, Union[str, Any]]],
595 Doc(
596 """
597 A dictionary with the license information for the exposed API.
599 It can contain several fields.
601 * `name`: (`str`) **REQUIRED** (if a `license_info` is set). The
602 license name used for the API.
603 * `identifier`: (`str`) An [SPDX](https://spdx.dev/) license expression
604 for the API. The `identifier` field is mutually exclusive of the `url`
605 field. Available since OpenAPI 3.1.0, FastAPI 0.99.0.
606 * `url`: (`str`) A URL to the license used for the API. This MUST be
607 the format of a URL.
609 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
611 Read more at the
612 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
614 **Example**
616 ```python
617 app = FastAPI(
618 license_info={
619 "name": "Apache 2.0",
620 "url": "https://www.apache.org/licenses/LICENSE-2.0.html",
621 }
622 )
623 ```
624 """
625 ),
626 ] = None,
627 openapi_prefix: Annotated[
628 str,
629 Doc(
630 """
631 A URL prefix for the OpenAPI URL.
632 """
633 ),
634 deprecated(
635 """
636 "openapi_prefix" has been deprecated in favor of "root_path", which
637 follows more closely the ASGI standard, is simpler, and more
638 automatic.
639 """
640 ),
641 ] = "",
642 root_path: Annotated[
643 str,
644 Doc(
645 """
646 A path prefix handled by a proxy that is not seen by the application
647 but is seen by external clients, which affects things like Swagger UI.
649 Read more about it at the
650 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/).
652 **Example**
654 ```python
655 from fastapi import FastAPI
657 app = FastAPI(root_path="/api/v1")
658 ```
659 """
660 ),
661 ] = "",
662 root_path_in_servers: Annotated[
663 bool,
664 Doc(
665 """
666 To disable automatically generating the URLs in the `servers` field
667 in the autogenerated OpenAPI using the `root_path`.
669 Read more about it in the
670 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#disable-automatic-server-from-root_path).
672 **Example**
674 ```python
675 from fastapi import FastAPI
677 app = FastAPI(root_path_in_servers=False)
678 ```
679 """
680 ),
681 ] = True,
682 responses: Annotated[
683 Optional[Dict[Union[int, str], Dict[str, Any]]],
684 Doc(
685 """
686 Additional responses to be shown in OpenAPI.
688 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
690 Read more about it in the
691 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
693 And in the
694 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
695 """
696 ),
697 ] = None,
698 callbacks: Annotated[
699 Optional[List[BaseRoute]],
700 Doc(
701 """
702 OpenAPI callbacks that should apply to all *path operations*.
704 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
706 Read more about it in the
707 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
708 """
709 ),
710 ] = None,
711 webhooks: Annotated[
712 Optional[routing.APIRouter],
713 Doc(
714 """
715 Add OpenAPI webhooks. This is similar to `callbacks` but it doesn't
716 depend on specific *path operations*.
718 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
720 **Note**: This is available since OpenAPI 3.1.0, FastAPI 0.99.0.
722 Read more about it in the
723 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/).
724 """
725 ),
726 ] = None,
727 deprecated: Annotated[
728 Optional[bool],
729 Doc(
730 """
731 Mark all *path operations* as deprecated. You probably don't need it,
732 but it's available.
734 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
736 Read more about it in the
737 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
738 """
739 ),
740 ] = None,
741 include_in_schema: Annotated[
742 bool,
743 Doc(
744 """
745 To include (or not) all the *path operations* in the generated OpenAPI.
746 You probably don't need it, but it's available.
748 This affects the generated OpenAPI (e.g. visible at `/docs`).
750 Read more about it in the
751 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
752 """
753 ),
754 ] = True,
755 swagger_ui_parameters: Annotated[
756 Optional[Dict[str, Any]],
757 Doc(
758 """
759 Parameters to configure Swagger UI, the autogenerated interactive API
760 documentation (by default at `/docs`).
762 Read more about it in the
763 [FastAPI docs about how to Configure Swagger UI](https://fastapi.tiangolo.com/how-to/configure-swagger-ui/).
764 """
765 ),
766 ] = None,
767 generate_unique_id_function: Annotated[
768 Callable[[routing.APIRoute], str],
769 Doc(
770 """
771 Customize the function used to generate unique IDs for the *path
772 operations* shown in the generated OpenAPI.
774 This is particularly useful when automatically generating clients or
775 SDKs for your API.
777 Read more about it in the
778 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
779 """
780 ),
781 ] = Default(generate_unique_id),
782 separate_input_output_schemas: Annotated[
783 bool,
784 Doc(
785 """
786 Whether to generate separate OpenAPI schemas for request body and
787 response body when the results would be more precise.
789 This is particularly useful when automatically generating clients.
791 For example, if you have a model like:
793 ```python
794 from pydantic import BaseModel
796 class Item(BaseModel):
797 name: str
798 tags: list[str] = []
799 ```
801 When `Item` is used for input, a request body, `tags` is not required,
802 the client doesn't have to provide it.
804 But when using `Item` for output, for a response body, `tags` is always
805 available because it has a default value, even if it's just an empty
806 list. So, the client should be able to always expect it.
808 In this case, there would be two different schemas, one for input and
809 another one for output.
810 """
811 ),
812 ] = True,
813 openapi_external_docs: Annotated[
814 Optional[Dict[str, Any]],
815 Doc(
816 """
817 This field allows you to provide additional external documentation links.
818 If provided, it must be a dictionary containing:
820 * `description`: A brief description of the external documentation.
821 * `url`: The URL pointing to the external documentation. The value **MUST**
822 be a valid URL format.
824 **Example**:
826 ```python
827 from fastapi import FastAPI
829 external_docs = {
830 "description": "Detailed API Reference",
831 "url": "https://example.com/api-docs",
832 }
834 app = FastAPI(openapi_external_docs=external_docs)
835 ```
836 """
837 ),
838 ] = None,
839 **extra: Annotated[
840 Any,
841 Doc(
842 """
843 Extra keyword arguments to be stored in the app, not used by FastAPI
844 anywhere.
845 """
846 ),
847 ],
848 ) -> None:
849 self.debug = debug 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
850 self.title = title 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
851 self.summary = summary 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
852 self.description = description 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
853 self.version = version 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
854 self.terms_of_service = terms_of_service 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
855 self.contact = contact 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
856 self.license_info = license_info 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
857 self.openapi_url = openapi_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
858 self.openapi_tags = openapi_tags 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
859 self.root_path_in_servers = root_path_in_servers 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
860 self.docs_url = docs_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
861 self.redoc_url = redoc_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
862 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
863 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
864 self.swagger_ui_parameters = swagger_ui_parameters 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
865 self.servers = servers or [] 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
866 self.separate_input_output_schemas = separate_input_output_schemas 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
867 self.openapi_external_docs = openapi_external_docs 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
868 self.extra = extra 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
869 self.openapi_version: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
870 str,
871 Doc(
872 """
873 The version string of OpenAPI.
875 FastAPI will generate OpenAPI version 3.1.0, and will output that as
876 the OpenAPI version. But some tools, even though they might be
877 compatible with OpenAPI 3.1.0, might not recognize it as a valid.
879 So you could override this value to trick those tools into using
880 the generated OpenAPI. Have in mind that this is a hack. But if you
881 avoid using features added in OpenAPI 3.1.0, it might work for your
882 use case.
884 This is not passed as a parameter to the `FastAPI` class to avoid
885 giving the false idea that FastAPI would generate a different OpenAPI
886 schema. It is only available as an attribute.
888 **Example**
890 ```python
891 from fastapi import FastAPI
893 app = FastAPI()
895 app.openapi_version = "3.0.2"
896 ```
897 """
898 ),
899 ] = "3.1.0"
900 self.openapi_schema: Optional[Dict[str, Any]] = None 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
901 if self.openapi_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
902 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
903 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
904 # TODO: remove when discarding the openapi_prefix parameter
905 if openapi_prefix: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
906 logger.warning( 1abcdef
907 '"openapi_prefix" has been deprecated in favor of "root_path", which '
908 "follows more closely the ASGI standard, is simpler, and more "
909 "automatic. Check the docs at "
910 "https://fastapi.tiangolo.com/advanced/sub-applications/"
911 )
912 self.webhooks: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
913 routing.APIRouter,
914 Doc(
915 """
916 The `app.webhooks` attribute is an `APIRouter` with the *path
917 operations* that will be used just for documentation of webhooks.
919 Read more about it in the
920 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/).
921 """
922 ),
923 ] = webhooks or routing.APIRouter()
924 self.root_path = root_path or openapi_prefix 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
925 self.state: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
926 State,
927 Doc(
928 """
929 A state object for the application. This is the same object for the
930 entire application, it doesn't change from request to request.
932 You normally wouldn't use this in FastAPI, for most of the cases you
933 would instead use FastAPI dependencies.
935 This is simply inherited from Starlette.
937 Read more about it in the
938 [Starlette docs for Applications](https://www.starlette.io/applications/#storing-state-on-the-app-instance).
939 """
940 ),
941 ] = State()
942 self.dependency_overrides: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
943 Dict[Callable[..., Any], Callable[..., Any]],
944 Doc(
945 """
946 A dictionary with overrides for the dependencies.
948 Each key is the original dependency callable, and the value is the
949 actual dependency that should be called.
951 This is for testing, to replace expensive dependencies with testing
952 versions.
954 Read more about it in the
955 [FastAPI docs for Testing Dependencies with Overrides](https://fastapi.tiangolo.com/advanced/testing-dependencies/).
956 """
957 ),
958 ] = {}
959 self.router: routing.APIRouter = routing.APIRouter( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
960 routes=routes,
961 redirect_slashes=redirect_slashes,
962 dependency_overrides_provider=self,
963 on_startup=on_startup,
964 on_shutdown=on_shutdown,
965 lifespan=lifespan,
966 default_response_class=default_response_class,
967 dependencies=dependencies,
968 callbacks=callbacks,
969 deprecated=deprecated,
970 include_in_schema=include_in_schema,
971 responses=responses,
972 generate_unique_id_function=generate_unique_id_function,
973 )
974 self.exception_handlers: Dict[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
975 Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]]
976 ] = {} if exception_handlers is None else dict(exception_handlers)
977 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
978 self.exception_handlers.setdefault( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
979 RequestValidationError, request_validation_exception_handler
980 )
981 self.exception_handlers.setdefault( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
982 WebSocketRequestValidationError,
983 # Starlette still has incorrect type specification for the handlers
984 websocket_request_validation_exception_handler, # type: ignore
985 )
987 self.user_middleware: List[Middleware] = ( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
988 [] if middleware is None else list(middleware)
989 )
990 self.middleware_stack: Union[ASGIApp, None] = None 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
991 self.setup() 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
993 def openapi(self) -> Dict[str, Any]: 1abcdef
994 """
995 Generate the OpenAPI schema of the application. This is called by FastAPI
996 internally.
998 The first time it is called it stores the result in the attribute
999 `app.openapi_schema`, and next times it is called, it just returns that same
1000 result. To avoid the cost of generating the schema every time.
1002 If you need to modify the generated OpenAPI schema, you could modify it.
1004 Read more in the
1005 [FastAPI docs for OpenAPI](https://fastapi.tiangolo.com/how-to/extending-openapi/).
1006 """
1007 if not self.openapi_schema: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1008 self.openapi_schema = get_openapi( 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1009 title=self.title,
1010 version=self.version,
1011 openapi_version=self.openapi_version,
1012 summary=self.summary,
1013 description=self.description,
1014 terms_of_service=self.terms_of_service,
1015 contact=self.contact,
1016 license_info=self.license_info,
1017 routes=self.routes,
1018 webhooks=self.webhooks.routes,
1019 tags=self.openapi_tags,
1020 servers=self.servers,
1021 separate_input_output_schemas=self.separate_input_output_schemas,
1022 external_docs=self.openapi_external_docs,
1023 )
1024 return self.openapi_schema 2,f-f.f/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidieifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1026 def setup(self) -> None: 1abcdef
1027 if self.openapi_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
1028 urls = (server_data.get("url") for server_data in self.servers) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1029 server_urls = {url for url in urls if url} 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1031 async def openapi(req: Request) -> JSONResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1032 root_path = req.scope.get("root_path", "").rstrip("/") 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1033 if root_path not in server_urls: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1034 if root_path and self.root_path_in_servers: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1035 self.servers.insert(0, {"url": root_path}) 2Jf1fKfLf2fMf3fNfOf4fPf5fQfRf6fSf7fTfUf8fVf9fWfXf!fYf#fZf0f$f
1036 server_urls.add(root_path) 2Jf1fKfLf2fMf3fNfOf4fPf5fQfRf6fSf7fTfUf8fVf9fWfXf!fYf#fZf0f$f
1037 return JSONResponse(self.openapi()) 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt
1039 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1040 if self.openapi_url and self.docs_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
1042 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1043 root_path = req.scope.get("root_path", "").rstrip("/") 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt
1044 openapi_url = root_path + self.openapi_url 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt
1045 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt
1046 if oauth2_redirect_url: 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt
1047 oauth2_redirect_url = root_path + oauth2_redirect_url 2ntotptg qtrtstttutvth wtxtytztAtBti CtDtEtFtGtHtj ItJtKtLtMtNtk OtPtQtRtStTtl UtVtWt
1048 return get_swagger_ui_html( 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt
1049 openapi_url=openapi_url,
1050 title=f"{self.title} - Swagger UI",
1051 oauth2_redirect_url=oauth2_redirect_url,
1052 init_oauth=self.swagger_ui_init_oauth,
1053 swagger_ui_parameters=self.swagger_ui_parameters,
1054 )
1056 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1058 if self.swagger_ui_oauth2_redirect_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1060 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1061 return get_swagger_ui_oauth2_redirect_html() 2(t)t*t+t,t-t.t/t:t;t=t?t
1063 self.add_route( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1064 self.swagger_ui_oauth2_redirect_url,
1065 swagger_ui_redirect,
1066 include_in_schema=False,
1067 )
1068 if self.openapi_url and self.redoc_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd
1070 async def redoc_html(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1071 root_path = req.scope.get("root_path", "").rstrip("/") 29tg !th #ti $tj %tk 'tl
1072 openapi_url = root_path + self.openapi_url 29tg !th #ti $tj %tk 'tl
1073 return get_redoc_html( 29tg !th #ti $tj %tk 'tl
1074 openapi_url=openapi_url, title=f"{self.title} - ReDoc"
1075 )
1077 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd
1079 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 1abcdef
1080 if self.root_path: 2a uuvuwuxuyuzuAu,fBuCu-f.fDuht/f:f;f=fEuFuGuHu?fIuJuKuLu@tMuTbUb@fNuOu[f9tnt(tPuVbWbQu]fRuSuTu^f_fUuVuot)tXbYbZbWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrv`fsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWv[tJfXv{fYvZv0v|f1v2v3v4v5v6v7v8v9v}f!v#v$v%v'v(v~f)v*vag+v,v-v.v/v:v;v=vbg?vm ' n o p q r ( @vcgdg[veg]v^v_v`v{vfg|v}v~vawbwcwdwewfwgwgg0b1bhghwiwjwigkwlwmwnwjgowXtpwqwkglgrwmgswngdbebfbs t gbtwoguwvwwwpgxwywzwAwBwqgCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxrgoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSx2b3bTxUxsgVxtgWxugvgXxYxZx0x1x2x3xwg4x5x6x7x8x9x!x#x$x%xxg'xyg(x)x*x+x,x-x.x/x:x;x=x?x@x[xzg]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByAgCy4bDyEyFyGyHy5b6b7b| hb8bIy9b!bibu BgJyKyCgLyMyDgNyOyEgPyQyFgRySyGgTyUyHgVyWyIgXyYyJgZy0yKg1y2yLg3y4yMg5y6yNg7y8y9y!yOg#y$y%y'yPg(y)y*y+yQg,y-y.yRg/y:y;ySg=y?y@yTg[y]y^yUg_y`y{yVg|y}y~yWgazbzczdzezfzgzhzizXgjzkzlzYgmzZgnzozpzqzrzsztz0guzvzwzxzyzzzAzBzCz1gDzEzFz2gGz3gHzIzJz4gKzLzMz5gNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z6g,z-z.z/z:z7g;zpt=z?z8g@z[z]z^z9g_z`z!g{z|z#g}z~z$gaAbAcAdAeAfAgAhAiAjAkA1flAmA]tKf^tLf_t%fnAoApAqArAsAtAuAvAwAxA%gyAzAAABACADAEAFAGAHAIAJAKALAMANAOA'gPAQARASATAUAVAWAXAYAZA0A1A2A(g)g3A4A5A6A*g7A8A9A+g!A#A$A,g-g%Ag Df#b'Aqt(Art)Ast*A+A,A-A.g.A/A:A;A/g=A:g?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeB;gfB=ggB?ghB@giB[g]gjB^gkBlBmBnBoBpB_gqBrBsB`gtB{g|guBvB}gwB~gxByBzBABahBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBbhUBchVBdhWBehXB3tYBfhZB0Bgh1Bhh2Bih3Bjh4Bkh5B6B7B8Blh9B!Bmh#B$Bnh%B'B(Bohph)B*B+B,B-Bqh.B/B:B;Brh=B?B@B[Bsh]B^B_B`B{Bth|Buh}Bvh~BwhaCxhbCyhzhcCdCAheCBhfCChgCDhhCEhFhGhiCjCHhIhkCJhlCmCnCKhoCpCqCrCsCLhMhNhtCOhuCvCPhwCxCyCzCACQhRhBCCCDCECShFCGCHCICJCKCThLCMCUhVhNCOCPCQCRCWhSCTCUCXhVCYhWCXCYCZhZC0C1C2C0h1h3C4C5C6C7C2h8C9C!C#C3h$C%C'C4h(C)C*C+C,C5h-C.C6h/C:C;C=C?C7h@C[C]C^C_C`C8h{C|C}C~CaDbD9hcDdDeDfDgD!hhDiDjDkDlDmDnDoDpDqD#hrD$hsDtDuD%hvD'hwDxD(hyD)h*hzDAD+hBDCD,hDD-hED.hFD/hGDHDID:hJDKDLDMDNDODPDQD;hRDSDTDUDVDWDXD=hYDZD0D1D2D3D4D5D6D?h7D8D9D!D#D@h$D%D[h'D(D)D*D]h+D^h,D_h2f-D$b.D`h/D:D{h;D=Djb?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiE|hjEkElEmE}hnEoE~hpEqErEsEtEuEvEwExEyEzEAEaiBECEDEEE%b'b(bFEGEHEIEJEKELEMEb NEOEPEQERESETEbiUEVEcidiWEiteifigihiXEYEZE0Eii1E2E3E4E`t5E)b*bji6E7Eki!ttt*t8E+b,b9Eli!E#E$Emini%E'Eut+t-b.b/b(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFoiLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F{tMf)Fpi*F+F,Fqi-F.F/F:F;F=F?F@F[Fri]F^F_F`F{F|Fsi}F~FtiaGbGcGdGeGfGgGhGuiiGv ) w x y z A * jGviwikGxilGmGnGoGpGyiqGrGsGtGuGvGwGxGyGzGzi:b;bAiAGBGCGBiDGEGFGGGCiHGYtIGJGDiEiKGFiLGGikblbmbB C nbMGHiNGOGPGIiQGRGSGTGUGJiVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHKiHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H=b?b$H%HLi'HMi(HNiOi)H*H+H,H-H.H/HPi:H;H=H?H@H[H]H^H_H`HQi{HRi|H}H~HaIbIcIdIeIfIgIhIiIjIkISilImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUITiVI@bWIXIYIZI0I[b]b^b} ob_b1I`b{bpbD Ui2I3IVi4I5IWi6I7IXi8I9IYi!I#IZi$I%I0i'I(I1i)I*I2i+I,I3i-I.I4i/I:I5i;I=I6i?I@I[I]I7i^I_I`I{I8i|I}I~IaJ9ibJcJdJ!ieJfJgJ#ihJiJjJ$ikJlJmJ%inJoJpJ'iqJrJsJ(itJuJvJwJxJyJzJAJBJ)iCJDJEJ*iFJ+iGJHJIJJJKJLJMJ,iNJOJPJQJRJSJTJUJVJ-iWJXJYJ.iZJ/i0J1J2J:i3J4J5J;i6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaK=ibKcKdKeKfK?igKvthKiK@ijKkKlKmK[inKoK]ipKqK^irKsK_itKuKvKwKxKyKzKAKBKCKDK3fEKFK|tNf}tOf~t'fGKHKIKJKKKLKMKNKOKPKQK`iRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K{i8K9K!K#K$K%K'K(K)K*K+K,K-K.K|i}i/K:K;K=K~i?K@K[Kaj]K^K_Kbjcj`Kh Ef|b{Kwt|Kxt}Kyt~KaLbLcLdjdLeLfLgLejhLfjiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLgjyLhjzLijALjjBLkjljCLmjDLELFLGLHLILnjJLKLLLojMLpjqjNLOLrjPLsjQLRLSLTLtjULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$Luj%Lvj'Lwj(Lxj)L4t*Lyj+L,Lzj-LAj.LBj/LCj:LDj;L=L?L@LEj[L]LFj^L_LGj`L{L|LHjIj}L~LaMbMcMJjdMeMfMgMKjhMiMjMkMLjlMmMnMoMpMMjqMNjrMOjsMPjtMQjuMRjSjvMwMTjxMUjyMVjzMWjAMXjYjZjBMCM0j1jDM2jEMFMGM3jHMIMJMKMLM4j5j6jMM7jNMOM8jPMQMRMSMTM9j!jUMVMWMXM#jYMZM0M1M2M3M$j4M5M%j'j6M7M8M9M!M(j#M$M%M)j'M*j(M)M*M+j+M,M-M.M,j-j/M:M;M=M?M.j@M[M]M^M/j_M`M{M:j|M}M~MaNbN;jcNdN=jeNfNgNhNiN?jjNkNlNmNnNoN@jpNqNrNsNtNuN[jvNwNxNyNzN]jANBNCNDNENFNGNHNINJN^jKN_jLNMNNN`jON{jPNQN|jRN}j~jSNTNakUNVNbkWNckXNdkYNekZN0N1Nfk2N3N4N5N6N7N8N9Ngk!N#N$N%N'N(N)Nhk*N+N,N-N.N/N:N;N=Nik?N@N[N]N^Njk_N`Nkk{N|N}N~NlkaOmkbOnk4fcO}bdOokeOfOpkgOhOqbiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOqkEOFOGOHOrkIOJOskKOLOMONOOOPOQOROSOTOUOVOtkWOXOYOZO~bacbc0O1O2O3O4O5O6O7Oc 8O9O!O#O$O%O'Ouk(O)Ovkwk*OjtxkykzkAk+O,O-O.OBk/O:O;O=Oau?OccdcCk@O[ODk#tzt,t]Oecfc^OEk_O`O{OFkGk|O}OAt-tgchcic~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5PHk6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PbuPfaQIkbQcQdQJkeQfQgQhQiQjQkQlQmQKknQoQpQqQrQsQLktQuQMkvQwQxQyQzQAQBQCQNkDQE + F G H I J , EQOkPkFQQkGQHQIQJQKQRkLQMQNQOQPQQQRQSQTQUQSkjckcTkVQWQXQUkYQZQ0Q1QVk2QZt3Q4QWkXk5QYk6QZkrbsbtbK L ub7Q0k8Q9Q!Q1k#Q$Q%Q'Q(Q2k)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R3k2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`Rlcmcnc- ocpc. qcrcsc{R|R4k}R5k~R6k7kaSbScSdSeSfSgS8khSiSjSkSlSmSnSoSpSqS9krS!ksStSuSvSwSxSySzSASBSCSDSESFS#kGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S$k)Stc*S+S,S-S.Sucvcwc~ vbxc/SyczcwbM %k:S;S'k=S?S(k@S[S)k]S^S*k_S`S+k{S|S,k}S~S-kaTbT.kcTdT/keTfT:kgThT;kiTjT=kkTlTmTnT?koTpTqTrT@ksTtTuTvT[kwTxTyT]kzTATBT^kCTDTET_kFTGTHT`kITJTKT{kLTMTNT|kOTPTQTRTSTTTUTVTWT}kXTYTZT~k0Tal1T2T3T4T5T6T7Tbl8T9T!T#T$T%T'T(T)Tcl*T+T,Tdl-Tel.T/T:Tfl;T=T?Tgl@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUhlwUxUyUzUAUilBUBtCUDUjlEUFUGUHUklIUJUllKULUmlMUNUnlOUPUQURUSUTUUUVUWUXUYU5fZU0UcuQfduRfeu(f1U2U3U4U5U6U7U8U9U!U#Uol$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[Upl]U^U_U`U{U|U}U~UaVbVcVdVeVfVqlrlgVhViVjVslkVlVmVtlnVoVpVulvlqVi FfAcrVCtsVDttVEtuVvVwVxVwlyVzVAVBVxlCVylDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVzlTVAlUVBlVVClWVDlElXVFlYVZV0V1V2V3VGl4V5V6VHl7VIlJl8V9VKl!VLl#V$V%V'VMl(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{VNl|VOl}VPl~VQlaW5tbWRlcWdWSleWTlfWUlgWVlhWWliWjWkWlWXlmWnWYloWpWZlqWrWsW0l1ltWuWvWwWxW2lyWzWAWBW3lCWDWEWFW4lGWHWIWJWKW5lLW6lMW7lNW8lOW9lPW!l#lQWRW$lSW%lTW'lUW(lVW)l*l+lWWXW,l-lYW.lZW0W1W/l2W3W4W5W6W:l;l=l7W?l8W9W@l!W#W$W%W'W[l]l(W)W*W+W^l,W-W.W/W:W;W_l=W?W`l{l@W[W]W^W_W|l`W{W|W}l}W~l~WaXbXamcXdXeXfXbmcmgXhXiXjXkXdmlXmXnXoXempXqXrXfmsXtXuXvXwXgmxXyXhmzXAXBXCXDXimEXFXGXHXIXJXjmKXLXMXNXOXPXkmQXRXSXTXUXlmVXWXXXYXZX0X1X2X3X4Xmm5Xnm6X7X8Xom9Xpm!X#Xqm$Xrmsm%X'Xtm(X)Xum*Xvm+Xwm,Xxm-X.X/Xym:X;X=X?X@X[X]X^Xzm_X`X{X|X}X~XaYAmbYcYdYeYfYgYhYiYjYBmkYlYmYnYoYCmpYqYDmrYsYtYuYEmvYFmwYGm6fxYBcyYHmzYAYImBYCYxbDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYCcJmZY0Y1Y2YKm3Y4YLm5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)YMm*Y+Y,Y-YDcEcFc.Y/Y:Y;Y=Y?Y@Y[Yd ]Y^Y_Y`Y{Y|Y}YNm~YaZOmPmbZktQmRmSmTmcZdZeZfZUmgZhZiZjZfukZGcHcVmlZmZWm$tFt.tnZIcJcoZXmpZqZrZYmZmsZtZGt/tKcLcMcuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z0m@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0guSfv01mw0x0y02mz0A0B0C0D0E0F0G0H03mI0J0K0L0M0N04mO0P05mQ0R0S0T0U0V0W0X06mY0N / O P Q R S : Z07m8m009m1020304050!m60708090!0#0$0%0'0(0#mNcOc$m)0*0+0%m,0-0.0/0'm:00t;0=0(m)m?0*m@0+mybzbAbT U Bb[0,m]0^0_0-m`0{0|0}0~0.ma1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1/m:1;1=1?1@1[1]1^1_1`1{1|1}1~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2PcQcRc; ScTc= UcVcWcr2s2:mt2;mu2=m?mv2w2x2y2z2A2B2@mC2D2E2F2G2H2I2J2K2L2[mM2]mN2O2P2Q2R2S2T2U2V2W2X2Y2Z202^m122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2_ma3Xcb3c3d3e3f3YcZc0cabCb1cg32c3cDbV `mh3i3{mj3k3|ml3m3}mn3o3~mp3q3anr3s3bnt3u3cnv3w3dnx3y3enz3A3fnB3C3gnD3E3hnF3G3H3I3inJ3K3L3M3jnN3O3P3Q3knR3S3T3lnU3V3W3mnX3Y3Z3nn031323on334353pn637383qn93!3#3$3%3'3(3)3*3rn+3,3-3sn.3tn/3:3;3=3?3@3[3un]3^3_3`3{3|3}3~3a4vnb4c4d4wne4xnf4g4h4yni4j4k4znl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4AnR4S4T4U4V4BnW4HtX4Y4CnZ4041424Dn3444En5464Fn7484Gn94!4#4$4%4'4(4)4*4+4,47f-4.4huTfiuUfju)f/4:4;4=4?4@4[4]4^4_4`4Hn{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5Inn5o5p5q5r5s5t5u5v5w5x5y5z5A5JnKnB5C5D5E5LnF5G5H5MnI5J5K5NnOnL5j Gf4cM5ItN5JtO5KtP5Q5R5S5PnT5U5V5W5QnX5RnY5Z505152535455565758595!5#5$5%5Sn'5Tn(5Un)5Vn*5WnXn+5Yn,5-5.5/5:5;5Zn=5?5@50n[51n2n]5^53n_54n`5{5|5}55n~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r66ns67nt68nu69nv66tw6!nx6y6#nz6$nA6%nB6'nC6(nD6E6F6G6)nH6I6*nJ6K6+nL6M6N6,n-nO6P6Q6R6S6.nT6U6V6W6/nX6Y6Z606:n1626364656;n66=n76?n86@n96[n!6]n^n#6$6_n%6`n'6{n(6|n)6}n~nao*6+6boco,6do-6.6/6eo:6;6=6?6@6fogoho[6io]6^6jo_6`6{6|6}6kolo~6a7b7c7mod7e7f7g7h7i7noj7k7oopol7m7n7o7p7qoq7r7s7rot7sou7v7w7tox7y7z7A7uovoB7C7D7E7F7woG7H7I7J7xoK7L7M7yoN7O7P7Q7R7zoS7T7AoU7V7W7X7Y7BoZ70717273747Co5767778797!7Do#7$7%7'7(7Eo)7*7+7,7-7.7/7:7;7=7Fo?7Go@7[7]7Ho^7Io_7`7Jo{7KoLo|7}7Mo~7a8Nob8Ooc8Pod8Qoe8f8g8Roh8i8j8k8l8m8n8o8Sop8q8r8s8t8u8v8Tow8x8y8z8A8B8C8D8E8UoF8G8H8I8J8VoK8L8WoM8N8O8P8XoQ8YoR8Zo8fS85cT80oU8V81oW8X8EbY8Z808182838485868788898!8#8$8%8'8(8)8*8+8,86c2o-8.8/8:83o;8=84o?8@8[8]8^8_8`8{8|8}8~8a95ob9c9d9e97c8c9cf9g9h9i9j9k9l9m9e n9o9p9q9r9s9t96ou9v97o8ow9lt9o!o#o$ox9y9z9A9%oB9C9D9E9kuF9!c#c'oG9H9(o%tLt:tI9$c%cJ9)oK9L9M9*o+oN9O9Mt;t'c(c)cP9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!,ol!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!luVfQ!-oR!S!T!.oU!V!W!X!Y!Z!0!1!2!/o3!4!5!6!7!8!:o9!!!;o#!$!%!'!(!)!*!+!=o,!W ? X Y Z 0 1 @ -!?o@o.![o/!:!;!=!?!]o@![!]!^!_!`!{!|!}!~!^o*c+c_oa#b#c#`od#e#f#g#{oh#1ti#j#|o}ok#~ol#apFbGbHb2 3 Ibm#bpn#o#p#cpq#r#s#t#u#dpv#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$eph$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$,c-c.c[ /c:c] ;c=c?cM$N$fpO$gpP$hpipQ$R$S$T$U$V$W$jpX$Y$Z$0$1$2$3$4$5$6$kp7$lp8$9$!$#$$$%$'$($)$*$+$,$-$.$mp/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%npv%@cw%x%y%z%A%[c]c^cbbJb_cB%`c{cKb4 opC%D%ppE%F%qpG%H%rpI%J%spK%L%tpM%N%upO%P%vpQ%R%wpS%T%xpU%V%ypW%X%zpY%Z%Ap0%1%2%3%Bp4%5%6%7%Cp8%9%!%#%Dp$%%%'%Ep(%)%*%Fp+%,%-%Gp.%/%:%Hp;%=%?%Ip@%[%]%Jp^%_%`%{%|%}%~%a'b'Kpc'd'e'Lpf'Mpg'h'i'j'k'l'm'Npn'o'p'q'r's't'u'v'Opw'x'y'Ppz'QpA'B'C'RpD'E'F'SpG'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'Tp$'%'''(')'Up*'Nt+','Vp-'.'/':'Wp;'='Xp?'@'Yp[']'Zp^'_'`'{'|'}'~'a(b(c(d(9fe(f(muWfnuXfou*fg(h(i(j(k(l(m(n(o(p(q(0pr(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(1pI(J(K(L(M(N(O(P(Q(R(S(T(U(V(2p3pW(X(Y(Z(4p0(1(2(5p3(4(5(6p7p6(k Hf|c7(Ot8(Pt9(Qt!(#($(%(8p'((()(*(9p+(!p,(-(.(/(:(;(=(?(@([(](^(_(`({(|(#p}($p~(%pa)'pb)(p)pc)*pd)e)f)g)h)i)+pj)k)l),pm)-p.pn)o)/pp):pq)r)s)t);pu)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)=pN)?pO)@pP)[pQ)7tR)]pS)T)^pU)_pV)`pW){pX)|pY)Z)0)1)}p2)3)~p4)5)aq6)7)8)bqcq9)!)#)$)%)dq')()))*)eq+),)-).)fq/):);)=)?)gq@)hq[)iq])jq^)kq_)lqmq`){)nq|)oq})pq~)qqa*rqsqtqb*c*uqvqd*wqe*f*g*xqh*i*j*k*l*yqzqAqm*Bqn*o*Cqp*q*r*s*t*DqEqu*v*w*x*Fqy*z*A*B*C*D*GqE*F*HqIqG*H*I*J*K*JqL*M*N*KqO*LqP*Q*R*MqS*T*U*V*NqOqW*X*Y*Z*0*Pq1*2*3*4*Qq5*6*7*Rq8*9*!*#*$*Sq%*'*Tq(*)***+*,*Uq-*.*/*:*;*=*Vq?*@*[*]*^*_*Wq`*{*|*}*~*Xqa+b+c+d+e+f+g+h+i+j+Yqk+Zql+m+n+0qo+1qp+q+2qr+3q4qs+t+5qu+v+6qw+7qx+8qy+9qz+A+B+!qC+D+E+F+G+H+I+J+#qK+L+M+N+O+P+Q+$qR+S+T+U+V+W+X+Y+Z+%q0+1+2+3+4+'q5+6+(q7+8+9+!+)q#+*q$++q!f%+}c'+,q(+)+-q*+++Lb,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,~c.qe,f,g,h,/qi,j,:qk,l,m,n,o,p,q,r,s,t,u,v,;qw,x,y,z,adbdcdA,B,C,D,E,F,G,H,f I,J,K,L,M,N,O,=qP,Q,?q@qR,mt[q]q^q_qS,T,U,V,`qW,X,Y,Z,pu0,dded{q1,2,|q'tRt=t3,fdgd4,}q5,6,7,~qar8,9,St?thdidjd!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-brG-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-quYf#-cr$-%-'-dr(-)-*-+-,---.-/-:-er;-=-?-@-[-]-fr^-_-gr`-{-|-}-~-a.b.c.hrd.5 ^ 6 7 8 9 ! _ e.irjrf.krg.h.i.j.k.lrl.m.n.o.p.q.r.s.t.u.mrkdldnrv.w.x.ory.z.A.B.prC.2tD.E.qrrrF.srG.trMbNbOb# $ PbH.urI.J.K.vrL.M.N.O.P.wrQ.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/xrC/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/mdndod` pdqd{ rdsdtd7/8/yr9/zr!/ArBr#/$/%/'/(/)/*/Cr+/,/-/.///:/;/=/?/@/Dr[/Er]/^/_/`/{/|/}/~/a:b:c:d:e:f:Frg:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:GrQ:udR:S:T:U:V:vdwdxdcbQbydW:zdAdRb% HrX:Y:IrZ:0:Jr1:2:Kr3:4:Lr5:6:Mr7:8:Nr9:!:Or#:$:Pr%:':Qr(:):Rr*:+:Sr,:-:Tr.:/:::;:Ur=:?:@:[:Vr]:^:_:`:Wr{:|:}:Xr~:a;b;Yrc;d;e;Zrf;g;h;0ri;j;k;1rl;m;n;2ro;p;q;r;s;t;u;v;w;3rx;y;z;4rA;5rB;C;D;E;F;G;H;6rI;J;K;L;M;N;O;P;Q;7rR;S;T;8rU;9rV;W;X;!rY;Z;0;#r1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;$r{;|;};~;a=%rb=Ttc=d='re=f=g=h=(ri=j=)rk=l=*rm=n=+ro=p=q=r=s=t=u=v=w=x=y=#fz=A=ruZfsu0ftu+fB=C=D=E=F=G=H=I=J=K=L=,rM=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=-r3=4=5=6=7=8=9=!=#=$=%='=(=)=.r/r*=+=,=-=:r.=/=:=;r;===?==r?r@=l IfBd[=Ut]=Vt^=Wt_=`={=|=@r}=~=a?b?[rc?]rd?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?^rt?_ru?`rv?{rw?|r}rx?~ry?z?A?B?C?D?asE?F?G?bsH?csdsI?J?esK?fsL?M?N?O?gsP?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?hs8?is9?js!?ks#?8t$?ls%?'?ms(?ns)?os*?ps+?qs,?-?.?/?rs:?;?ss=???ts@?[?]?usvs^?_?`?{?|?ws}?~?a@b@xsc@d@e@f@ysg@h@i@j@k@zsl@Asm@Bsn@Cso@Dsp@EsFsq@r@Gss@Hst@Isu@Jsv@KsLsMsw@x@NsOsy@Psz@A@B@QsC@D@E@F@G@RsSsTsH@UsI@J@VsK@L@M@N@O@WsXsP@Q@R@S@YsT@U@V@W@X@Y@ZsZ@0@0s1s1@2@3@4@5@2s6@7@8@3s9@4s!@#@$@5s%@'@(@)@6s7s*@+@,@-@.@8s/@:@;@=@9s?@@@[@!s]@^@_@`@{@#s|@}@$s~@a[b[c[d[%se[f[g[h[i[j['sk[l[m[n[o[p[(sq[r[s[t[u[)sv[w[x[y[z[A[B[C[D[E[*sF[+sG[H[I[,sJ[-sK[L[.sM[/s:sN[O[;sP[Q[=sR[?sS[@sT[[sU[V[W[]sX[Y[Z[0[1[2[3[4[^s5[6[7[8[9[![#[_s$[%['[([)[*[+[,[-[`s.[/[:[;[=[{s?[@[|s[[][^[_[}s`[~s{[at$f|[Cd}[bt~[a]ctb]c]Sbd]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]Dddtz]A]B]C]etD]E]ftF]G]H]I]J]K]L]M]N]O]P]Q]gtR]S]T]U]EdFdGdV]W]X]Y]Z]0]1]2]
1081 scope["root_path"] = self.root_path 2[tJf]tKf^tLf_t%f{tMf|tNf}tOf~t'fbuPfcuQfduRfeu(fguSfhuTfiuUfju)fluVfmuWfnuXfou*fquYfruZfsu0ftu+f
1082 await super().__call__(scope, receive, send) 2a uuvuwuxuyuzuAu,fBuCu-f.fDuht/f:f;f=fEuFuGuHu?fIuJuKuLu@tMuTbUb@fNuOu[f9tnt(tPuVbWbQu]fRuSuTu^f_fUuVuot)tXbYbZbWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrv`fsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWv[tJfXv{fYvZv0v|f1v2v3v4v5v6v7v8v9v}f!v#v$v%v'v(v~f)v*vag+v,v-v.v/v:v;v=vbg?vm ' n o p q r ( @vcgdg[veg]v^v_v`v{vfg|v}v~vawbwcwdwewfwgwgg0b1bhghwiwjwigkwlwmwnwjgowXtpwqwkglgrwmgswngdbebfbs t gbtwoguwvwwwpgxwywzwAwBwqgCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxrgoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSx2b3bTxUxsgVxtgWxugvgXxYxZx0x1x2x3xwg4x5x6x7x8x9x!x#x$x%xxg'xyg(x)x*x+x,x-x.x/x:x;x=x?x@x[xzg]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByAgCy4bDyEyFyGyHy5b6b7b| hb8bIy9b!bibu BgJyKyCgLyMyDgNyOyEgPyQyFgRySyGgTyUyHgVyWyIgXyYyJgZy0yKg1y2yLg3y4yMg5y6yNg7y8y9y!yOg#y$y%y'yPg(y)y*y+yQg,y-y.yRg/y:y;ySg=y?y@yTg[y]y^yUg_y`y{yVg|y}y~yWgazbzczdzezfzgzhzizXgjzkzlzYgmzZgnzozpzqzrzsztz0guzvzwzxzyzzzAzBzCz1gDzEzFz2gGz3gHzIzJz4gKzLzMz5gNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z6g,z-z.z/z:z7g;zpt=z?z8g@z[z]z^z9g_z`z!g{z|z#g}z~z$gaAbAcAdAeAfAgAhAiAjAkA1flAmA]tKf^tLf_t%fnAoApAqArAsAtAuAvAwAxA%gyAzAAABACADAEAFAGAHAIAJAKALAMANAOA'gPAQARASATAUAVAWAXAYAZA0A1A2A(g)g3A4A5A6A*g7A8A9A+g!A#A$A,g-g%Ag Df#b'Aqt(Art)Ast*A+A,A-A.g.A/A:A;A/g=A:g?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeB;gfB=ggB?ghB@giB[g]gjB^gkBlBmBnBoBpB_gqBrBsB`gtB{g|guBvB}gwB~gxByBzBABahBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBbhUBchVBdhWBehXB3tYBfhZB0Bgh1Bhh2Bih3Bjh4Bkh5B6B7B8Blh9B!Bmh#B$Bnh%B'B(Bohph)B*B+B,B-Bqh.B/B:B;Brh=B?B@B[Bsh]B^B_B`B{Bth|Buh}Bvh~BwhaCxhbCyhzhcCdCAheCBhfCChgCDhhCEhFhGhiCjCHhIhkCJhlCmCnCKhoCpCqCrCsCLhMhNhtCOhuCvCPhwCxCyCzCACQhRhBCCCDCECShFCGCHCICJCKCThLCMCUhVhNCOCPCQCRCWhSCTCUCXhVCYhWCXCYCZhZC0C1C2C0h1h3C4C5C6C7C2h8C9C!C#C3h$C%C'C4h(C)C*C+C,C5h-C.C6h/C:C;C=C?C7h@C[C]C^C_C`C8h{C|C}C~CaDbD9hcDdDeDfDgD!hhDiDjDkDlDmDnDoDpDqD#hrD$hsDtDuD%hvD'hwDxD(hyD)h*hzDAD+hBDCD,hDD-hED.hFD/hGDHDID:hJDKDLDMDNDODPDQD;hRDSDTDUDVDWDXD=hYDZD0D1D2D3D4D5D6D?h7D8D9D!D#D@h$D%D[h'D(D)D*D]h+D^h,D_h2f-D$b.D`h/D:D{h;D=Djb?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiE|hjEkElEmE}hnEoE~hpEqErEsEtEuEvEwExEyEzEAEaiBECEDEEE%b'b(bFEGEHEIEJEKELEMEb NEOEPEQERESETEbiUEVEcidiWEiteifigihiXEYEZE0Eii1E2E3E4E`t5E)b*bji6E7Eki!ttt*t8E+b,b9Eli!E#E$Emini%E'Eut+t-b.b/b(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFoiLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F{tMf)Fpi*F+F,Fqi-F.F/F:F;F=F?F@F[Fri]F^F_F`F{F|Fsi}F~FtiaGbGcGdGeGfGgGhGuiiGv ) w x y z A * jGviwikGxilGmGnGoGpGyiqGrGsGtGuGvGwGxGyGzGzi:b;bAiAGBGCGBiDGEGFGGGCiHGYtIGJGDiEiKGFiLGGikblbmbB C nbMGHiNGOGPGIiQGRGSGTGUGJiVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHKiHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H=b?b$H%HLi'HMi(HNiOi)H*H+H,H-H.H/HPi:H;H=H?H@H[H]H^H_H`HQi{HRi|H}H~HaIbIcIdIeIfIgIhIiIjIkISilImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUITiVI@bWIXIYIZI0I[b]b^b} ob_b1I`b{bpbD Ui2I3IVi4I5IWi6I7IXi8I9IYi!I#IZi$I%I0i'I(I1i)I*I2i+I,I3i-I.I4i/I:I5i;I=I6i?I@I[I]I7i^I_I`I{I8i|I}I~IaJ9ibJcJdJ!ieJfJgJ#ihJiJjJ$ikJlJmJ%inJoJpJ'iqJrJsJ(itJuJvJwJxJyJzJAJBJ)iCJDJEJ*iFJ+iGJHJIJJJKJLJMJ,iNJOJPJQJRJSJTJUJVJ-iWJXJYJ.iZJ/i0J1J2J:i3J4J5J;i6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaK=ibKcKdKeKfK?igKvthKiK@ijKkKlKmK[inKoK]ipKqK^irKsK_itKuKvKwKxKyKzKAKBKCKDK3fEKFK|tNf}tOf~t'fGKHKIKJKKKLKMKNKOKPKQK`iRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K{i8K9K!K#K$K%K'K(K)K*K+K,K-K.K|i}i/K:K;K=K~i?K@K[Kaj]K^K_Kbjcj`Kh Ef|b{Kwt|Kxt}Kyt~KaLbLcLdjdLeLfLgLejhLfjiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLgjyLhjzLijALjjBLkjljCLmjDLELFLGLHLILnjJLKLLLojMLpjqjNLOLrjPLsjQLRLSLTLtjULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$Luj%Lvj'Lwj(Lxj)L4t*Lyj+L,Lzj-LAj.LBj/LCj:LDj;L=L?L@LEj[L]LFj^L_LGj`L{L|LHjIj}L~LaMbMcMJjdMeMfMgMKjhMiMjMkMLjlMmMnMoMpMMjqMNjrMOjsMPjtMQjuMRjSjvMwMTjxMUjyMVjzMWjAMXjYjZjBMCM0j1jDM2jEMFMGM3jHMIMJMKMLM4j5j6jMM7jNMOM8jPMQMRMSMTM9j!jUMVMWMXM#jYMZM0M1M2M3M$j4M5M%j'j6M7M8M9M!M(j#M$M%M)j'M*j(M)M*M+j+M,M-M.M,j-j/M:M;M=M?M.j@M[M]M^M/j_M`M{M:j|M}M~MaNbN;jcNdN=jeNfNgNhNiN?jjNkNlNmNnNoN@jpNqNrNsNtNuN[jvNwNxNyNzN]jANBNCNDNENFNGNHNINJN^jKN_jLNMNNN`jON{jPNQN|jRN}j~jSNTNakUNVNbkWNckXNdkYNekZN0N1Nfk2N3N4N5N6N7N8N9Ngk!N#N$N%N'N(N)Nhk*N+N,N-N.N/N:N;N=Nik?N@N[N]N^Njk_N`Nkk{N|N}N~NlkaOmkbOnk4fcO}bdOokeOfOpkgOhOqbiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOqkEOFOGOHOrkIOJOskKOLOMONOOOPOQOROSOTOUOVOtkWOXOYOZO~bacbc0O1O2O3O4O5O6O7Oc 8O9O!O#O$O%O'Ouk(O)Ovkwk*OjtxkykzkAk+O,O-O.OBk/O:O;O=Oau?OccdcCk@O[ODk#tzt,t]Oecfc^OEk_O`O{OFkGk|O}OAt-tgchcic~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5PHk6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PbuPfaQIkbQcQdQJkeQfQgQhQiQjQkQlQmQKknQoQpQqQrQsQLktQuQMkvQwQxQyQzQAQBQCQNkDQE + F G H I J , EQOkPkFQQkGQHQIQJQKQRkLQMQNQOQPQQQRQSQTQUQSkjckcTkVQWQXQUkYQZQ0Q1QVk2QZt3Q4QWkXk5QYk6QZkrbsbtbK L ub7Q0k8Q9Q!Q1k#Q$Q%Q'Q(Q2k)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R3k2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`Rlcmcnc- ocpc. qcrcsc{R|R4k}R5k~R6k7kaSbScSdSeSfSgS8khSiSjSkSlSmSnSoSpSqS9krS!ksStSuSvSwSxSySzSASBSCSDSESFS#kGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S$k)Stc*S+S,S-S.Sucvcwc~ vbxc/SyczcwbM %k:S;S'k=S?S(k@S[S)k]S^S*k_S`S+k{S|S,k}S~S-kaTbT.kcTdT/keTfT:kgThT;kiTjT=kkTlTmTnT?koTpTqTrT@ksTtTuTvT[kwTxTyT]kzTATBT^kCTDTET_kFTGTHT`kITJTKT{kLTMTNT|kOTPTQTRTSTTTUTVTWT}kXTYTZT~k0Tal1T2T3T4T5T6T7Tbl8T9T!T#T$T%T'T(T)Tcl*T+T,Tdl-Tel.T/T:Tfl;T=T?Tgl@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUhlwUxUyUzUAUilBUBtCUDUjlEUFUGUHUklIUJUllKULUmlMUNUnlOUPUQURUSUTUUUVUWUXUYU5fZU0UcuQfduRfeu(f1U2U3U4U5U6U7U8U9U!U#Uol$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[Upl]U^U_U`U{U|U}U~UaVbVcVdVeVfVqlrlgVhViVjVslkVlVmVtlnVoVpVulvlqVi FfAcrVCtsVDttVEtuVvVwVxVwlyVzVAVBVxlCVylDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVzlTVAlUVBlVVClWVDlElXVFlYVZV0V1V2V3VGl4V5V6VHl7VIlJl8V9VKl!VLl#V$V%V'VMl(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{VNl|VOl}VPl~VQlaW5tbWRlcWdWSleWTlfWUlgWVlhWWliWjWkWlWXlmWnWYloWpWZlqWrWsW0l1ltWuWvWwWxW2lyWzWAWBW3lCWDWEWFW4lGWHWIWJWKW5lLW6lMW7lNW8lOW9lPW!l#lQWRW$lSW%lTW'lUW(lVW)l*l+lWWXW,l-lYW.lZW0W1W/l2W3W4W5W6W:l;l=l7W?l8W9W@l!W#W$W%W'W[l]l(W)W*W+W^l,W-W.W/W:W;W_l=W?W`l{l@W[W]W^W_W|l`W{W|W}l}W~l~WaXbXamcXdXeXfXbmcmgXhXiXjXkXdmlXmXnXoXempXqXrXfmsXtXuXvXwXgmxXyXhmzXAXBXCXDXimEXFXGXHXIXJXjmKXLXMXNXOXPXkmQXRXSXTXUXlmVXWXXXYXZX0X1X2X3X4Xmm5Xnm6X7X8Xom9Xpm!X#Xqm$Xrmsm%X'Xtm(X)Xum*Xvm+Xwm,Xxm-X.X/Xym:X;X=X?X@X[X]X^Xzm_X`X{X|X}X~XaYAmbYcYdYeYfYgYhYiYjYBmkYlYmYnYoYCmpYqYDmrYsYtYuYEmvYFmwYGm6fxYBcyYHmzYAYImBYCYxbDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYCcJmZY0Y1Y2YKm3Y4YLm5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)YMm*Y+Y,Y-YDcEcFc.Y/Y:Y;Y=Y?Y@Y[Yd ]Y^Y_Y`Y{Y|Y}YNm~YaZOmPmbZktQmRmSmTmcZdZeZfZUmgZhZiZjZfukZGcHcVmlZmZWm$tFt.tnZIcJcoZXmpZqZrZYmZmsZtZGt/tKcLcMcuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z0m@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0guSfv01mw0x0y02mz0A0B0C0D0E0F0G0H03mI0J0K0L0M0N04mO0P05mQ0R0S0T0U0V0W0X06mY0N / O P Q R S : Z07m8m009m1020304050!m60708090!0#0$0%0'0(0#mNcOc$m)0*0+0%m,0-0.0/0'm:00t;0=0(m)m?0*m@0+mybzbAbT U Bb[0,m]0^0_0-m`0{0|0}0~0.ma1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1/m:1;1=1?1@1[1]1^1_1`1{1|1}1~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2PcQcRc; ScTc= UcVcWcr2s2:mt2;mu2=m?mv2w2x2y2z2A2B2@mC2D2E2F2G2H2I2J2K2L2[mM2]mN2O2P2Q2R2S2T2U2V2W2X2Y2Z202^m122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2_ma3Xcb3c3d3e3f3YcZc0cabCb1cg32c3cDbV `mh3i3{mj3k3|ml3m3}mn3o3~mp3q3anr3s3bnt3u3cnv3w3dnx3y3enz3A3fnB3C3gnD3E3hnF3G3H3I3inJ3K3L3M3jnN3O3P3Q3knR3S3T3lnU3V3W3mnX3Y3Z3nn031323on334353pn637383qn93!3#3$3%3'3(3)3*3rn+3,3-3sn.3tn/3:3;3=3?3@3[3un]3^3_3`3{3|3}3~3a4vnb4c4d4wne4xnf4g4h4yni4j4k4znl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4AnR4S4T4U4V4BnW4HtX4Y4CnZ4041424Dn3444En5464Fn7484Gn94!4#4$4%4'4(4)4*4+4,47f-4.4huTfiuUfju)f/4:4;4=4?4@4[4]4^4_4`4Hn{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5Inn5o5p5q5r5s5t5u5v5w5x5y5z5A5JnKnB5C5D5E5LnF5G5H5MnI5J5K5NnOnL5j Gf4cM5ItN5JtO5KtP5Q5R5S5PnT5U5V5W5QnX5RnY5Z505152535455565758595!5#5$5%5Sn'5Tn(5Un)5Vn*5WnXn+5Yn,5-5.5/5:5;5Zn=5?5@50n[51n2n]5^53n_54n`5{5|5}55n~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r66ns67nt68nu69nv66tw6!nx6y6#nz6$nA6%nB6'nC6(nD6E6F6G6)nH6I6*nJ6K6+nL6M6N6,n-nO6P6Q6R6S6.nT6U6V6W6/nX6Y6Z606:n1626364656;n66=n76?n86@n96[n!6]n^n#6$6_n%6`n'6{n(6|n)6}n~nao*6+6boco,6do-6.6/6eo:6;6=6?6@6fogoho[6io]6^6jo_6`6{6|6}6kolo~6a7b7c7mod7e7f7g7h7i7noj7k7oopol7m7n7o7p7qoq7r7s7rot7sou7v7w7tox7y7z7A7uovoB7C7D7E7F7woG7H7I7J7xoK7L7M7yoN7O7P7Q7R7zoS7T7AoU7V7W7X7Y7BoZ70717273747Co5767778797!7Do#7$7%7'7(7Eo)7*7+7,7-7.7/7:7;7=7Fo?7Go@7[7]7Ho^7Io_7`7Jo{7KoLo|7}7Mo~7a8Nob8Ooc8Pod8Qoe8f8g8Roh8i8j8k8l8m8n8o8Sop8q8r8s8t8u8v8Tow8x8y8z8A8B8C8D8E8UoF8G8H8I8J8VoK8L8WoM8N8O8P8XoQ8YoR8Zo8fS85cT80oU8V81oW8X8EbY8Z808182838485868788898!8#8$8%8'8(8)8*8+8,86c2o-8.8/8:83o;8=84o?8@8[8]8^8_8`8{8|8}8~8a95ob9c9d9e97c8c9cf9g9h9i9j9k9l9m9e n9o9p9q9r9s9t96ou9v97o8ow9lt9o!o#o$ox9y9z9A9%oB9C9D9E9kuF9!c#c'oG9H9(o%tLt:tI9$c%cJ9)oK9L9M9*o+oN9O9Mt;t'c(c)cP9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!,ol!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!luVfQ!-oR!S!T!.oU!V!W!X!Y!Z!0!1!2!/o3!4!5!6!7!8!:o9!!!;o#!$!%!'!(!)!*!+!=o,!W ? X Y Z 0 1 @ -!?o@o.![o/!:!;!=!?!]o@![!]!^!_!`!{!|!}!~!^o*c+c_oa#b#c#`od#e#f#g#{oh#1ti#j#|o}ok#~ol#apFbGbHb2 3 Ibm#bpn#o#p#cpq#r#s#t#u#dpv#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$eph$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$,c-c.c[ /c:c] ;c=c?cM$N$fpO$gpP$hpipQ$R$S$T$U$V$W$jpX$Y$Z$0$1$2$3$4$5$6$kp7$lp8$9$!$#$$$%$'$($)$*$+$,$-$.$mp/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%npv%@cw%x%y%z%A%[c]c^cbbJb_cB%`c{cKb4 opC%D%ppE%F%qpG%H%rpI%J%spK%L%tpM%N%upO%P%vpQ%R%wpS%T%xpU%V%ypW%X%zpY%Z%Ap0%1%2%3%Bp4%5%6%7%Cp8%9%!%#%Dp$%%%'%Ep(%)%*%Fp+%,%-%Gp.%/%:%Hp;%=%?%Ip@%[%]%Jp^%_%`%{%|%}%~%a'b'Kpc'd'e'Lpf'Mpg'h'i'j'k'l'm'Npn'o'p'q'r's't'u'v'Opw'x'y'Ppz'QpA'B'C'RpD'E'F'SpG'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'Tp$'%'''(')'Up*'Nt+','Vp-'.'/':'Wp;'='Xp?'@'Yp[']'Zp^'_'`'{'|'}'~'a(b(c(d(9fe(f(muWfnuXfou*fg(h(i(j(k(l(m(n(o(p(q(0pr(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(1pI(J(K(L(M(N(O(P(Q(R(S(T(U(V(2p3pW(X(Y(Z(4p0(1(2(5p3(4(5(6p7p6(k Hf|c7(Ot8(Pt9(Qt!(#($(%(8p'((()(*(9p+(!p,(-(.(/(:(;(=(?(@([(](^(_(`({(|(#p}($p~(%pa)'pb)(p)pc)*pd)e)f)g)h)i)+pj)k)l),pm)-p.pn)o)/pp):pq)r)s)t);pu)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)=pN)?pO)@pP)[pQ)7tR)]pS)T)^pU)_pV)`pW){pX)|pY)Z)0)1)}p2)3)~p4)5)aq6)7)8)bqcq9)!)#)$)%)dq')()))*)eq+),)-).)fq/):);)=)?)gq@)hq[)iq])jq^)kq_)lqmq`){)nq|)oq})pq~)qqa*rqsqtqb*c*uqvqd*wqe*f*g*xqh*i*j*k*l*yqzqAqm*Bqn*o*Cqp*q*r*s*t*DqEqu*v*w*x*Fqy*z*A*B*C*D*GqE*F*HqIqG*H*I*J*K*JqL*M*N*KqO*LqP*Q*R*MqS*T*U*V*NqOqW*X*Y*Z*0*Pq1*2*3*4*Qq5*6*7*Rq8*9*!*#*$*Sq%*'*Tq(*)***+*,*Uq-*.*/*:*;*=*Vq?*@*[*]*^*_*Wq`*{*|*}*~*Xqa+b+c+d+e+f+g+h+i+j+Yqk+Zql+m+n+0qo+1qp+q+2qr+3q4qs+t+5qu+v+6qw+7qx+8qy+9qz+A+B+!qC+D+E+F+G+H+I+J+#qK+L+M+N+O+P+Q+$qR+S+T+U+V+W+X+Y+Z+%q0+1+2+3+4+'q5+6+(q7+8+9+!+)q#+*q$++q!f%+}c'+,q(+)+-q*+++Lb,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,~c.qe,f,g,h,/qi,j,:qk,l,m,n,o,p,q,r,s,t,u,v,;qw,x,y,z,adbdcdA,B,C,D,E,F,G,H,f I,J,K,L,M,N,O,=qP,Q,?q@qR,mt[q]q^q_qS,T,U,V,`qW,X,Y,Z,pu0,dded{q1,2,|q'tRt=t3,fdgd4,}q5,6,7,~qar8,9,St?thdidjd!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-brG-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-quYf#-cr$-%-'-dr(-)-*-+-,---.-/-:-er;-=-?-@-[-]-fr^-_-gr`-{-|-}-~-a.b.c.hrd.5 ^ 6 7 8 9 ! _ e.irjrf.krg.h.i.j.k.lrl.m.n.o.p.q.r.s.t.u.mrkdldnrv.w.x.ory.z.A.B.prC.2tD.E.qrrrF.srG.trMbNbOb# $ PbH.urI.J.K.vrL.M.N.O.P.wrQ.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/xrC/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/mdndod` pdqd{ rdsdtd7/8/yr9/zr!/ArBr#/$/%/'/(/)/*/Cr+/,/-/.///:/;/=/?/@/Dr[/Er]/^/_/`/{/|/}/~/a:b:c:d:e:f:Frg:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:GrQ:udR:S:T:U:V:vdwdxdcbQbydW:zdAdRb% HrX:Y:IrZ:0:Jr1:2:Kr3:4:Lr5:6:Mr7:8:Nr9:!:Or#:$:Pr%:':Qr(:):Rr*:+:Sr,:-:Tr.:/:::;:Ur=:?:@:[:Vr]:^:_:`:Wr{:|:}:Xr~:a;b;Yrc;d;e;Zrf;g;h;0ri;j;k;1rl;m;n;2ro;p;q;r;s;t;u;v;w;3rx;y;z;4rA;5rB;C;D;E;F;G;H;6rI;J;K;L;M;N;O;P;Q;7rR;S;T;8rU;9rV;W;X;!rY;Z;0;#r1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;$r{;|;};~;a=%rb=Ttc=d='re=f=g=h=(ri=j=)rk=l=*rm=n=+ro=p=q=r=s=t=u=v=w=x=y=#fz=A=ruZfsu0ftu+fB=C=D=E=F=G=H=I=J=K=L=,rM=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=-r3=4=5=6=7=8=9=!=#=$=%='=(=)=.r/r*=+=,=-=:r.=/=:=;r;===?==r?r@=l IfBd[=Ut]=Vt^=Wt_=`={=|=@r}=~=a?b?[rc?]rd?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?^rt?_ru?`rv?{rw?|r}rx?~ry?z?A?B?C?D?asE?F?G?bsH?csdsI?J?esK?fsL?M?N?O?gsP?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?hs8?is9?js!?ks#?8t$?ls%?'?ms(?ns)?os*?ps+?qs,?-?.?/?rs:?;?ss=???ts@?[?]?usvs^?_?`?{?|?ws}?~?a@b@xsc@d@e@f@ysg@h@i@j@k@zsl@Asm@Bsn@Cso@Dsp@EsFsq@r@Gss@Hst@Isu@Jsv@KsLsMsw@x@NsOsy@Psz@A@B@QsC@D@E@F@G@RsSsTsH@UsI@J@VsK@L@M@N@O@WsXsP@Q@R@S@YsT@U@V@W@X@Y@ZsZ@0@0s1s1@2@3@4@5@2s6@7@8@3s9@4s!@#@$@5s%@'@(@)@6s7s*@+@,@-@.@8s/@:@;@=@9s?@@@[@!s]@^@_@`@{@#s|@}@$s~@a[b[c[d[%se[f[g[h[i[j['sk[l[m[n[o[p[(sq[r[s[t[u[)sv[w[x[y[z[A[B[C[D[E[*sF[+sG[H[I[,sJ[-sK[L[.sM[/s:sN[O[;sP[Q[=sR[?sS[@sT[[sU[V[W[]sX[Y[Z[0[1[2[3[4[^s5[6[7[8[9[![#[_s$[%['[([)[*[+[,[-[`s.[/[:[;[=[{s?[@[|s[[][^[_[}s`[~s{[at$f|[Cd}[bt~[a]ctb]c]Sbd]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]Dddtz]A]B]C]etD]E]ftF]G]H]I]J]K]L]M]N]O]P]Q]gtR]S]T]U]EdFdGdV]W]X]Y]Z]0]1]2]
1084 def add_api_route( 1abcdef
1085 self,
1086 path: str,
1087 endpoint: Callable[..., Any],
1088 *,
1089 response_model: Any = Default(None),
1090 status_code: Optional[int] = None,
1091 tags: Optional[List[Union[str, Enum]]] = None,
1092 dependencies: Optional[Sequence[Depends]] = None,
1093 summary: Optional[str] = None,
1094 description: Optional[str] = None,
1095 response_description: str = "Successful Response",
1096 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1097 deprecated: Optional[bool] = None,
1098 methods: Optional[List[str]] = None,
1099 operation_id: Optional[str] = None,
1100 response_model_include: Optional[IncEx] = None,
1101 response_model_exclude: Optional[IncEx] = None,
1102 response_model_by_alias: bool = True,
1103 response_model_exclude_unset: bool = False,
1104 response_model_exclude_defaults: bool = False,
1105 response_model_exclude_none: bool = False,
1106 include_in_schema: bool = True,
1107 response_class: Union[Type[Response], DefaultPlaceholder] = Default(
1108 JSONResponse
1109 ),
1110 name: Optional[str] = None,
1111 openapi_extra: Optional[Dict[str, Any]] = None,
1112 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1113 generate_unique_id
1114 ),
1115 ) -> None:
1116 self.router.add_api_route( 1abcdef
1117 path,
1118 endpoint=endpoint,
1119 response_model=response_model,
1120 status_code=status_code,
1121 tags=tags,
1122 dependencies=dependencies,
1123 summary=summary,
1124 description=description,
1125 response_description=response_description,
1126 responses=responses,
1127 deprecated=deprecated,
1128 methods=methods,
1129 operation_id=operation_id,
1130 response_model_include=response_model_include,
1131 response_model_exclude=response_model_exclude,
1132 response_model_by_alias=response_model_by_alias,
1133 response_model_exclude_unset=response_model_exclude_unset,
1134 response_model_exclude_defaults=response_model_exclude_defaults,
1135 response_model_exclude_none=response_model_exclude_none,
1136 include_in_schema=include_in_schema,
1137 response_class=response_class,
1138 name=name,
1139 openapi_extra=openapi_extra,
1140 generate_unique_id_function=generate_unique_id_function,
1141 )
1143 def api_route( 1abcdef
1144 self,
1145 path: str,
1146 *,
1147 response_model: Any = Default(None),
1148 status_code: Optional[int] = None,
1149 tags: Optional[List[Union[str, Enum]]] = None,
1150 dependencies: Optional[Sequence[Depends]] = None,
1151 summary: Optional[str] = None,
1152 description: Optional[str] = None,
1153 response_description: str = "Successful Response",
1154 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1155 deprecated: Optional[bool] = None,
1156 methods: Optional[List[str]] = None,
1157 operation_id: Optional[str] = None,
1158 response_model_include: Optional[IncEx] = None,
1159 response_model_exclude: Optional[IncEx] = None,
1160 response_model_by_alias: bool = True,
1161 response_model_exclude_unset: bool = False,
1162 response_model_exclude_defaults: bool = False,
1163 response_model_exclude_none: bool = False,
1164 include_in_schema: bool = True,
1165 response_class: Type[Response] = Default(JSONResponse),
1166 name: Optional[str] = None,
1167 openapi_extra: Optional[Dict[str, Any]] = None,
1168 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1169 generate_unique_id
1170 ),
1171 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1172 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef
1173 self.router.add_api_route( 1abcdef
1174 path,
1175 func,
1176 response_model=response_model,
1177 status_code=status_code,
1178 tags=tags,
1179 dependencies=dependencies,
1180 summary=summary,
1181 description=description,
1182 response_description=response_description,
1183 responses=responses,
1184 deprecated=deprecated,
1185 methods=methods,
1186 operation_id=operation_id,
1187 response_model_include=response_model_include,
1188 response_model_exclude=response_model_exclude,
1189 response_model_by_alias=response_model_by_alias,
1190 response_model_exclude_unset=response_model_exclude_unset,
1191 response_model_exclude_defaults=response_model_exclude_defaults,
1192 response_model_exclude_none=response_model_exclude_none,
1193 include_in_schema=include_in_schema,
1194 response_class=response_class,
1195 name=name,
1196 openapi_extra=openapi_extra,
1197 generate_unique_id_function=generate_unique_id_function,
1198 )
1199 return func 1abcdef
1201 return decorator 1abcdef
1203 def add_api_websocket_route( 1abcdef
1204 self,
1205 path: str,
1206 endpoint: Callable[..., Any],
1207 name: Optional[str] = None,
1208 *,
1209 dependencies: Optional[Sequence[Depends]] = None,
1210 ) -> None:
1211 self.router.add_api_websocket_route( 1abcdef
1212 path,
1213 endpoint,
1214 name=name,
1215 dependencies=dependencies,
1216 )
1218 def websocket( 1abcdef
1219 self,
1220 path: Annotated[
1221 str,
1222 Doc(
1223 """
1224 WebSocket path.
1225 """
1226 ),
1227 ],
1228 name: Annotated[
1229 Optional[str],
1230 Doc(
1231 """
1232 A name for the WebSocket. Only used internally.
1233 """
1234 ),
1235 ] = None,
1236 *,
1237 dependencies: Annotated[
1238 Optional[Sequence[Depends]],
1239 Doc(
1240 """
1241 A list of dependencies (using `Depends()`) to be used for this
1242 WebSocket.
1244 Read more about it in the
1245 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1246 """
1247 ),
1248 ] = None,
1249 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1250 """
1251 Decorate a WebSocket function.
1253 Read more about it in the
1254 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1256 **Example**
1258 ```python
1259 from fastapi import FastAPI, WebSocket
1261 app = FastAPI()
1263 @app.websocket("/ws")
1264 async def websocket_endpoint(websocket: WebSocket):
1265 await websocket.accept()
1266 while True:
1267 data = await websocket.receive_text()
1268 await websocket.send_text(f"Message text was: {data}")
1269 ```
1270 """
1272 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef
1273 self.add_api_websocket_route( 1abcdef
1274 path,
1275 func,
1276 name=name,
1277 dependencies=dependencies,
1278 )
1279 return func 1abcdef
1281 return decorator 1abcdef
1283 def include_router( 1abcdef
1284 self,
1285 router: Annotated[routing.APIRouter, Doc("The `APIRouter` to include.")],
1286 *,
1287 prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
1288 tags: Annotated[
1289 Optional[List[Union[str, Enum]]],
1290 Doc(
1291 """
1292 A list of tags to be applied to all the *path operations* in this
1293 router.
1295 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1297 Read more about it in the
1298 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1299 """
1300 ),
1301 ] = None,
1302 dependencies: Annotated[
1303 Optional[Sequence[Depends]],
1304 Doc(
1305 """
1306 A list of dependencies (using `Depends()`) to be applied to all the
1307 *path operations* in this router.
1309 Read more about it in the
1310 [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
1312 **Example**
1314 ```python
1315 from fastapi import Depends, FastAPI
1317 from .dependencies import get_token_header
1318 from .internal import admin
1320 app = FastAPI()
1322 app.include_router(
1323 admin.router,
1324 dependencies=[Depends(get_token_header)],
1325 )
1326 ```
1327 """
1328 ),
1329 ] = None,
1330 responses: Annotated[
1331 Optional[Dict[Union[int, str], Dict[str, Any]]],
1332 Doc(
1333 """
1334 Additional responses to be shown in OpenAPI.
1336 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1338 Read more about it in the
1339 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
1341 And in the
1342 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
1343 """
1344 ),
1345 ] = None,
1346 deprecated: Annotated[
1347 Optional[bool],
1348 Doc(
1349 """
1350 Mark all the *path operations* in this router as deprecated.
1352 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1354 **Example**
1356 ```python
1357 from fastapi import FastAPI
1359 from .internal import old_api
1361 app = FastAPI()
1363 app.include_router(
1364 old_api.router,
1365 deprecated=True,
1366 )
1367 ```
1368 """
1369 ),
1370 ] = None,
1371 include_in_schema: Annotated[
1372 bool,
1373 Doc(
1374 """
1375 Include (or not) all the *path operations* in this router in the
1376 generated OpenAPI schema.
1378 This affects the generated OpenAPI (e.g. visible at `/docs`).
1380 **Example**
1382 ```python
1383 from fastapi import FastAPI
1385 from .internal import old_api
1387 app = FastAPI()
1389 app.include_router(
1390 old_api.router,
1391 include_in_schema=False,
1392 )
1393 ```
1394 """
1395 ),
1396 ] = True,
1397 default_response_class: Annotated[
1398 Type[Response],
1399 Doc(
1400 """
1401 Default response class to be used for the *path operations* in this
1402 router.
1404 Read more in the
1405 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
1407 **Example**
1409 ```python
1410 from fastapi import FastAPI
1411 from fastapi.responses import ORJSONResponse
1413 from .internal import old_api
1415 app = FastAPI()
1417 app.include_router(
1418 old_api.router,
1419 default_response_class=ORJSONResponse,
1420 )
1421 ```
1422 """
1423 ),
1424 ] = Default(JSONResponse),
1425 callbacks: Annotated[
1426 Optional[List[BaseRoute]],
1427 Doc(
1428 """
1429 List of *path operations* that will be used as OpenAPI callbacks.
1431 This is only for OpenAPI documentation, the callbacks won't be used
1432 directly.
1434 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1436 Read more about it in the
1437 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1438 """
1439 ),
1440 ] = None,
1441 generate_unique_id_function: Annotated[
1442 Callable[[routing.APIRoute], str],
1443 Doc(
1444 """
1445 Customize the function used to generate unique IDs for the *path
1446 operations* shown in the generated OpenAPI.
1448 This is particularly useful when automatically generating clients or
1449 SDKs for your API.
1451 Read more about it in the
1452 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1453 """
1454 ),
1455 ] = Default(generate_unique_id),
1456 ) -> None:
1457 """
1458 Include an `APIRouter` in the same app.
1460 Read more about it in the
1461 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/).
1463 ## Example
1465 ```python
1466 from fastapi import FastAPI
1468 from .users import users_router
1470 app = FastAPI()
1472 app.include_router(users_router)
1473 ```
1474 """
1475 self.router.include_router( 2a Ub3]m n o p q r 6b7b| hb8b9b!b%b'b(bb *b4]v w x y z A ]b^b} ob_b`b{b~bacbcc dc5]E F G H I J vcwc~ vbxcyczcDcEcFcd Hc6]N O P Q R S Zc0cabCb1c2c3c7c8c9ce #c7]W X Y Z 0 1 ]c^cbbJb_c`c{cadbdcdf ed8]5 6 7 8 9 ! wdxdcbQbydzdAdEdFdGd
1476 router,
1477 prefix=prefix,
1478 tags=tags,
1479 dependencies=dependencies,
1480 responses=responses,
1481 deprecated=deprecated,
1482 include_in_schema=include_in_schema,
1483 default_response_class=default_response_class,
1484 callbacks=callbacks,
1485 generate_unique_id_function=generate_unique_id_function,
1486 )
1488 def get( 1abcdef
1489 self,
1490 path: Annotated[
1491 str,
1492 Doc(
1493 """
1494 The URL path to be used for this *path operation*.
1496 For example, in `http://example.com/items`, the path is `/items`.
1497 """
1498 ),
1499 ],
1500 *,
1501 response_model: Annotated[
1502 Any,
1503 Doc(
1504 """
1505 The type to use for the response.
1507 It could be any valid Pydantic *field* type. So, it doesn't have to
1508 be a Pydantic model, it could be other things, like a `list`, `dict`,
1509 etc.
1511 It will be used for:
1513 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1514 show it as the response (JSON Schema).
1515 * Serialization: you could return an arbitrary object and the
1516 `response_model` would be used to serialize that object into the
1517 corresponding JSON.
1518 * Filtering: the JSON sent to the client will only contain the data
1519 (fields) defined in the `response_model`. If you returned an object
1520 that contains an attribute `password` but the `response_model` does
1521 not include that field, the JSON sent to the client would not have
1522 that `password`.
1523 * Validation: whatever you return will be serialized with the
1524 `response_model`, converting any data as necessary to generate the
1525 corresponding JSON. But if the data in the object returned is not
1526 valid, that would mean a violation of the contract with the client,
1527 so it's an error from the API developer. So, FastAPI will raise an
1528 error and return a 500 error code (Internal Server Error).
1530 Read more about it in the
1531 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1532 """
1533 ),
1534 ] = Default(None),
1535 status_code: Annotated[
1536 Optional[int],
1537 Doc(
1538 """
1539 The default status code to be used for the response.
1541 You could override the status code by returning a response directly.
1543 Read more about it in the
1544 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1545 """
1546 ),
1547 ] = None,
1548 tags: Annotated[
1549 Optional[List[Union[str, Enum]]],
1550 Doc(
1551 """
1552 A list of tags to be applied to the *path operation*.
1554 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1556 Read more about it in the
1557 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1558 """
1559 ),
1560 ] = None,
1561 dependencies: Annotated[
1562 Optional[Sequence[Depends]],
1563 Doc(
1564 """
1565 A list of dependencies (using `Depends()`) to be applied to the
1566 *path operation*.
1568 Read more about it in the
1569 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
1570 """
1571 ),
1572 ] = None,
1573 summary: Annotated[
1574 Optional[str],
1575 Doc(
1576 """
1577 A summary for the *path operation*.
1579 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1581 Read more about it in the
1582 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1583 """
1584 ),
1585 ] = None,
1586 description: Annotated[
1587 Optional[str],
1588 Doc(
1589 """
1590 A description for the *path operation*.
1592 If not provided, it will be extracted automatically from the docstring
1593 of the *path operation function*.
1595 It can contain Markdown.
1597 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1599 Read more about it in the
1600 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1601 """
1602 ),
1603 ] = None,
1604 response_description: Annotated[
1605 str,
1606 Doc(
1607 """
1608 The description for the default response.
1610 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1611 """
1612 ),
1613 ] = "Successful Response",
1614 responses: Annotated[
1615 Optional[Dict[Union[int, str], Dict[str, Any]]],
1616 Doc(
1617 """
1618 Additional responses that could be returned by this *path operation*.
1620 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1621 """
1622 ),
1623 ] = None,
1624 deprecated: Annotated[
1625 Optional[bool],
1626 Doc(
1627 """
1628 Mark this *path operation* as deprecated.
1630 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1631 """
1632 ),
1633 ] = None,
1634 operation_id: Annotated[
1635 Optional[str],
1636 Doc(
1637 """
1638 Custom operation ID to be used by this *path operation*.
1640 By default, it is generated automatically.
1642 If you provide a custom operation ID, you need to make sure it is
1643 unique for the whole API.
1645 You can customize the
1646 operation ID generation with the parameter
1647 `generate_unique_id_function` in the `FastAPI` class.
1649 Read more about it in the
1650 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1651 """
1652 ),
1653 ] = None,
1654 response_model_include: Annotated[
1655 Optional[IncEx],
1656 Doc(
1657 """
1658 Configuration passed to Pydantic to include only certain fields in the
1659 response data.
1661 Read more about it in the
1662 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1663 """
1664 ),
1665 ] = None,
1666 response_model_exclude: Annotated[
1667 Optional[IncEx],
1668 Doc(
1669 """
1670 Configuration passed to Pydantic to exclude certain fields in the
1671 response data.
1673 Read more about it in the
1674 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1675 """
1676 ),
1677 ] = None,
1678 response_model_by_alias: Annotated[
1679 bool,
1680 Doc(
1681 """
1682 Configuration passed to Pydantic to define if the response model
1683 should be serialized by alias when an alias is used.
1685 Read more about it in the
1686 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1687 """
1688 ),
1689 ] = True,
1690 response_model_exclude_unset: Annotated[
1691 bool,
1692 Doc(
1693 """
1694 Configuration passed to Pydantic to define if the response data
1695 should have all the fields, including the ones that were not set and
1696 have their default values. This is different from
1697 `response_model_exclude_defaults` in that if the fields are set,
1698 they will be included in the response, even if the value is the same
1699 as the default.
1701 When `True`, default values are omitted from the response.
1703 Read more about it in the
1704 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1705 """
1706 ),
1707 ] = False,
1708 response_model_exclude_defaults: Annotated[
1709 bool,
1710 Doc(
1711 """
1712 Configuration passed to Pydantic to define if the response data
1713 should have all the fields, including the ones that have the same value
1714 as the default. This is different from `response_model_exclude_unset`
1715 in that if the fields are set but contain the same default values,
1716 they will be excluded from the response.
1718 When `True`, default values are omitted from the response.
1720 Read more about it in the
1721 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1722 """
1723 ),
1724 ] = False,
1725 response_model_exclude_none: Annotated[
1726 bool,
1727 Doc(
1728 """
1729 Configuration passed to Pydantic to define if the response data should
1730 exclude fields set to `None`.
1732 This is much simpler (less smart) than `response_model_exclude_unset`
1733 and `response_model_exclude_defaults`. You probably want to use one of
1734 those two instead of this one, as those allow returning `None` values
1735 when it makes sense.
1737 Read more about it in the
1738 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
1739 """
1740 ),
1741 ] = False,
1742 include_in_schema: Annotated[
1743 bool,
1744 Doc(
1745 """
1746 Include this *path operation* in the generated OpenAPI schema.
1748 This affects the generated OpenAPI (e.g. visible at `/docs`).
1750 Read more about it in the
1751 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
1752 """
1753 ),
1754 ] = True,
1755 response_class: Annotated[
1756 Type[Response],
1757 Doc(
1758 """
1759 Response class to be used for this *path operation*.
1761 This will not be used if you return a response directly.
1763 Read more about it in the
1764 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
1765 """
1766 ),
1767 ] = Default(JSONResponse),
1768 name: Annotated[
1769 Optional[str],
1770 Doc(
1771 """
1772 Name for this *path operation*. Only used internally.
1773 """
1774 ),
1775 ] = None,
1776 callbacks: Annotated[
1777 Optional[List[BaseRoute]],
1778 Doc(
1779 """
1780 List of *path operations* that will be used as OpenAPI callbacks.
1782 This is only for OpenAPI documentation, the callbacks won't be used
1783 directly.
1785 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1787 Read more about it in the
1788 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1789 """
1790 ),
1791 ] = None,
1792 openapi_extra: Annotated[
1793 Optional[Dict[str, Any]],
1794 Doc(
1795 """
1796 Extra metadata to be included in the OpenAPI schema for this *path
1797 operation*.
1799 Read more about it in the
1800 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
1801 """
1802 ),
1803 ] = None,
1804 generate_unique_id_function: Annotated[
1805 Callable[[routing.APIRoute], str],
1806 Doc(
1807 """
1808 Customize the function used to generate unique IDs for the *path
1809 operations* shown in the generated OpenAPI.
1811 This is particularly useful when automatically generating clients or
1812 SDKs for your API.
1814 Read more about it in the
1815 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1816 """
1817 ),
1818 ] = Default(generate_unique_id),
1819 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1820 """
1821 Add a *path operation* using an HTTP GET operation.
1823 ## Example
1825 ```python
1826 from fastapi import FastAPI
1828 app = FastAPI()
1830 @app.get("/items/")
1831 def read_items():
1832 return [{"name": "Empanada"}, {"name": "Arepa"}]
1833 ```
1834 """
1835 return self.router.get( 2a @t9]TbYbZb0b1bHdIdJdKdLdMdNdOdPdQdRddbebfbs t gb3d4d5d6d7d4b5b| hbibu g Df#b8d9d$bjbb `t!])b.b/b:b;b!d#d$d%d'd(d)d*d+d,d-dkblbmbB C nb`d{d|d}d~d@b[b} obpbD h Ef|baebe}bqbc au#]cchcicjckccedeeefegeheiejekelemerbsbtbK L ub. qcrcscyezeAeBeCetcuc~ vbwbM i FfAcDeEeBcxbd fu$]GcLcMcNcOcFeGeHeIeJeKeLeMeNeOePeybzbAbT U Bb= UcVcWc1e2e3e4e5eXcYcabCbDbV j Gf4c6e7e5cEbe ku%]!c(c)c*c+c8e9e!e#e$e%e'e(e)e*e+eFbGbHb2 3 Ib] ;c=c?c^e_e`e{e|e@c[cbbJbKb4 k Hf|c}e~e}cLbf pu']ddidjdkdldafbfcfdfefffgfhfifjfkfMbNbOb# $ Pb{ rdsdtdwfxfyfzfAfudvdcbQbRb% l IfBdBfCfCdSb
1836 path,
1837 response_model=response_model,
1838 status_code=status_code,
1839 tags=tags,
1840 dependencies=dependencies,
1841 summary=summary,
1842 description=description,
1843 response_description=response_description,
1844 responses=responses,
1845 deprecated=deprecated,
1846 operation_id=operation_id,
1847 response_model_include=response_model_include,
1848 response_model_exclude=response_model_exclude,
1849 response_model_by_alias=response_model_by_alias,
1850 response_model_exclude_unset=response_model_exclude_unset,
1851 response_model_exclude_defaults=response_model_exclude_defaults,
1852 response_model_exclude_none=response_model_exclude_none,
1853 include_in_schema=include_in_schema,
1854 response_class=response_class,
1855 name=name,
1856 callbacks=callbacks,
1857 openapi_extra=openapi_extra,
1858 generate_unique_id_function=generate_unique_id_function,
1859 )
1861 def put( 1abcdef
1862 self,
1863 path: Annotated[
1864 str,
1865 Doc(
1866 """
1867 The URL path to be used for this *path operation*.
1869 For example, in `http://example.com/items`, the path is `/items`.
1870 """
1871 ),
1872 ],
1873 *,
1874 response_model: Annotated[
1875 Any,
1876 Doc(
1877 """
1878 The type to use for the response.
1880 It could be any valid Pydantic *field* type. So, it doesn't have to
1881 be a Pydantic model, it could be other things, like a `list`, `dict`,
1882 etc.
1884 It will be used for:
1886 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1887 show it as the response (JSON Schema).
1888 * Serialization: you could return an arbitrary object and the
1889 `response_model` would be used to serialize that object into the
1890 corresponding JSON.
1891 * Filtering: the JSON sent to the client will only contain the data
1892 (fields) defined in the `response_model`. If you returned an object
1893 that contains an attribute `password` but the `response_model` does
1894 not include that field, the JSON sent to the client would not have
1895 that `password`.
1896 * Validation: whatever you return will be serialized with the
1897 `response_model`, converting any data as necessary to generate the
1898 corresponding JSON. But if the data in the object returned is not
1899 valid, that would mean a violation of the contract with the client,
1900 so it's an error from the API developer. So, FastAPI will raise an
1901 error and return a 500 error code (Internal Server Error).
1903 Read more about it in the
1904 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1905 """
1906 ),
1907 ] = Default(None),
1908 status_code: Annotated[
1909 Optional[int],
1910 Doc(
1911 """
1912 The default status code to be used for the response.
1914 You could override the status code by returning a response directly.
1916 Read more about it in the
1917 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1918 """
1919 ),
1920 ] = None,
1921 tags: Annotated[
1922 Optional[List[Union[str, Enum]]],
1923 Doc(
1924 """
1925 A list of tags to be applied to the *path operation*.
1927 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1929 Read more about it in the
1930 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1931 """
1932 ),
1933 ] = None,
1934 dependencies: Annotated[
1935 Optional[Sequence[Depends]],
1936 Doc(
1937 """
1938 A list of dependencies (using `Depends()`) to be applied to the
1939 *path operation*.
1941 Read more about it in the
1942 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
1943 """
1944 ),
1945 ] = None,
1946 summary: Annotated[
1947 Optional[str],
1948 Doc(
1949 """
1950 A summary for the *path operation*.
1952 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1954 Read more about it in the
1955 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1956 """
1957 ),
1958 ] = None,
1959 description: Annotated[
1960 Optional[str],
1961 Doc(
1962 """
1963 A description for the *path operation*.
1965 If not provided, it will be extracted automatically from the docstring
1966 of the *path operation function*.
1968 It can contain Markdown.
1970 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1972 Read more about it in the
1973 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1974 """
1975 ),
1976 ] = None,
1977 response_description: Annotated[
1978 str,
1979 Doc(
1980 """
1981 The description for the default response.
1983 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1984 """
1985 ),
1986 ] = "Successful Response",
1987 responses: Annotated[
1988 Optional[Dict[Union[int, str], Dict[str, Any]]],
1989 Doc(
1990 """
1991 Additional responses that could be returned by this *path operation*.
1993 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1994 """
1995 ),
1996 ] = None,
1997 deprecated: Annotated[
1998 Optional[bool],
1999 Doc(
2000 """
2001 Mark this *path operation* as deprecated.
2003 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2004 """
2005 ),
2006 ] = None,
2007 operation_id: Annotated[
2008 Optional[str],
2009 Doc(
2010 """
2011 Custom operation ID to be used by this *path operation*.
2013 By default, it is generated automatically.
2015 If you provide a custom operation ID, you need to make sure it is
2016 unique for the whole API.
2018 You can customize the
2019 operation ID generation with the parameter
2020 `generate_unique_id_function` in the `FastAPI` class.
2022 Read more about it in the
2023 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2024 """
2025 ),
2026 ] = None,
2027 response_model_include: Annotated[
2028 Optional[IncEx],
2029 Doc(
2030 """
2031 Configuration passed to Pydantic to include only certain fields in the
2032 response data.
2034 Read more about it in the
2035 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2036 """
2037 ),
2038 ] = None,
2039 response_model_exclude: Annotated[
2040 Optional[IncEx],
2041 Doc(
2042 """
2043 Configuration passed to Pydantic to exclude certain fields in the
2044 response data.
2046 Read more about it in the
2047 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2048 """
2049 ),
2050 ] = None,
2051 response_model_by_alias: Annotated[
2052 bool,
2053 Doc(
2054 """
2055 Configuration passed to Pydantic to define if the response model
2056 should be serialized by alias when an alias is used.
2058 Read more about it in the
2059 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2060 """
2061 ),
2062 ] = True,
2063 response_model_exclude_unset: Annotated[
2064 bool,
2065 Doc(
2066 """
2067 Configuration passed to Pydantic to define if the response data
2068 should have all the fields, including the ones that were not set and
2069 have their default values. This is different from
2070 `response_model_exclude_defaults` in that if the fields are set,
2071 they will be included in the response, even if the value is the same
2072 as the default.
2074 When `True`, default values are omitted from the response.
2076 Read more about it in the
2077 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2078 """
2079 ),
2080 ] = False,
2081 response_model_exclude_defaults: Annotated[
2082 bool,
2083 Doc(
2084 """
2085 Configuration passed to Pydantic to define if the response data
2086 should have all the fields, including the ones that have the same value
2087 as the default. This is different from `response_model_exclude_unset`
2088 in that if the fields are set but contain the same default values,
2089 they will be excluded from the response.
2091 When `True`, default values are omitted from the response.
2093 Read more about it in the
2094 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2095 """
2096 ),
2097 ] = False,
2098 response_model_exclude_none: Annotated[
2099 bool,
2100 Doc(
2101 """
2102 Configuration passed to Pydantic to define if the response data should
2103 exclude fields set to `None`.
2105 This is much simpler (less smart) than `response_model_exclude_unset`
2106 and `response_model_exclude_defaults`. You probably want to use one of
2107 those two instead of this one, as those allow returning `None` values
2108 when it makes sense.
2110 Read more about it in the
2111 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2112 """
2113 ),
2114 ] = False,
2115 include_in_schema: Annotated[
2116 bool,
2117 Doc(
2118 """
2119 Include this *path operation* in the generated OpenAPI schema.
2121 This affects the generated OpenAPI (e.g. visible at `/docs`).
2123 Read more about it in the
2124 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2125 """
2126 ),
2127 ] = True,
2128 response_class: Annotated[
2129 Type[Response],
2130 Doc(
2131 """
2132 Response class to be used for this *path operation*.
2134 This will not be used if you return a response directly.
2136 Read more about it in the
2137 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2138 """
2139 ),
2140 ] = Default(JSONResponse),
2141 name: Annotated[
2142 Optional[str],
2143 Doc(
2144 """
2145 Name for this *path operation*. Only used internally.
2146 """
2147 ),
2148 ] = None,
2149 callbacks: Annotated[
2150 Optional[List[BaseRoute]],
2151 Doc(
2152 """
2153 List of *path operations* that will be used as OpenAPI callbacks.
2155 This is only for OpenAPI documentation, the callbacks won't be used
2156 directly.
2158 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2160 Read more about it in the
2161 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2162 """
2163 ),
2164 ] = None,
2165 openapi_extra: Annotated[
2166 Optional[Dict[str, Any]],
2167 Doc(
2168 """
2169 Extra metadata to be included in the OpenAPI schema for this *path
2170 operation*.
2172 Read more about it in the
2173 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2174 """
2175 ),
2176 ] = None,
2177 generate_unique_id_function: Annotated[
2178 Callable[[routing.APIRoute], str],
2179 Doc(
2180 """
2181 Customize the function used to generate unique IDs for the *path
2182 operations* shown in the generated OpenAPI.
2184 This is particularly useful when automatically generating clients or
2185 SDKs for your API.
2187 Read more about it in the
2188 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2189 """
2190 ),
2191 ] = Default(generate_unique_id),
2192 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2193 """
2194 Add a *path operation* using an HTTP PUT operation.
2196 ## Example
2198 ```python
2199 from fastapi import FastAPI
2200 from pydantic import BaseModel
2202 class Item(BaseModel):
2203 name: str
2204 description: str | None = None
2206 app = FastAPI()
2208 @app.put("/items/{item_id}")
2209 def replace_item(item_id: str, item: Item):
2210 return {"message": "Item replaced", "id": item_id}
2211 ```
2212 """
2213 return self.router.put( 1abcdef
2214 path,
2215 response_model=response_model,
2216 status_code=status_code,
2217 tags=tags,
2218 dependencies=dependencies,
2219 summary=summary,
2220 description=description,
2221 response_description=response_description,
2222 responses=responses,
2223 deprecated=deprecated,
2224 operation_id=operation_id,
2225 response_model_include=response_model_include,
2226 response_model_exclude=response_model_exclude,
2227 response_model_by_alias=response_model_by_alias,
2228 response_model_exclude_unset=response_model_exclude_unset,
2229 response_model_exclude_defaults=response_model_exclude_defaults,
2230 response_model_exclude_none=response_model_exclude_none,
2231 include_in_schema=include_in_schema,
2232 response_class=response_class,
2233 name=name,
2234 callbacks=callbacks,
2235 openapi_extra=openapi_extra,
2236 generate_unique_id_function=generate_unique_id_function,
2237 )
2239 def post( 1abcdef
2240 self,
2241 path: Annotated[
2242 str,
2243 Doc(
2244 """
2245 The URL path to be used for this *path operation*.
2247 For example, in `http://example.com/items`, the path is `/items`.
2248 """
2249 ),
2250 ],
2251 *,
2252 response_model: Annotated[
2253 Any,
2254 Doc(
2255 """
2256 The type to use for the response.
2258 It could be any valid Pydantic *field* type. So, it doesn't have to
2259 be a Pydantic model, it could be other things, like a `list`, `dict`,
2260 etc.
2262 It will be used for:
2264 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2265 show it as the response (JSON Schema).
2266 * Serialization: you could return an arbitrary object and the
2267 `response_model` would be used to serialize that object into the
2268 corresponding JSON.
2269 * Filtering: the JSON sent to the client will only contain the data
2270 (fields) defined in the `response_model`. If you returned an object
2271 that contains an attribute `password` but the `response_model` does
2272 not include that field, the JSON sent to the client would not have
2273 that `password`.
2274 * Validation: whatever you return will be serialized with the
2275 `response_model`, converting any data as necessary to generate the
2276 corresponding JSON. But if the data in the object returned is not
2277 valid, that would mean a violation of the contract with the client,
2278 so it's an error from the API developer. So, FastAPI will raise an
2279 error and return a 500 error code (Internal Server Error).
2281 Read more about it in the
2282 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2283 """
2284 ),
2285 ] = Default(None),
2286 status_code: Annotated[
2287 Optional[int],
2288 Doc(
2289 """
2290 The default status code to be used for the response.
2292 You could override the status code by returning a response directly.
2294 Read more about it in the
2295 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2296 """
2297 ),
2298 ] = None,
2299 tags: Annotated[
2300 Optional[List[Union[str, Enum]]],
2301 Doc(
2302 """
2303 A list of tags to be applied to the *path operation*.
2305 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2307 Read more about it in the
2308 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2309 """
2310 ),
2311 ] = None,
2312 dependencies: Annotated[
2313 Optional[Sequence[Depends]],
2314 Doc(
2315 """
2316 A list of dependencies (using `Depends()`) to be applied to the
2317 *path operation*.
2319 Read more about it in the
2320 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2321 """
2322 ),
2323 ] = None,
2324 summary: Annotated[
2325 Optional[str],
2326 Doc(
2327 """
2328 A summary for the *path operation*.
2330 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2332 Read more about it in the
2333 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2334 """
2335 ),
2336 ] = None,
2337 description: Annotated[
2338 Optional[str],
2339 Doc(
2340 """
2341 A description for the *path operation*.
2343 If not provided, it will be extracted automatically from the docstring
2344 of the *path operation function*.
2346 It can contain Markdown.
2348 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2350 Read more about it in the
2351 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2352 """
2353 ),
2354 ] = None,
2355 response_description: Annotated[
2356 str,
2357 Doc(
2358 """
2359 The description for the default response.
2361 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2362 """
2363 ),
2364 ] = "Successful Response",
2365 responses: Annotated[
2366 Optional[Dict[Union[int, str], Dict[str, Any]]],
2367 Doc(
2368 """
2369 Additional responses that could be returned by this *path operation*.
2371 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2372 """
2373 ),
2374 ] = None,
2375 deprecated: Annotated[
2376 Optional[bool],
2377 Doc(
2378 """
2379 Mark this *path operation* as deprecated.
2381 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2382 """
2383 ),
2384 ] = None,
2385 operation_id: Annotated[
2386 Optional[str],
2387 Doc(
2388 """
2389 Custom operation ID to be used by this *path operation*.
2391 By default, it is generated automatically.
2393 If you provide a custom operation ID, you need to make sure it is
2394 unique for the whole API.
2396 You can customize the
2397 operation ID generation with the parameter
2398 `generate_unique_id_function` in the `FastAPI` class.
2400 Read more about it in the
2401 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2402 """
2403 ),
2404 ] = None,
2405 response_model_include: Annotated[
2406 Optional[IncEx],
2407 Doc(
2408 """
2409 Configuration passed to Pydantic to include only certain fields in the
2410 response data.
2412 Read more about it in the
2413 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2414 """
2415 ),
2416 ] = None,
2417 response_model_exclude: Annotated[
2418 Optional[IncEx],
2419 Doc(
2420 """
2421 Configuration passed to Pydantic to exclude certain fields in the
2422 response data.
2424 Read more about it in the
2425 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2426 """
2427 ),
2428 ] = None,
2429 response_model_by_alias: Annotated[
2430 bool,
2431 Doc(
2432 """
2433 Configuration passed to Pydantic to define if the response model
2434 should be serialized by alias when an alias is used.
2436 Read more about it in the
2437 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2438 """
2439 ),
2440 ] = True,
2441 response_model_exclude_unset: Annotated[
2442 bool,
2443 Doc(
2444 """
2445 Configuration passed to Pydantic to define if the response data
2446 should have all the fields, including the ones that were not set and
2447 have their default values. This is different from
2448 `response_model_exclude_defaults` in that if the fields are set,
2449 they will be included in the response, even if the value is the same
2450 as the default.
2452 When `True`, default values are omitted from the response.
2454 Read more about it in the
2455 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2456 """
2457 ),
2458 ] = False,
2459 response_model_exclude_defaults: Annotated[
2460 bool,
2461 Doc(
2462 """
2463 Configuration passed to Pydantic to define if the response data
2464 should have all the fields, including the ones that have the same value
2465 as the default. This is different from `response_model_exclude_unset`
2466 in that if the fields are set but contain the same default values,
2467 they will be excluded from the response.
2469 When `True`, default values are omitted from the response.
2471 Read more about it in the
2472 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2473 """
2474 ),
2475 ] = False,
2476 response_model_exclude_none: Annotated[
2477 bool,
2478 Doc(
2479 """
2480 Configuration passed to Pydantic to define if the response data should
2481 exclude fields set to `None`.
2483 This is much simpler (less smart) than `response_model_exclude_unset`
2484 and `response_model_exclude_defaults`. You probably want to use one of
2485 those two instead of this one, as those allow returning `None` values
2486 when it makes sense.
2488 Read more about it in the
2489 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2490 """
2491 ),
2492 ] = False,
2493 include_in_schema: Annotated[
2494 bool,
2495 Doc(
2496 """
2497 Include this *path operation* in the generated OpenAPI schema.
2499 This affects the generated OpenAPI (e.g. visible at `/docs`).
2501 Read more about it in the
2502 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2503 """
2504 ),
2505 ] = True,
2506 response_class: Annotated[
2507 Type[Response],
2508 Doc(
2509 """
2510 Response class to be used for this *path operation*.
2512 This will not be used if you return a response directly.
2514 Read more about it in the
2515 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2516 """
2517 ),
2518 ] = Default(JSONResponse),
2519 name: Annotated[
2520 Optional[str],
2521 Doc(
2522 """
2523 Name for this *path operation*. Only used internally.
2524 """
2525 ),
2526 ] = None,
2527 callbacks: Annotated[
2528 Optional[List[BaseRoute]],
2529 Doc(
2530 """
2531 List of *path operations* that will be used as OpenAPI callbacks.
2533 This is only for OpenAPI documentation, the callbacks won't be used
2534 directly.
2536 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2538 Read more about it in the
2539 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2540 """
2541 ),
2542 ] = None,
2543 openapi_extra: Annotated[
2544 Optional[Dict[str, Any]],
2545 Doc(
2546 """
2547 Extra metadata to be included in the OpenAPI schema for this *path
2548 operation*.
2550 Read more about it in the
2551 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2552 """
2553 ),
2554 ] = None,
2555 generate_unique_id_function: Annotated[
2556 Callable[[routing.APIRoute], str],
2557 Doc(
2558 """
2559 Customize the function used to generate unique IDs for the *path
2560 operations* shown in the generated OpenAPI.
2562 This is particularly useful when automatically generating clients or
2563 SDKs for your API.
2565 Read more about it in the
2566 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2567 """
2568 ),
2569 ] = Default(generate_unique_id),
2570 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2571 """
2572 Add a *path operation* using an HTTP POST operation.
2574 ## Example
2576 ```python
2577 from fastapi import FastAPI
2578 from pydantic import BaseModel
2580 class Item(BaseModel):
2581 name: str
2582 description: str | None = None
2584 app = FastAPI()
2586 @app.post("/items/")
2587 def create_item(item: Item):
2588 return {"message": "Item created"}
2589 ```
2590 """
2591 return self.router.post( 2a VbWbXbm ' n o p q r ( SdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3bibu b +b,b-bv ) w x y z A * .d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?bpbD c ecfcgcE + F G H I J , neoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpcwbM Ccd IcJcKcN / O P Q R S : QeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTcDbV 6ce $c%c'cW ? X Y Z 0 1 @ ,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:cKb4 ~cf fdgdhd5 ^ 6 7 8 9 ! _ lfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqdRb% Dd
2592 path,
2593 response_model=response_model,
2594 status_code=status_code,
2595 tags=tags,
2596 dependencies=dependencies,
2597 summary=summary,
2598 description=description,
2599 response_description=response_description,
2600 responses=responses,
2601 deprecated=deprecated,
2602 operation_id=operation_id,
2603 response_model_include=response_model_include,
2604 response_model_exclude=response_model_exclude,
2605 response_model_by_alias=response_model_by_alias,
2606 response_model_exclude_unset=response_model_exclude_unset,
2607 response_model_exclude_defaults=response_model_exclude_defaults,
2608 response_model_exclude_none=response_model_exclude_none,
2609 include_in_schema=include_in_schema,
2610 response_class=response_class,
2611 name=name,
2612 callbacks=callbacks,
2613 openapi_extra=openapi_extra,
2614 generate_unique_id_function=generate_unique_id_function,
2615 )
2617 def delete( 1abcdef
2618 self,
2619 path: Annotated[
2620 str,
2621 Doc(
2622 """
2623 The URL path to be used for this *path operation*.
2625 For example, in `http://example.com/items`, the path is `/items`.
2626 """
2627 ),
2628 ],
2629 *,
2630 response_model: Annotated[
2631 Any,
2632 Doc(
2633 """
2634 The type to use for the response.
2636 It could be any valid Pydantic *field* type. So, it doesn't have to
2637 be a Pydantic model, it could be other things, like a `list`, `dict`,
2638 etc.
2640 It will be used for:
2642 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2643 show it as the response (JSON Schema).
2644 * Serialization: you could return an arbitrary object and the
2645 `response_model` would be used to serialize that object into the
2646 corresponding JSON.
2647 * Filtering: the JSON sent to the client will only contain the data
2648 (fields) defined in the `response_model`. If you returned an object
2649 that contains an attribute `password` but the `response_model` does
2650 not include that field, the JSON sent to the client would not have
2651 that `password`.
2652 * Validation: whatever you return will be serialized with the
2653 `response_model`, converting any data as necessary to generate the
2654 corresponding JSON. But if the data in the object returned is not
2655 valid, that would mean a violation of the contract with the client,
2656 so it's an error from the API developer. So, FastAPI will raise an
2657 error and return a 500 error code (Internal Server Error).
2659 Read more about it in the
2660 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2661 """
2662 ),
2663 ] = Default(None),
2664 status_code: Annotated[
2665 Optional[int],
2666 Doc(
2667 """
2668 The default status code to be used for the response.
2670 You could override the status code by returning a response directly.
2672 Read more about it in the
2673 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2674 """
2675 ),
2676 ] = None,
2677 tags: Annotated[
2678 Optional[List[Union[str, Enum]]],
2679 Doc(
2680 """
2681 A list of tags to be applied to the *path operation*.
2683 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2685 Read more about it in the
2686 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2687 """
2688 ),
2689 ] = None,
2690 dependencies: Annotated[
2691 Optional[Sequence[Depends]],
2692 Doc(
2693 """
2694 A list of dependencies (using `Depends()`) to be applied to the
2695 *path operation*.
2697 Read more about it in the
2698 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2699 """
2700 ),
2701 ] = None,
2702 summary: Annotated[
2703 Optional[str],
2704 Doc(
2705 """
2706 A summary for the *path operation*.
2708 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2710 Read more about it in the
2711 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2712 """
2713 ),
2714 ] = None,
2715 description: Annotated[
2716 Optional[str],
2717 Doc(
2718 """
2719 A description for the *path operation*.
2721 If not provided, it will be extracted automatically from the docstring
2722 of the *path operation function*.
2724 It can contain Markdown.
2726 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2728 Read more about it in the
2729 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2730 """
2731 ),
2732 ] = None,
2733 response_description: Annotated[
2734 str,
2735 Doc(
2736 """
2737 The description for the default response.
2739 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2740 """
2741 ),
2742 ] = "Successful Response",
2743 responses: Annotated[
2744 Optional[Dict[Union[int, str], Dict[str, Any]]],
2745 Doc(
2746 """
2747 Additional responses that could be returned by this *path operation*.
2749 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2750 """
2751 ),
2752 ] = None,
2753 deprecated: Annotated[
2754 Optional[bool],
2755 Doc(
2756 """
2757 Mark this *path operation* as deprecated.
2759 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2760 """
2761 ),
2762 ] = None,
2763 operation_id: Annotated[
2764 Optional[str],
2765 Doc(
2766 """
2767 Custom operation ID to be used by this *path operation*.
2769 By default, it is generated automatically.
2771 If you provide a custom operation ID, you need to make sure it is
2772 unique for the whole API.
2774 You can customize the
2775 operation ID generation with the parameter
2776 `generate_unique_id_function` in the `FastAPI` class.
2778 Read more about it in the
2779 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2780 """
2781 ),
2782 ] = None,
2783 response_model_include: Annotated[
2784 Optional[IncEx],
2785 Doc(
2786 """
2787 Configuration passed to Pydantic to include only certain fields in the
2788 response data.
2790 Read more about it in the
2791 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2792 """
2793 ),
2794 ] = None,
2795 response_model_exclude: Annotated[
2796 Optional[IncEx],
2797 Doc(
2798 """
2799 Configuration passed to Pydantic to exclude certain fields in the
2800 response data.
2802 Read more about it in the
2803 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2804 """
2805 ),
2806 ] = None,
2807 response_model_by_alias: Annotated[
2808 bool,
2809 Doc(
2810 """
2811 Configuration passed to Pydantic to define if the response model
2812 should be serialized by alias when an alias is used.
2814 Read more about it in the
2815 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2816 """
2817 ),
2818 ] = True,
2819 response_model_exclude_unset: Annotated[
2820 bool,
2821 Doc(
2822 """
2823 Configuration passed to Pydantic to define if the response data
2824 should have all the fields, including the ones that were not set and
2825 have their default values. This is different from
2826 `response_model_exclude_defaults` in that if the fields are set,
2827 they will be included in the response, even if the value is the same
2828 as the default.
2830 When `True`, default values are omitted from the response.
2832 Read more about it in the
2833 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2834 """
2835 ),
2836 ] = False,
2837 response_model_exclude_defaults: Annotated[
2838 bool,
2839 Doc(
2840 """
2841 Configuration passed to Pydantic to define if the response data
2842 should have all the fields, including the ones that have the same value
2843 as the default. This is different from `response_model_exclude_unset`
2844 in that if the fields are set but contain the same default values,
2845 they will be excluded from the response.
2847 When `True`, default values are omitted from the response.
2849 Read more about it in the
2850 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2851 """
2852 ),
2853 ] = False,
2854 response_model_exclude_none: Annotated[
2855 bool,
2856 Doc(
2857 """
2858 Configuration passed to Pydantic to define if the response data should
2859 exclude fields set to `None`.
2861 This is much simpler (less smart) than `response_model_exclude_unset`
2862 and `response_model_exclude_defaults`. You probably want to use one of
2863 those two instead of this one, as those allow returning `None` values
2864 when it makes sense.
2866 Read more about it in the
2867 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2868 """
2869 ),
2870 ] = False,
2871 include_in_schema: Annotated[
2872 bool,
2873 Doc(
2874 """
2875 Include this *path operation* in the generated OpenAPI schema.
2877 This affects the generated OpenAPI (e.g. visible at `/docs`).
2879 Read more about it in the
2880 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2881 """
2882 ),
2883 ] = True,
2884 response_class: Annotated[
2885 Type[Response],
2886 Doc(
2887 """
2888 Response class to be used for this *path operation*.
2890 This will not be used if you return a response directly.
2892 Read more about it in the
2893 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2894 """
2895 ),
2896 ] = Default(JSONResponse),
2897 name: Annotated[
2898 Optional[str],
2899 Doc(
2900 """
2901 Name for this *path operation*. Only used internally.
2902 """
2903 ),
2904 ] = None,
2905 callbacks: Annotated[
2906 Optional[List[BaseRoute]],
2907 Doc(
2908 """
2909 List of *path operations* that will be used as OpenAPI callbacks.
2911 This is only for OpenAPI documentation, the callbacks won't be used
2912 directly.
2914 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2916 Read more about it in the
2917 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2918 """
2919 ),
2920 ] = None,
2921 openapi_extra: Annotated[
2922 Optional[Dict[str, Any]],
2923 Doc(
2924 """
2925 Extra metadata to be included in the OpenAPI schema for this *path
2926 operation*.
2928 Read more about it in the
2929 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2930 """
2931 ),
2932 ] = None,
2933 generate_unique_id_function: Annotated[
2934 Callable[[routing.APIRoute], str],
2935 Doc(
2936 """
2937 Customize the function used to generate unique IDs for the *path
2938 operations* shown in the generated OpenAPI.
2940 This is particularly useful when automatically generating clients or
2941 SDKs for your API.
2943 Read more about it in the
2944 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2945 """
2946 ),
2947 ] = Default(generate_unique_id),
2948 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2949 """
2950 Add a *path operation* using an HTTP DELETE operation.
2952 ## Example
2954 ```python
2955 from fastapi import FastAPI
2957 app = FastAPI()
2959 @app.delete("/items/{item_id}")
2960 def delete_item(item_id: str):
2961 return {"message": "Item deleted"}
2962 ```
2963 """
2964 return self.router.delete( 1abcdef
2965 path,
2966 response_model=response_model,
2967 status_code=status_code,
2968 tags=tags,
2969 dependencies=dependencies,
2970 summary=summary,
2971 description=description,
2972 response_description=response_description,
2973 responses=responses,
2974 deprecated=deprecated,
2975 operation_id=operation_id,
2976 response_model_include=response_model_include,
2977 response_model_exclude=response_model_exclude,
2978 response_model_by_alias=response_model_by_alias,
2979 response_model_exclude_unset=response_model_exclude_unset,
2980 response_model_exclude_defaults=response_model_exclude_defaults,
2981 response_model_exclude_none=response_model_exclude_none,
2982 include_in_schema=include_in_schema,
2983 response_class=response_class,
2984 name=name,
2985 callbacks=callbacks,
2986 openapi_extra=openapi_extra,
2987 generate_unique_id_function=generate_unique_id_function,
2988 )
2990 def options( 1abcdef
2991 self,
2992 path: Annotated[
2993 str,
2994 Doc(
2995 """
2996 The URL path to be used for this *path operation*.
2998 For example, in `http://example.com/items`, the path is `/items`.
2999 """
3000 ),
3001 ],
3002 *,
3003 response_model: Annotated[
3004 Any,
3005 Doc(
3006 """
3007 The type to use for the response.
3009 It could be any valid Pydantic *field* type. So, it doesn't have to
3010 be a Pydantic model, it could be other things, like a `list`, `dict`,
3011 etc.
3013 It will be used for:
3015 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3016 show it as the response (JSON Schema).
3017 * Serialization: you could return an arbitrary object and the
3018 `response_model` would be used to serialize that object into the
3019 corresponding JSON.
3020 * Filtering: the JSON sent to the client will only contain the data
3021 (fields) defined in the `response_model`. If you returned an object
3022 that contains an attribute `password` but the `response_model` does
3023 not include that field, the JSON sent to the client would not have
3024 that `password`.
3025 * Validation: whatever you return will be serialized with the
3026 `response_model`, converting any data as necessary to generate the
3027 corresponding JSON. But if the data in the object returned is not
3028 valid, that would mean a violation of the contract with the client,
3029 so it's an error from the API developer. So, FastAPI will raise an
3030 error and return a 500 error code (Internal Server Error).
3032 Read more about it in the
3033 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3034 """
3035 ),
3036 ] = Default(None),
3037 status_code: Annotated[
3038 Optional[int],
3039 Doc(
3040 """
3041 The default status code to be used for the response.
3043 You could override the status code by returning a response directly.
3045 Read more about it in the
3046 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3047 """
3048 ),
3049 ] = None,
3050 tags: Annotated[
3051 Optional[List[Union[str, Enum]]],
3052 Doc(
3053 """
3054 A list of tags to be applied to the *path operation*.
3056 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3058 Read more about it in the
3059 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3060 """
3061 ),
3062 ] = None,
3063 dependencies: Annotated[
3064 Optional[Sequence[Depends]],
3065 Doc(
3066 """
3067 A list of dependencies (using `Depends()`) to be applied to the
3068 *path operation*.
3070 Read more about it in the
3071 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3072 """
3073 ),
3074 ] = None,
3075 summary: Annotated[
3076 Optional[str],
3077 Doc(
3078 """
3079 A summary for the *path operation*.
3081 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3083 Read more about it in the
3084 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3085 """
3086 ),
3087 ] = None,
3088 description: Annotated[
3089 Optional[str],
3090 Doc(
3091 """
3092 A description for the *path operation*.
3094 If not provided, it will be extracted automatically from the docstring
3095 of the *path operation function*.
3097 It can contain Markdown.
3099 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3101 Read more about it in the
3102 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3103 """
3104 ),
3105 ] = None,
3106 response_description: Annotated[
3107 str,
3108 Doc(
3109 """
3110 The description for the default response.
3112 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3113 """
3114 ),
3115 ] = "Successful Response",
3116 responses: Annotated[
3117 Optional[Dict[Union[int, str], Dict[str, Any]]],
3118 Doc(
3119 """
3120 Additional responses that could be returned by this *path operation*.
3122 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3123 """
3124 ),
3125 ] = None,
3126 deprecated: Annotated[
3127 Optional[bool],
3128 Doc(
3129 """
3130 Mark this *path operation* as deprecated.
3132 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3133 """
3134 ),
3135 ] = None,
3136 operation_id: Annotated[
3137 Optional[str],
3138 Doc(
3139 """
3140 Custom operation ID to be used by this *path operation*.
3142 By default, it is generated automatically.
3144 If you provide a custom operation ID, you need to make sure it is
3145 unique for the whole API.
3147 You can customize the
3148 operation ID generation with the parameter
3149 `generate_unique_id_function` in the `FastAPI` class.
3151 Read more about it in the
3152 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3153 """
3154 ),
3155 ] = None,
3156 response_model_include: Annotated[
3157 Optional[IncEx],
3158 Doc(
3159 """
3160 Configuration passed to Pydantic to include only certain fields in the
3161 response data.
3163 Read more about it in the
3164 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3165 """
3166 ),
3167 ] = None,
3168 response_model_exclude: Annotated[
3169 Optional[IncEx],
3170 Doc(
3171 """
3172 Configuration passed to Pydantic to exclude certain fields in the
3173 response data.
3175 Read more about it in the
3176 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3177 """
3178 ),
3179 ] = None,
3180 response_model_by_alias: Annotated[
3181 bool,
3182 Doc(
3183 """
3184 Configuration passed to Pydantic to define if the response model
3185 should be serialized by alias when an alias is used.
3187 Read more about it in the
3188 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3189 """
3190 ),
3191 ] = True,
3192 response_model_exclude_unset: Annotated[
3193 bool,
3194 Doc(
3195 """
3196 Configuration passed to Pydantic to define if the response data
3197 should have all the fields, including the ones that were not set and
3198 have their default values. This is different from
3199 `response_model_exclude_defaults` in that if the fields are set,
3200 they will be included in the response, even if the value is the same
3201 as the default.
3203 When `True`, default values are omitted from the response.
3205 Read more about it in the
3206 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3207 """
3208 ),
3209 ] = False,
3210 response_model_exclude_defaults: Annotated[
3211 bool,
3212 Doc(
3213 """
3214 Configuration passed to Pydantic to define if the response data
3215 should have all the fields, including the ones that have the same value
3216 as the default. This is different from `response_model_exclude_unset`
3217 in that if the fields are set but contain the same default values,
3218 they will be excluded from the response.
3220 When `True`, default values are omitted from the response.
3222 Read more about it in the
3223 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3224 """
3225 ),
3226 ] = False,
3227 response_model_exclude_none: Annotated[
3228 bool,
3229 Doc(
3230 """
3231 Configuration passed to Pydantic to define if the response data should
3232 exclude fields set to `None`.
3234 This is much simpler (less smart) than `response_model_exclude_unset`
3235 and `response_model_exclude_defaults`. You probably want to use one of
3236 those two instead of this one, as those allow returning `None` values
3237 when it makes sense.
3239 Read more about it in the
3240 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3241 """
3242 ),
3243 ] = False,
3244 include_in_schema: Annotated[
3245 bool,
3246 Doc(
3247 """
3248 Include this *path operation* in the generated OpenAPI schema.
3250 This affects the generated OpenAPI (e.g. visible at `/docs`).
3252 Read more about it in the
3253 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
3254 """
3255 ),
3256 ] = True,
3257 response_class: Annotated[
3258 Type[Response],
3259 Doc(
3260 """
3261 Response class to be used for this *path operation*.
3263 This will not be used if you return a response directly.
3265 Read more about it in the
3266 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3267 """
3268 ),
3269 ] = Default(JSONResponse),
3270 name: Annotated[
3271 Optional[str],
3272 Doc(
3273 """
3274 Name for this *path operation*. Only used internally.
3275 """
3276 ),
3277 ] = None,
3278 callbacks: Annotated[
3279 Optional[List[BaseRoute]],
3280 Doc(
3281 """
3282 List of *path operations* that will be used as OpenAPI callbacks.
3284 This is only for OpenAPI documentation, the callbacks won't be used
3285 directly.
3287 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3289 Read more about it in the
3290 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3291 """
3292 ),
3293 ] = None,
3294 openapi_extra: Annotated[
3295 Optional[Dict[str, Any]],
3296 Doc(
3297 """
3298 Extra metadata to be included in the OpenAPI schema for this *path
3299 operation*.
3301 Read more about it in the
3302 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3303 """
3304 ),
3305 ] = None,
3306 generate_unique_id_function: Annotated[
3307 Callable[[routing.APIRoute], str],
3308 Doc(
3309 """
3310 Customize the function used to generate unique IDs for the *path
3311 operations* shown in the generated OpenAPI.
3313 This is particularly useful when automatically generating clients or
3314 SDKs for your API.
3316 Read more about it in the
3317 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3318 """
3319 ),
3320 ] = Default(generate_unique_id),
3321 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3322 """
3323 Add a *path operation* using an HTTP OPTIONS operation.
3325 ## Example
3327 ```python
3328 from fastapi import FastAPI
3330 app = FastAPI()
3332 @app.options("/items/")
3333 def get_item_options():
3334 return {"additions": ["Aji", "Guacamole"]}
3335 ```
3336 """
3337 return self.router.options( 1abcdef
3338 path,
3339 response_model=response_model,
3340 status_code=status_code,
3341 tags=tags,
3342 dependencies=dependencies,
3343 summary=summary,
3344 description=description,
3345 response_description=response_description,
3346 responses=responses,
3347 deprecated=deprecated,
3348 operation_id=operation_id,
3349 response_model_include=response_model_include,
3350 response_model_exclude=response_model_exclude,
3351 response_model_by_alias=response_model_by_alias,
3352 response_model_exclude_unset=response_model_exclude_unset,
3353 response_model_exclude_defaults=response_model_exclude_defaults,
3354 response_model_exclude_none=response_model_exclude_none,
3355 include_in_schema=include_in_schema,
3356 response_class=response_class,
3357 name=name,
3358 callbacks=callbacks,
3359 openapi_extra=openapi_extra,
3360 generate_unique_id_function=generate_unique_id_function,
3361 )
3363 def head( 1abcdef
3364 self,
3365 path: Annotated[
3366 str,
3367 Doc(
3368 """
3369 The URL path to be used for this *path operation*.
3371 For example, in `http://example.com/items`, the path is `/items`.
3372 """
3373 ),
3374 ],
3375 *,
3376 response_model: Annotated[
3377 Any,
3378 Doc(
3379 """
3380 The type to use for the response.
3382 It could be any valid Pydantic *field* type. So, it doesn't have to
3383 be a Pydantic model, it could be other things, like a `list`, `dict`,
3384 etc.
3386 It will be used for:
3388 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3389 show it as the response (JSON Schema).
3390 * Serialization: you could return an arbitrary object and the
3391 `response_model` would be used to serialize that object into the
3392 corresponding JSON.
3393 * Filtering: the JSON sent to the client will only contain the data
3394 (fields) defined in the `response_model`. If you returned an object
3395 that contains an attribute `password` but the `response_model` does
3396 not include that field, the JSON sent to the client would not have
3397 that `password`.
3398 * Validation: whatever you return will be serialized with the
3399 `response_model`, converting any data as necessary to generate the
3400 corresponding JSON. But if the data in the object returned is not
3401 valid, that would mean a violation of the contract with the client,
3402 so it's an error from the API developer. So, FastAPI will raise an
3403 error and return a 500 error code (Internal Server Error).
3405 Read more about it in the
3406 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3407 """
3408 ),
3409 ] = Default(None),
3410 status_code: Annotated[
3411 Optional[int],
3412 Doc(
3413 """
3414 The default status code to be used for the response.
3416 You could override the status code by returning a response directly.
3418 Read more about it in the
3419 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3420 """
3421 ),
3422 ] = None,
3423 tags: Annotated[
3424 Optional[List[Union[str, Enum]]],
3425 Doc(
3426 """
3427 A list of tags to be applied to the *path operation*.
3429 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3431 Read more about it in the
3432 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3433 """
3434 ),
3435 ] = None,
3436 dependencies: Annotated[
3437 Optional[Sequence[Depends]],
3438 Doc(
3439 """
3440 A list of dependencies (using `Depends()`) to be applied to the
3441 *path operation*.
3443 Read more about it in the
3444 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3445 """
3446 ),
3447 ] = None,
3448 summary: Annotated[
3449 Optional[str],
3450 Doc(
3451 """
3452 A summary for the *path operation*.
3454 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3456 Read more about it in the
3457 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3458 """
3459 ),
3460 ] = None,
3461 description: Annotated[
3462 Optional[str],
3463 Doc(
3464 """
3465 A description for the *path operation*.
3467 If not provided, it will be extracted automatically from the docstring
3468 of the *path operation function*.
3470 It can contain Markdown.
3472 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3474 Read more about it in the
3475 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3476 """
3477 ),
3478 ] = None,
3479 response_description: Annotated[
3480 str,
3481 Doc(
3482 """
3483 The description for the default response.
3485 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3486 """
3487 ),
3488 ] = "Successful Response",
3489 responses: Annotated[
3490 Optional[Dict[Union[int, str], Dict[str, Any]]],
3491 Doc(
3492 """
3493 Additional responses that could be returned by this *path operation*.
3495 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3496 """
3497 ),
3498 ] = None,
3499 deprecated: Annotated[
3500 Optional[bool],
3501 Doc(
3502 """
3503 Mark this *path operation* as deprecated.
3505 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3506 """
3507 ),
3508 ] = None,
3509 operation_id: Annotated[
3510 Optional[str],
3511 Doc(
3512 """
3513 Custom operation ID to be used by this *path operation*.
3515 By default, it is generated automatically.
3517 If you provide a custom operation ID, you need to make sure it is
3518 unique for the whole API.
3520 You can customize the
3521 operation ID generation with the parameter
3522 `generate_unique_id_function` in the `FastAPI` class.
3524 Read more about it in the
3525 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3526 """
3527 ),
3528 ] = None,
3529 response_model_include: Annotated[
3530 Optional[IncEx],
3531 Doc(
3532 """
3533 Configuration passed to Pydantic to include only certain fields in the
3534 response data.
3536 Read more about it in the
3537 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3538 """
3539 ),
3540 ] = None,
3541 response_model_exclude: Annotated[
3542 Optional[IncEx],
3543 Doc(
3544 """
3545 Configuration passed to Pydantic to exclude certain fields in the
3546 response data.
3548 Read more about it in the
3549 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3550 """
3551 ),
3552 ] = None,
3553 response_model_by_alias: Annotated[
3554 bool,
3555 Doc(
3556 """
3557 Configuration passed to Pydantic to define if the response model
3558 should be serialized by alias when an alias is used.
3560 Read more about it in the
3561 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3562 """
3563 ),
3564 ] = True,
3565 response_model_exclude_unset: Annotated[
3566 bool,
3567 Doc(
3568 """
3569 Configuration passed to Pydantic to define if the response data
3570 should have all the fields, including the ones that were not set and
3571 have their default values. This is different from
3572 `response_model_exclude_defaults` in that if the fields are set,
3573 they will be included in the response, even if the value is the same
3574 as the default.
3576 When `True`, default values are omitted from the response.
3578 Read more about it in the
3579 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3580 """
3581 ),
3582 ] = False,
3583 response_model_exclude_defaults: Annotated[
3584 bool,
3585 Doc(
3586 """
3587 Configuration passed to Pydantic to define if the response data
3588 should have all the fields, including the ones that have the same value
3589 as the default. This is different from `response_model_exclude_unset`
3590 in that if the fields are set but contain the same default values,
3591 they will be excluded from the response.
3593 When `True`, default values are omitted from the response.
3595 Read more about it in the
3596 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3597 """
3598 ),
3599 ] = False,
3600 response_model_exclude_none: Annotated[
3601 bool,
3602 Doc(
3603 """
3604 Configuration passed to Pydantic to define if the response data should
3605 exclude fields set to `None`.
3607 This is much simpler (less smart) than `response_model_exclude_unset`
3608 and `response_model_exclude_defaults`. You probably want to use one of
3609 those two instead of this one, as those allow returning `None` values
3610 when it makes sense.
3612 Read more about it in the
3613 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3614 """
3615 ),
3616 ] = False,
3617 include_in_schema: Annotated[
3618 bool,
3619 Doc(
3620 """
3621 Include this *path operation* in the generated OpenAPI schema.
3623 This affects the generated OpenAPI (e.g. visible at `/docs`).
3625 Read more about it in the
3626 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
3627 """
3628 ),
3629 ] = True,
3630 response_class: Annotated[
3631 Type[Response],
3632 Doc(
3633 """
3634 Response class to be used for this *path operation*.
3636 This will not be used if you return a response directly.
3638 Read more about it in the
3639 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3640 """
3641 ),
3642 ] = Default(JSONResponse),
3643 name: Annotated[
3644 Optional[str],
3645 Doc(
3646 """
3647 Name for this *path operation*. Only used internally.
3648 """
3649 ),
3650 ] = None,
3651 callbacks: Annotated[
3652 Optional[List[BaseRoute]],
3653 Doc(
3654 """
3655 List of *path operations* that will be used as OpenAPI callbacks.
3657 This is only for OpenAPI documentation, the callbacks won't be used
3658 directly.
3660 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3662 Read more about it in the
3663 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3664 """
3665 ),
3666 ] = None,
3667 openapi_extra: Annotated[
3668 Optional[Dict[str, Any]],
3669 Doc(
3670 """
3671 Extra metadata to be included in the OpenAPI schema for this *path
3672 operation*.
3674 Read more about it in the
3675 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3676 """
3677 ),
3678 ] = None,
3679 generate_unique_id_function: Annotated[
3680 Callable[[routing.APIRoute], str],
3681 Doc(
3682 """
3683 Customize the function used to generate unique IDs for the *path
3684 operations* shown in the generated OpenAPI.
3686 This is particularly useful when automatically generating clients or
3687 SDKs for your API.
3689 Read more about it in the
3690 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3691 """
3692 ),
3693 ] = Default(generate_unique_id),
3694 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3695 """
3696 Add a *path operation* using an HTTP HEAD operation.
3698 ## Example
3700 ```python
3701 from fastapi import FastAPI, Response
3703 app = FastAPI()
3705 @app.head("/items/", status_code=204)
3706 def get_items_headers(response: Response):
3707 response.headers["X-Cat-Dog"] = "Alone in the world"
3708 ```
3709 """
3710 return self.router.head( 1abcdef
3711 path,
3712 response_model=response_model,
3713 status_code=status_code,
3714 tags=tags,
3715 dependencies=dependencies,
3716 summary=summary,
3717 description=description,
3718 response_description=response_description,
3719 responses=responses,
3720 deprecated=deprecated,
3721 operation_id=operation_id,
3722 response_model_include=response_model_include,
3723 response_model_exclude=response_model_exclude,
3724 response_model_by_alias=response_model_by_alias,
3725 response_model_exclude_unset=response_model_exclude_unset,
3726 response_model_exclude_defaults=response_model_exclude_defaults,
3727 response_model_exclude_none=response_model_exclude_none,
3728 include_in_schema=include_in_schema,
3729 response_class=response_class,
3730 name=name,
3731 callbacks=callbacks,
3732 openapi_extra=openapi_extra,
3733 generate_unique_id_function=generate_unique_id_function,
3734 )
3736 def patch( 1abcdef
3737 self,
3738 path: Annotated[
3739 str,
3740 Doc(
3741 """
3742 The URL path to be used for this *path operation*.
3744 For example, in `http://example.com/items`, the path is `/items`.
3745 """
3746 ),
3747 ],
3748 *,
3749 response_model: Annotated[
3750 Any,
3751 Doc(
3752 """
3753 The type to use for the response.
3755 It could be any valid Pydantic *field* type. So, it doesn't have to
3756 be a Pydantic model, it could be other things, like a `list`, `dict`,
3757 etc.
3759 It will be used for:
3761 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3762 show it as the response (JSON Schema).
3763 * Serialization: you could return an arbitrary object and the
3764 `response_model` would be used to serialize that object into the
3765 corresponding JSON.
3766 * Filtering: the JSON sent to the client will only contain the data
3767 (fields) defined in the `response_model`. If you returned an object
3768 that contains an attribute `password` but the `response_model` does
3769 not include that field, the JSON sent to the client would not have
3770 that `password`.
3771 * Validation: whatever you return will be serialized with the
3772 `response_model`, converting any data as necessary to generate the
3773 corresponding JSON. But if the data in the object returned is not
3774 valid, that would mean a violation of the contract with the client,
3775 so it's an error from the API developer. So, FastAPI will raise an
3776 error and return a 500 error code (Internal Server Error).
3778 Read more about it in the
3779 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3780 """
3781 ),
3782 ] = Default(None),
3783 status_code: Annotated[
3784 Optional[int],
3785 Doc(
3786 """
3787 The default status code to be used for the response.
3789 You could override the status code by returning a response directly.
3791 Read more about it in the
3792 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3793 """
3794 ),
3795 ] = None,
3796 tags: Annotated[
3797 Optional[List[Union[str, Enum]]],
3798 Doc(
3799 """
3800 A list of tags to be applied to the *path operation*.
3802 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3804 Read more about it in the
3805 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3806 """
3807 ),
3808 ] = None,
3809 dependencies: Annotated[
3810 Optional[Sequence[Depends]],
3811 Doc(
3812 """
3813 A list of dependencies (using `Depends()`) to be applied to the
3814 *path operation*.
3816 Read more about it in the
3817 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3818 """
3819 ),
3820 ] = None,
3821 summary: Annotated[
3822 Optional[str],
3823 Doc(
3824 """
3825 A summary for the *path operation*.
3827 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3829 Read more about it in the
3830 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3831 """
3832 ),
3833 ] = None,
3834 description: Annotated[
3835 Optional[str],
3836 Doc(
3837 """
3838 A description for the *path operation*.
3840 If not provided, it will be extracted automatically from the docstring
3841 of the *path operation function*.
3843 It can contain Markdown.
3845 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3847 Read more about it in the
3848 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3849 """
3850 ),
3851 ] = None,
3852 response_description: Annotated[
3853 str,
3854 Doc(
3855 """
3856 The description for the default response.
3858 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3859 """
3860 ),
3861 ] = "Successful Response",
3862 responses: Annotated[
3863 Optional[Dict[Union[int, str], Dict[str, Any]]],
3864 Doc(
3865 """
3866 Additional responses that could be returned by this *path operation*.
3868 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3869 """
3870 ),
3871 ] = None,
3872 deprecated: Annotated[
3873 Optional[bool],
3874 Doc(
3875 """
3876 Mark this *path operation* as deprecated.
3878 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3879 """
3880 ),
3881 ] = None,
3882 operation_id: Annotated[
3883 Optional[str],
3884 Doc(
3885 """
3886 Custom operation ID to be used by this *path operation*.
3888 By default, it is generated automatically.
3890 If you provide a custom operation ID, you need to make sure it is
3891 unique for the whole API.
3893 You can customize the
3894 operation ID generation with the parameter
3895 `generate_unique_id_function` in the `FastAPI` class.
3897 Read more about it in the
3898 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3899 """
3900 ),
3901 ] = None,
3902 response_model_include: Annotated[
3903 Optional[IncEx],
3904 Doc(
3905 """
3906 Configuration passed to Pydantic to include only certain fields in the
3907 response data.
3909 Read more about it in the
3910 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3911 """
3912 ),
3913 ] = None,
3914 response_model_exclude: Annotated[
3915 Optional[IncEx],
3916 Doc(
3917 """
3918 Configuration passed to Pydantic to exclude certain fields in the
3919 response data.
3921 Read more about it in the
3922 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3923 """
3924 ),
3925 ] = None,
3926 response_model_by_alias: Annotated[
3927 bool,
3928 Doc(
3929 """
3930 Configuration passed to Pydantic to define if the response model
3931 should be serialized by alias when an alias is used.
3933 Read more about it in the
3934 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3935 """
3936 ),
3937 ] = True,
3938 response_model_exclude_unset: Annotated[
3939 bool,
3940 Doc(
3941 """
3942 Configuration passed to Pydantic to define if the response data
3943 should have all the fields, including the ones that were not set and
3944 have their default values. This is different from
3945 `response_model_exclude_defaults` in that if the fields are set,
3946 they will be included in the response, even if the value is the same
3947 as the default.
3949 When `True`, default values are omitted from the response.
3951 Read more about it in the
3952 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3953 """
3954 ),
3955 ] = False,
3956 response_model_exclude_defaults: Annotated[
3957 bool,
3958 Doc(
3959 """
3960 Configuration passed to Pydantic to define if the response data
3961 should have all the fields, including the ones that have the same value
3962 as the default. This is different from `response_model_exclude_unset`
3963 in that if the fields are set but contain the same default values,
3964 they will be excluded from the response.
3966 When `True`, default values are omitted from the response.
3968 Read more about it in the
3969 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3970 """
3971 ),
3972 ] = False,
3973 response_model_exclude_none: Annotated[
3974 bool,
3975 Doc(
3976 """
3977 Configuration passed to Pydantic to define if the response data should
3978 exclude fields set to `None`.
3980 This is much simpler (less smart) than `response_model_exclude_unset`
3981 and `response_model_exclude_defaults`. You probably want to use one of
3982 those two instead of this one, as those allow returning `None` values
3983 when it makes sense.
3985 Read more about it in the
3986 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3987 """
3988 ),
3989 ] = False,
3990 include_in_schema: Annotated[
3991 bool,
3992 Doc(
3993 """
3994 Include this *path operation* in the generated OpenAPI schema.
3996 This affects the generated OpenAPI (e.g. visible at `/docs`).
3998 Read more about it in the
3999 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
4000 """
4001 ),
4002 ] = True,
4003 response_class: Annotated[
4004 Type[Response],
4005 Doc(
4006 """
4007 Response class to be used for this *path operation*.
4009 This will not be used if you return a response directly.
4011 Read more about it in the
4012 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
4013 """
4014 ),
4015 ] = Default(JSONResponse),
4016 name: Annotated[
4017 Optional[str],
4018 Doc(
4019 """
4020 Name for this *path operation*. Only used internally.
4021 """
4022 ),
4023 ] = None,
4024 callbacks: Annotated[
4025 Optional[List[BaseRoute]],
4026 Doc(
4027 """
4028 List of *path operations* that will be used as OpenAPI callbacks.
4030 This is only for OpenAPI documentation, the callbacks won't be used
4031 directly.
4033 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4035 Read more about it in the
4036 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4037 """
4038 ),
4039 ] = None,
4040 openapi_extra: Annotated[
4041 Optional[Dict[str, Any]],
4042 Doc(
4043 """
4044 Extra metadata to be included in the OpenAPI schema for this *path
4045 operation*.
4047 Read more about it in the
4048 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4049 """
4050 ),
4051 ] = None,
4052 generate_unique_id_function: Annotated[
4053 Callable[[routing.APIRoute], str],
4054 Doc(
4055 """
4056 Customize the function used to generate unique IDs for the *path
4057 operations* shown in the generated OpenAPI.
4059 This is particularly useful when automatically generating clients or
4060 SDKs for your API.
4062 Read more about it in the
4063 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4064 """
4065 ),
4066 ] = Default(generate_unique_id),
4067 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4068 """
4069 Add a *path operation* using an HTTP PATCH operation.
4071 ## Example
4073 ```python
4074 from fastapi import FastAPI
4075 from pydantic import BaseModel
4077 class Item(BaseModel):
4078 name: str
4079 description: str | None = None
4081 app = FastAPI()
4083 @app.patch("/items/")
4084 def update_item(item: Item):
4085 return {"message": "Item updated in place"}
4086 ```
4087 """
4088 return self.router.patch( 1abcdef
4089 path,
4090 response_model=response_model,
4091 status_code=status_code,
4092 tags=tags,
4093 dependencies=dependencies,
4094 summary=summary,
4095 description=description,
4096 response_description=response_description,
4097 responses=responses,
4098 deprecated=deprecated,
4099 operation_id=operation_id,
4100 response_model_include=response_model_include,
4101 response_model_exclude=response_model_exclude,
4102 response_model_by_alias=response_model_by_alias,
4103 response_model_exclude_unset=response_model_exclude_unset,
4104 response_model_exclude_defaults=response_model_exclude_defaults,
4105 response_model_exclude_none=response_model_exclude_none,
4106 include_in_schema=include_in_schema,
4107 response_class=response_class,
4108 name=name,
4109 callbacks=callbacks,
4110 openapi_extra=openapi_extra,
4111 generate_unique_id_function=generate_unique_id_function,
4112 )
4114 def trace( 1abcdef
4115 self,
4116 path: Annotated[
4117 str,
4118 Doc(
4119 """
4120 The URL path to be used for this *path operation*.
4122 For example, in `http://example.com/items`, the path is `/items`.
4123 """
4124 ),
4125 ],
4126 *,
4127 response_model: Annotated[
4128 Any,
4129 Doc(
4130 """
4131 The type to use for the response.
4133 It could be any valid Pydantic *field* type. So, it doesn't have to
4134 be a Pydantic model, it could be other things, like a `list`, `dict`,
4135 etc.
4137 It will be used for:
4139 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
4140 show it as the response (JSON Schema).
4141 * Serialization: you could return an arbitrary object and the
4142 `response_model` would be used to serialize that object into the
4143 corresponding JSON.
4144 * Filtering: the JSON sent to the client will only contain the data
4145 (fields) defined in the `response_model`. If you returned an object
4146 that contains an attribute `password` but the `response_model` does
4147 not include that field, the JSON sent to the client would not have
4148 that `password`.
4149 * Validation: whatever you return will be serialized with the
4150 `response_model`, converting any data as necessary to generate the
4151 corresponding JSON. But if the data in the object returned is not
4152 valid, that would mean a violation of the contract with the client,
4153 so it's an error from the API developer. So, FastAPI will raise an
4154 error and return a 500 error code (Internal Server Error).
4156 Read more about it in the
4157 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
4158 """
4159 ),
4160 ] = Default(None),
4161 status_code: Annotated[
4162 Optional[int],
4163 Doc(
4164 """
4165 The default status code to be used for the response.
4167 You could override the status code by returning a response directly.
4169 Read more about it in the
4170 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
4171 """
4172 ),
4173 ] = None,
4174 tags: Annotated[
4175 Optional[List[Union[str, Enum]]],
4176 Doc(
4177 """
4178 A list of tags to be applied to the *path operation*.
4180 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4182 Read more about it in the
4183 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
4184 """
4185 ),
4186 ] = None,
4187 dependencies: Annotated[
4188 Optional[Sequence[Depends]],
4189 Doc(
4190 """
4191 A list of dependencies (using `Depends()`) to be applied to the
4192 *path operation*.
4194 Read more about it in the
4195 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
4196 """
4197 ),
4198 ] = None,
4199 summary: Annotated[
4200 Optional[str],
4201 Doc(
4202 """
4203 A summary for the *path operation*.
4205 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4207 Read more about it in the
4208 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4209 """
4210 ),
4211 ] = None,
4212 description: Annotated[
4213 Optional[str],
4214 Doc(
4215 """
4216 A description for the *path operation*.
4218 If not provided, it will be extracted automatically from the docstring
4219 of the *path operation function*.
4221 It can contain Markdown.
4223 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4225 Read more about it in the
4226 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4227 """
4228 ),
4229 ] = None,
4230 response_description: Annotated[
4231 str,
4232 Doc(
4233 """
4234 The description for the default response.
4236 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4237 """
4238 ),
4239 ] = "Successful Response",
4240 responses: Annotated[
4241 Optional[Dict[Union[int, str], Dict[str, Any]]],
4242 Doc(
4243 """
4244 Additional responses that could be returned by this *path operation*.
4246 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4247 """
4248 ),
4249 ] = None,
4250 deprecated: Annotated[
4251 Optional[bool],
4252 Doc(
4253 """
4254 Mark this *path operation* as deprecated.
4256 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4257 """
4258 ),
4259 ] = None,
4260 operation_id: Annotated[
4261 Optional[str],
4262 Doc(
4263 """
4264 Custom operation ID to be used by this *path operation*.
4266 By default, it is generated automatically.
4268 If you provide a custom operation ID, you need to make sure it is
4269 unique for the whole API.
4271 You can customize the
4272 operation ID generation with the parameter
4273 `generate_unique_id_function` in the `FastAPI` class.
4275 Read more about it in the
4276 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4277 """
4278 ),
4279 ] = None,
4280 response_model_include: Annotated[
4281 Optional[IncEx],
4282 Doc(
4283 """
4284 Configuration passed to Pydantic to include only certain fields in the
4285 response data.
4287 Read more about it in the
4288 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4289 """
4290 ),
4291 ] = None,
4292 response_model_exclude: Annotated[
4293 Optional[IncEx],
4294 Doc(
4295 """
4296 Configuration passed to Pydantic to exclude certain fields in the
4297 response data.
4299 Read more about it in the
4300 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4301 """
4302 ),
4303 ] = None,
4304 response_model_by_alias: Annotated[
4305 bool,
4306 Doc(
4307 """
4308 Configuration passed to Pydantic to define if the response model
4309 should be serialized by alias when an alias is used.
4311 Read more about it in the
4312 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4313 """
4314 ),
4315 ] = True,
4316 response_model_exclude_unset: Annotated[
4317 bool,
4318 Doc(
4319 """
4320 Configuration passed to Pydantic to define if the response data
4321 should have all the fields, including the ones that were not set and
4322 have their default values. This is different from
4323 `response_model_exclude_defaults` in that if the fields are set,
4324 they will be included in the response, even if the value is the same
4325 as the default.
4327 When `True`, default values are omitted from the response.
4329 Read more about it in the
4330 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4331 """
4332 ),
4333 ] = False,
4334 response_model_exclude_defaults: Annotated[
4335 bool,
4336 Doc(
4337 """
4338 Configuration passed to Pydantic to define if the response data
4339 should have all the fields, including the ones that have the same value
4340 as the default. This is different from `response_model_exclude_unset`
4341 in that if the fields are set but contain the same default values,
4342 they will be excluded from the response.
4344 When `True`, default values are omitted from the response.
4346 Read more about it in the
4347 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4348 """
4349 ),
4350 ] = False,
4351 response_model_exclude_none: Annotated[
4352 bool,
4353 Doc(
4354 """
4355 Configuration passed to Pydantic to define if the response data should
4356 exclude fields set to `None`.
4358 This is much simpler (less smart) than `response_model_exclude_unset`
4359 and `response_model_exclude_defaults`. You probably want to use one of
4360 those two instead of this one, as those allow returning `None` values
4361 when it makes sense.
4363 Read more about it in the
4364 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
4365 """
4366 ),
4367 ] = False,
4368 include_in_schema: Annotated[
4369 bool,
4370 Doc(
4371 """
4372 Include this *path operation* in the generated OpenAPI schema.
4374 This affects the generated OpenAPI (e.g. visible at `/docs`).
4376 Read more about it in the
4377 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
4378 """
4379 ),
4380 ] = True,
4381 response_class: Annotated[
4382 Type[Response],
4383 Doc(
4384 """
4385 Response class to be used for this *path operation*.
4387 This will not be used if you return a response directly.
4389 Read more about it in the
4390 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
4391 """
4392 ),
4393 ] = Default(JSONResponse),
4394 name: Annotated[
4395 Optional[str],
4396 Doc(
4397 """
4398 Name for this *path operation*. Only used internally.
4399 """
4400 ),
4401 ] = None,
4402 callbacks: Annotated[
4403 Optional[List[BaseRoute]],
4404 Doc(
4405 """
4406 List of *path operations* that will be used as OpenAPI callbacks.
4408 This is only for OpenAPI documentation, the callbacks won't be used
4409 directly.
4411 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4413 Read more about it in the
4414 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4415 """
4416 ),
4417 ] = None,
4418 openapi_extra: Annotated[
4419 Optional[Dict[str, Any]],
4420 Doc(
4421 """
4422 Extra metadata to be included in the OpenAPI schema for this *path
4423 operation*.
4425 Read more about it in the
4426 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4427 """
4428 ),
4429 ] = None,
4430 generate_unique_id_function: Annotated[
4431 Callable[[routing.APIRoute], str],
4432 Doc(
4433 """
4434 Customize the function used to generate unique IDs for the *path
4435 operations* shown in the generated OpenAPI.
4437 This is particularly useful when automatically generating clients or
4438 SDKs for your API.
4440 Read more about it in the
4441 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4442 """
4443 ),
4444 ] = Default(generate_unique_id),
4445 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4446 """
4447 Add a *path operation* using an HTTP TRACE operation.
4449 ## Example
4451 ```python
4452 from fastapi import FastAPI
4454 app = FastAPI()
4456 @app.trace("/items/{item_id}")
4457 def trace_item(item_id: str):
4458 return None
4459 ```
4460 """
4461 return self.router.trace( 1abcdef
4462 path,
4463 response_model=response_model,
4464 status_code=status_code,
4465 tags=tags,
4466 dependencies=dependencies,
4467 summary=summary,
4468 description=description,
4469 response_description=response_description,
4470 responses=responses,
4471 deprecated=deprecated,
4472 operation_id=operation_id,
4473 response_model_include=response_model_include,
4474 response_model_exclude=response_model_exclude,
4475 response_model_by_alias=response_model_by_alias,
4476 response_model_exclude_unset=response_model_exclude_unset,
4477 response_model_exclude_defaults=response_model_exclude_defaults,
4478 response_model_exclude_none=response_model_exclude_none,
4479 include_in_schema=include_in_schema,
4480 response_class=response_class,
4481 name=name,
4482 callbacks=callbacks,
4483 openapi_extra=openapi_extra,
4484 generate_unique_id_function=generate_unique_id_function,
4485 )
4487 def websocket_route( 1abcdef
4488 self, path: str, name: Union[str, None] = None
4489 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4490 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef
4491 self.router.add_websocket_route(path, func, name=name) 1abcdef
4492 return func 1abcdef
4494 return decorator 1abcdef
4496 @deprecated( 1abcdef
4497 """
4498 on_event is deprecated, use lifespan event handlers instead.
4500 Read more about it in the
4501 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
4502 """
4503 )
4504 def on_event( 1abcdef
4505 self,
4506 event_type: Annotated[
4507 str,
4508 Doc(
4509 """
4510 The type of event. `startup` or `shutdown`.
4511 """
4512 ),
4513 ],
4514 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4515 """
4516 Add an event handler for the application.
4518 `on_event` is deprecated, use `lifespan` event handlers instead.
4520 Read more about it in the
4521 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated).
4522 """
4523 return self.router.on_event(event_type) 2a | jbb } qbc ~ xbd abEbe bbLbf cbSb
4525 def middleware( 1abcdef
4526 self,
4527 middleware_type: Annotated[
4528 str,
4529 Doc(
4530 """
4531 The type of middleware. Currently only supports `http`.
4532 """
4533 ),
4534 ],
4535 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4536 """
4537 Add a middleware to the application.
4539 Read more about it in the
4540 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/).
4542 ## Example
4544 ```python
4545 import time
4546 from typing import Awaitable, Callable
4548 from fastapi import FastAPI, Request, Response
4550 app = FastAPI()
4553 @app.middleware("http")
4554 async def add_process_time_header(
4555 request: Request, call_next: Callable[[Request], Awaitable[Response]]
4556 ) -> Response:
4557 start_time = time.time()
4558 response = await call_next(request)
4559 process_time = time.time() - start_time
4560 response.headers["X-Process-Time"] = str(process_time)
4561 return response
4562 ```
4563 """
4565 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef
4566 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcdef
4567 return func 1abcdef
4569 return decorator 1abcdef
4571 def exception_handler( 1abcdef
4572 self,
4573 exc_class_or_status_code: Annotated[
4574 Union[int, Type[Exception]],
4575 Doc(
4576 """
4577 The Exception class this would handle, or a status code.
4578 """
4579 ),
4580 ],
4581 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4582 """
4583 Add an exception handler to the app.
4585 Read more about it in the
4586 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).
4588 ## Example
4590 ```python
4591 from fastapi import FastAPI, Request
4592 from fastapi.responses import JSONResponse
4595 class UnicornException(Exception):
4596 def __init__(self, name: str):
4597 self.name = name
4600 app = FastAPI()
4603 @app.exception_handler(UnicornException)
4604 async def unicorn_exception_handler(request: Request, exc: UnicornException):
4605 return JSONResponse(
4606 status_code=418,
4607 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."},
4608 )
4609 ```
4610 """
4612 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef
4613 self.add_exception_handler(exc_class_or_status_code, func) 1abcdef
4614 return func 1abcdef
4616 return decorator 1abcdef