Coverage for fastapi/applications.py: 100%
152 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-06 16:22 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-06 16:22 +0000
1from enum import Enum 1abcde
2from typing import ( 1abcde
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 1abcde
17from fastapi.datastructures import Default, DefaultPlaceholder 1abcde
18from fastapi.exception_handlers import ( 1abcde
19 http_exception_handler,
20 request_validation_exception_handler,
21 websocket_request_validation_exception_handler,
22)
23from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcde
24from fastapi.logger import logger 1abcde
25from fastapi.openapi.docs import ( 1abcde
26 get_redoc_html,
27 get_swagger_ui_html,
28 get_swagger_ui_oauth2_redirect_html,
29)
30from fastapi.openapi.utils import get_openapi 1abcde
31from fastapi.params import Depends 1abcde
32from fastapi.types import DecoratedCallable, IncEx 1abcde
33from fastapi.utils import generate_unique_id 1abcde
34from starlette.applications import Starlette 1abcde
35from starlette.datastructures import State 1abcde
36from starlette.exceptions import HTTPException 1abcde
37from starlette.middleware import Middleware 1abcde
38from starlette.middleware.base import BaseHTTPMiddleware 1abcde
39from starlette.requests import Request 1abcde
40from starlette.responses import HTMLResponse, JSONResponse, Response 1abcde
41from starlette.routing import BaseRoute 1abcde
42from starlette.types import ASGIApp, Lifespan, Receive, Scope, Send 1abcde
43from typing_extensions import Annotated, Doc, deprecated 1abcde
45AppType = TypeVar("AppType", bound="FastAPI") 1abcde
48class FastAPI(Starlette): 1abcde
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__( 1abcde
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-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 **extra: Annotated[
814 Any,
815 Doc(
816 """
817 Extra keyword arguments to be stored in the app, not used by FastAPI
818 anywhere.
819 """
820 ),
821 ],
822 ) -> None:
823 self.debug = debug 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
824 self.title = title 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
825 self.summary = summary 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
826 self.description = description 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
827 self.version = version 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
828 self.terms_of_service = terms_of_service 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
829 self.contact = contact 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
830 self.license_info = license_info 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
831 self.openapi_url = openapi_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
832 self.openapi_tags = openapi_tags 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
833 self.root_path_in_servers = root_path_in_servers 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
834 self.docs_url = docs_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
835 self.redoc_url = redoc_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
836 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
837 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
838 self.swagger_ui_parameters = swagger_ui_parameters 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
839 self.servers = servers or [] 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
840 self.separate_input_output_schemas = separate_input_output_schemas 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
841 self.extra = extra 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
842 self.openapi_version: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
843 str,
844 Doc(
845 """
846 The version string of OpenAPI.
848 FastAPI will generate OpenAPI version 3.1.0, and will output that as
849 the OpenAPI version. But some tools, even though they might be
850 compatible with OpenAPI 3.1.0, might not recognize it as a valid.
852 So you could override this value to trick those tools into using
853 the generated OpenAPI. Have in mind that this is a hack. But if you
854 avoid using features added in OpenAPI 3.1.0, it might work for your
855 use case.
857 This is not passed as a parameter to the `FastAPI` class to avoid
858 giving the false idea that FastAPI would generate a different OpenAPI
859 schema. It is only available as an attribute.
861 **Example**
863 ```python
864 from fastapi import FastAPI
866 app = FastAPI()
868 app.openapi_version = "3.0.2"
869 ```
870 """
871 ),
872 ] = "3.1.0"
873 self.openapi_schema: Optional[Dict[str, Any]] = None 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
874 if self.openapi_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
875 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
876 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
877 # TODO: remove when discarding the openapi_prefix parameter
878 if openapi_prefix: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
879 logger.warning( 1abcde
880 '"openapi_prefix" has been deprecated in favor of "root_path", which '
881 "follows more closely the ASGI standard, is simpler, and more "
882 "automatic. Check the docs at "
883 "https://fastapi.tiangolo.com/advanced/sub-applications/"
884 )
885 self.webhooks: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
886 routing.APIRouter,
887 Doc(
888 """
889 The `app.webhooks` attribute is an `APIRouter` with the *path
890 operations* that will be used just for documentation of webhooks.
892 Read more about it in the
893 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/).
894 """
895 ),
896 ] = webhooks or routing.APIRouter()
897 self.root_path = root_path or openapi_prefix 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
898 self.state: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
899 State,
900 Doc(
901 """
902 A state object for the application. This is the same object for the
903 entire application, it doesn't change from request to request.
905 You normally wouldn't use this in FastAPI, for most of the cases you
906 would instead use FastAPI dependencies.
908 This is simply inherited from Starlette.
910 Read more about it in the
911 [Starlette docs for Applications](https://www.starlette.io/applications/#storing-state-on-the-app-instance).
912 """
913 ),
914 ] = State()
915 self.dependency_overrides: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
916 Dict[Callable[..., Any], Callable[..., Any]],
917 Doc(
918 """
919 A dictionary with overrides for the dependencies.
921 Each key is the original dependency callable, and the value is the
922 actual dependency that should be called.
924 This is for testing, to replace expensive dependencies with testing
925 versions.
927 Read more about it in the
928 [FastAPI docs for Testing Dependencies with Overrides](https://fastapi.tiangolo.com/advanced/testing-dependencies/).
929 """
930 ),
931 ] = {}
932 self.router: routing.APIRouter = routing.APIRouter( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
933 routes=routes,
934 redirect_slashes=redirect_slashes,
935 dependency_overrides_provider=self,
936 on_startup=on_startup,
937 on_shutdown=on_shutdown,
938 lifespan=lifespan,
939 default_response_class=default_response_class,
940 dependencies=dependencies,
941 callbacks=callbacks,
942 deprecated=deprecated,
943 include_in_schema=include_in_schema,
944 responses=responses,
945 generate_unique_id_function=generate_unique_id_function,
946 defer_init=False,
947 )
948 self.exception_handlers: Dict[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
949 Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]]
950 ] = {} if exception_handlers is None else dict(exception_handlers)
951 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
952 self.exception_handlers.setdefault( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
953 RequestValidationError, request_validation_exception_handler
954 )
955 self.exception_handlers.setdefault( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
956 WebSocketRequestValidationError,
957 # Starlette still has incorrect type specification for the handlers
958 websocket_request_validation_exception_handler, # type: ignore
959 )
961 self.user_middleware: List[Middleware] = ( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
962 [] if middleware is None else list(middleware)
963 )
964 self.middleware_stack: Union[ASGIApp, None] = None 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
965 self.setup() 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
967 def openapi(self) -> Dict[str, Any]: 1abcde
968 """
969 Generate the OpenAPI schema of the application. This is called by FastAPI
970 internally.
972 The first time it is called it stores the result in the attribute
973 `app.openapi_schema`, and next times it is called, it just returns that same
974 result. To avoid the cost of generating the schema every time.
976 If you need to modify the generated OpenAPI schema, you could modify it.
978 Read more in the
979 [FastAPI docs for OpenAPI](https://fastapi.tiangolo.com/how-to/extending-openapi/).
980 """
981 if not self.openapi_schema: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!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,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
982 self.openapi_schema = get_openapi( 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!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,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
983 title=self.title,
984 version=self.version,
985 openapi_version=self.openapi_version,
986 summary=self.summary,
987 description=self.description,
988 terms_of_service=self.terms_of_service,
989 contact=self.contact,
990 license_info=self.license_info,
991 routes=self.routes,
992 webhooks=self.webhooks.routes,
993 tags=self.openapi_tags,
994 servers=self.servers,
995 separate_input_output_schemas=self.separate_input_output_schemas,
996 )
997 return self.openapi_schema 2EfFfGfHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!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,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
999 def setup(self) -> None: 1abcde
1000 if self.openapi_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1001 urls = (server_data.get("url") for server_data in self.servers) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1002 server_urls = {url for url in urls if url} 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1004 async def openapi(req: Request) -> JSONResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1005 root_path = req.scope.get("root_path", "").rstrip("/") 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
1006 if root_path not in server_urls: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
1007 if root_path and self.root_path_in_servers: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
1008 self.servers.insert(0, {"url": root_path}) 2afpfbfcfqfdfrfefffsfgftfhfifufjfvfkflfwfmfxfnfofyf
1009 server_urls.add(root_path) 2afpfbfcfqfdfrfefffsfgftfhfifufjfvfkflfwfmfxfnfofyf
1010 return JSONResponse(self.openapi()) 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!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~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!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~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv
1012 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1013 if self.openapi_url and self.docs_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1015 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1016 root_path = req.scope.get("root_path", "").rstrip("/") 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v
1017 openapi_url = root_path + self.openapi_url 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v
1018 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v
1019 if oauth2_redirect_url: 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v
1020 oauth2_redirect_url = root_path + oauth2_redirect_url 20v1v2vf 3v4v5v6v7v8vg 9v!v#v$v%v'vh (v)v*v+v,v-vi .v/v:v;v=v?vj @v[v]v
1021 return get_swagger_ui_html( 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v
1022 openapi_url=openapi_url,
1023 title=f"{self.title} - Swagger UI",
1024 oauth2_redirect_url=oauth2_redirect_url,
1025 init_oauth=self.swagger_ui_init_oauth,
1026 swagger_ui_parameters=self.swagger_ui_parameters,
1027 )
1029 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1031 if self.swagger_ui_oauth2_redirect_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1033 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1034 return get_swagger_ui_oauth2_redirect_html() 2iwjwkwlwmwnwowpwqwrw
1036 self.add_route( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1037 self.swagger_ui_oauth2_redirect_url,
1038 swagger_ui_redirect,
1039 include_in_schema=False,
1040 )
1041 if self.openapi_url and self.redoc_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1043 async def redoc_html(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1044 root_path = req.scope.get("root_path", "").rstrip("/") 2dwf ewg fwh gwi hwj
1045 openapi_url = root_path + self.openapi_url 2dwf ewg fwh gwi hwj
1046 return get_redoc_html( 2dwf ewg fwh gwi hwj
1047 openapi_url=openapi_url, title=f"{self.title} - ReDoc"
1048 )
1050 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd
1052 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 1abcde
1053 if self.root_path: 3a Rw Sw Tw Uw Vw Ww Xw Yw Zw 0w 1w 2w Ef 3w 4w Ff Gf 5w Rv Hf If Jf Kf 6w 7w 8w 9w Lf !w #w $w %w sw 'w Gb Hb Mf (w )w Nf dw 0v iw *w Ib +w Of ,w -w .w Pf Qf /w :w 1v jw Jb Kb Lb ;w =w ?w @w [w ]w ^w _w `w {w |w }w ~w ax bx cx dx ex fx gx hx ix jx kx lx mx nx ox px qx rx sx tx ux vx wx xx yx zx Ax Bx Cx Dx Ex Fx Gx Hx Ix Jx Kx Lx Mx Nx Ox Px Qx Rx Sx Tx Rf Ux Vx Wx Xx Yx Zx 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x !x #x $x %x 'x (x )x *x +x ,x -x .x /x :x ;x tw af =x Sf ?x @x [x Tf ]x ^x _x `x {x |x }x ~x Uf ay by cy dy Vf ey fy Wf gy hy iy jy ky ly my ny Xf oy k 3 l m n o p 4 py Yf qy Zf ry sy ty uy vy 0f wy xy yy zy Ay By Cy Dy Ey Fy 1f Mb Nb 2f Gy Hy Iy Jy Ky 3f Ly My Ny Oy 4f Py ^v Qy Ry 5f Sy 6f Ty 7f ; = ? q r @ Uy 8f Vy Wy Xy 9f Yy Zy 0y 1y 2y !f 3y 4y 5y 6y 7y 8y 9y !y #y $y %y 'y (y )y *y +y ,y -y .y /y :y ;y =y ?y @y [y ]y ^y _y `y {y |y }y ~y az bz cz dz ez fz gz hz iz jz kz lz mz nz oz pz qz rz sz tz uz vz wz xz yz zz Az Bz Cz Dz Ez Fz Gz Hz Iz Jz Kz Lz Mz Nz Oz #f Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz 0z 1z 2z 3z 4z 5z 6z 7z 8z 9z !z #z $z %z 'z (z )z *z +z ,z Ob Pb -z .z $f /z %f :z 'f (f ;z =z ?z @z [z ]z ^z )f _z `z {z |z }z ~z aA bA cA dA *f eA +f fA gA hA iA jA kA lA mA nA oA pA qA rA sA ,f tA uA vA wA xA yA zA AA BA CA DA EA FA GA HA IA JA KA LA MA NA OA PA QA RA SA TA UA VA WA XA YA ZA 0A -f 1A 2A 3A 4A 5A 6A Qb Rb Sb , [ Tb 7A Ub Vb ] s .f 8A 9A /f !A #A :f $A %A ;f 'A (A =f )A *A ?f +A ,A @f -A .A [f /A :A ]f ;A =A ^f ?A @A _f [A ]A `f ^A _A {f `A {A |A }A |f ~A aB bB cB }f dB eB fB gB ~f hB iB jB ag kB lB mB bg nB oB pB cg qB rB sB dg tB uB vB eg wB xB yB fg zB AB BB CB DB EB FB GB HB gg IB JB KB hg LB ig MB NB OB PB QB RB SB jg TB UB VB WB XB YB ZB 0B 1B kg 2B 3B 4B lg 5B mg 6B 7B 8B ng 9B !B #B og $B %B 'B (B )B *B +B ,B -B .B /B :B ;B =B ?B @B [B ]B ^B _B `B {B |B }B ~B aC bC cC dC eC fC gC pg hC iC jC kC lC qg mC 2v nC oC rg pC qC rC sC sg tC uC tg vC wC ug xC yC vg zC AC BC CC DC EC FC GC HC IC wg JC KC LC MC NC pf uw bf vw cf ww zf OC PC QC RC SC TC UC VC WC XC YC xg ZC 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C !C #C $C %C 'C (C )C *C +C ,C -C .C /C yg :C ;C =C ?C @C [C ]C ^C _C `C {C |C }C ~C aD bD cD zg dD eD fD gD hD iD jD kD lD mD nD oD pD qD Ag rD sD tD Bg Cg uD vD wD xD Dg yD zD AD BD Eg CD DD ED Fg FD GD HD Gg ID JD KD Hg Ig LD f `e Wb MD 3v ND 4v OD 5v PD Jg QD Kg RD SD TD UD VD WD XD YD ZD 0D 1D 2D 3D 4D 5D 6D Lg 7D Mg 8D Ng 9D Og !D Pg Qg #D Rg $D %D 'D (D )D *D Sg +D ,D -D Tg .D Ug Vg /D :D Wg ;D Xg =D Yg ?D Zg @D [D ]D ^D 0g _D `D {D |D 1g }D ~D aE bE cE dE eE fE gE hE iE jE kE lE mE nE oE pE qE rE sE tE uE vE wE xE yE zE AE BE 2g CE DE EE FE GE HE IE JE 3g KE 4g LE 5g ME 6g NE }v OE 7g PE 8g QE RE 9g SE !g TE #g UE $g VE %g WE XE YE ZE 'g 0E 1E (g 2E 3E )g 4E 5E 6E *g +g 7E 8E 9E !E #E ,g $E -g %E .g 'E /g (E :g )E ;g *E =g +E ?g ,E @g [g -E .E ]g /E ^g :E _g ;E `g =E {g |g }g ?E @E ~g ah [E bh ]E ^E _E ch `E {E |E }E ~E dh eh fh aF gh bF cF hh dF eF fF gF hF ih iF jF jh kF lF kh lh mF nF oF pF mh qF rF sF tF uF nh vF wF oh xF yF zF ph AF BF qh CF rh DF EF sh FF GF HF th IF JF uh vh KF LF MF NF OF wh PF QF RF SF xh TF UF VF WF yh XF YF zh ZF 0F Ah 1F 2F 3F 4F 5F 6F Bh 7F 8F 9F !F #F Ch $F %F 'F (F )F Dh *F +F ,F Eh -F .F Fh /F :F ;F =F ?F Gh @F [F ]F ^F _F Hh `F {F |F }F ~F Ih aG bG cG dG eG Jh fG gG hG iG jG Kh kG lG mG nG oG pG qG rG sG tG Lh uG Mh vG wG xG Nh yG Oh zG AG Ph BG Qh Rh CG DG Sh EG FG Th GG Uh HG Vh IG Wh JG Xh KG Yh LG MG NG Zh OG PG QG 0h RG SG TG UG VG WG XG YG 1h ZG 0G 1G 2G 3G 4G 5G 6G 2h 7G 8G 9G !G #G $G %G 3h 'G (G )G *G +G ,G -G .G /G :G ;G =G ?G @G [G 4h ]G ^G _G `G {G |G }G ~G aH 5h bH cH dH eH 6h fH gH hH iH jH 7h kH lH 8h mH nH Xb Yb oH pH qH rH sH 9h tH uH vH wH xH yH !h zH AH BH #h qf CH Zb DH $h EH FH GH %h HH IH ^ JH KH LH MH NH OH PH QH RH SH TH UH VH WH XH YH ZH 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H !H #H $H %H 'H 'h (H )H (h *H +H ,H -H .H /H :H ;H =H ?H @H 0b 1b )h [H ]H ^H _H 2b 3b 4b `H {H |H }H ~H aI bI cI b dI eI fI gI hI iI jI kI lI mI nI oI *h pI qI +h ,h rI Sv -h .h /h :h sI tI uI vI ;h wI xI yI zI xw AI 5b 6b =h BI CI ?h ew 6v kw DI 7b EI @h FI GI HI [h ]h II JI 7v lw 8b 9b !b KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI 0I 1I 2I 3I 4I 5I 6I 7I 8I 9I !I #I $I %I 'I (I )I *I +I ,I -I .I /I :I ;I =I ?I @I [I ]I ^I _I `I {I |I }I ~I aJ bJ cJ dJ eJ fJ ^h gJ hJ iJ jJ kJ lJ mJ nJ oJ pJ qJ rJ sJ tJ uJ vJ wJ xJ yJ zJ AJ BJ CJ DJ EJ FJ GJ HJ IJ JJ KJ yw df LJ _h MJ NJ OJ `h PJ QJ RJ SJ TJ UJ VJ WJ {h XJ YJ ZJ 0J |h 1J 2J }h 3J 4J 5J 6J 7J 8J 9J !J ~h #J t 5 u v w x y 6 $J ai %J bi 'J (J )J *J +J ci ,J -J .J /J :J ;J =J ?J @J [J di #b $b ei ]J ^J _J `J {J fi |J }J ~J aK gi bK _v cK dK hi eK ii fK ji _ ` { z A | gK ki hK iK jK li kK lK mK nK oK mi pK qK rK sK tK uK vK wK xK yK zK AK BK CK DK EK FK GK HK IK JK KK LK MK NK OK PK QK RK SK TK UK VK WK XK YK ZK 0K 1K 2K 3K 4K 5K 6K 7K 8K 9K !K #K $K %K 'K (K )K *K +K ,K -K .K /K :K ;K =K ?K @K [K ]K ^K _K `K {K |K }K ~K aL ni bL cL dL eL fL gL hL iL jL kL lL mL nL oL pL qL rL sL tL uL vL wL xL yL zL AL BL CL DL EL FL %b 'b GL HL oi IL pi JL qi ri KL LL ML NL OL PL QL si RL SL TL UL VL WL XL YL ZL 0L ti 1L ui 2L 3L 4L 5L 6L 7L 8L 9L !L #L $L %L 'L (L vi )L *L +L ,L -L .L /L :L ;L =L ?L @L [L ]L ^L _L `L {L |L }L ~L aM bM cM dM eM fM gM hM iM jM kM lM mM wi nM oM pM qM rM sM (b )b *b - } +b tM ,b -b ~ B xi uM vM yi wM xM zi yM zM Ai AM BM Bi CM DM Ci EM FM Di GM HM Ei IM JM Fi KM LM Gi MM NM Hi OM PM Ii QM RM Ji SM TM UM VM Ki WM XM YM ZM Li 0M 1M 2M 3M Mi 4M 5M 6M Ni 7M 8M 9M Oi !M #M $M Pi %M 'M (M Qi )M *M +M Ri ,M -M .M Si /M :M ;M =M ?M @M [M ]M ^M Ti _M `M {M Ui |M Vi }M ~M aN bN cN dN eN Wi fN gN hN iN jN kN lN mN nN Xi oN pN qN Yi rN Zi sN tN uN 0i vN wN xN 1i yN zN AN BN CN DN EN FN GN HN IN JN KN LN MN NN ON PN QN RN SN TN UN VN WN XN YN ZN 0N 1N 2N 3N 2i 4N 5N 6N 7N 8N 3i 9N 8v !N #N 4i $N %N 'N (N 5i )N *N 6i +N ,N 7i -N .N 8i /N :N ;N =N ?N @N [N ]N ^N _N `N {N 9i |N }N ~N aO .b bO rf zw ef Aw ff Bw Af cO dO eO fO gO hO iO jO kO lO mO !i nO oO pO qO rO sO tO uO vO wO xO yO zO AO BO CO DO EO FO GO HO IO JO KO #i LO MO NO OO PO QO RO SO TO UO VO WO XO YO ZO 0O 1O 2O 3O 4O 5O 6O 7O 8O $i 9O !O #O $O %O 'O (O )O *O +O ,O -O .O /O :O ;O =O %i ?O @O [O ]O ^O _O `O {O |O }O ~O aP bP cP 'i dP eP fP (i gP hP iP )i *i jP kP lP mP +i nP oP pP qP ,i rP sP tP uP -i vP wP xP .i yP zP AP /i BP CP DP :i EP FP ;i GP HP IP =i ?i JP KP @i [i LP g {e /b MP 9v NP !v OP #v PP ]i QP ^i :b _i RP SP TP UP VP WP XP YP ZP 0P 1P 2P 3P 4P 5P 6P `i 7P {i 8P |i 9P }i !P ~i aj #P bj $P %P 'P (P )P *P cj +P ,P -P dj .P ej fj /P :P gj ;P hj =P ij ?P jj @P kj [P lj ]P ^P _P `P mj {P |P }P ~P nj aQ bQ cQ dQ oj eQ fQ gQ hQ iQ jQ kQ lQ mQ nQ oQ pQ qQ rQ sQ tQ uQ vQ wQ xQ yQ zQ AQ BQ CQ DQ EQ FQ GQ HQ IQ JQ KQ LQ MQ NQ OQ PQ QQ RQ SQ pj TQ UQ VQ WQ XQ YQ ZQ 0Q qj 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q rj 9Q sj !Q tj #Q uj $Q ~v %Q vj 'Q wj (Q xj )Q *Q yj +Q zj ,Q Aj -Q Bj .Q Cj /Q Dj :Q Ej ;Q =Q ?Q @Q Fj [Q ]Q Gj ^Q _Q Hj `Q {Q |Q Ij Jj }Q ~Q aR bR cR Kj dR Lj eR Mj fR Nj gR Oj hR Pj iR Qj jR Rj kR Sj lR Tj mR Uj Vj nR oR Wj pR Xj qR Yj rR Zj sR 0j 1j 2j tR uR 3j 4j vR 5j wR xR yR 6j zR AR BR CR DR 7j 8j 9j ER !j #j FR $j GR HR %j IR JR KR LR MR 'j NR OR (j PR QR )j *j RR SR TR UR +j VR WR XR YR ,j ZR 0R 1R 2R 3R -j 4R 5R .j 6R 7R /j 8R 9R :j !R #R $R ;j %R 'R =j (R )R ?j *R +R @j ,R [j -R .R ]j /R :R ^j ;R =R ?R _j @R [R `j {j ]R ^R _R `R {R |j |R }R ~R aS }j bS cS dS eS ~j fS gS hS iS ak jS kS bk lS mS ck nS oS dk pS qS rS sS tS ek uS vS wS xS yS zS fk AS BS CS DS ES gk FS GS HS IS JS hk KS LS MS NS OS ik PS QS RS SS TS jk US VS WS kk XS YS ZS lk 0S 1S 2S mk 3S 4S nk 5S 6S 7S 8S 9S ok !S #S $S %S 'S pk (S )S *S +S ,S qk -S .S /S :S ;S rk =S ?S @S [S ]S sk ^S _S `S {S |S tk }S ~S aT bT cT uk dT eT fT gT hT vk iT jT kT lT mT nT oT pT qT rT wk sT xk tT uT vT yk wT zk xT yT Ak zT Bk AT Ck Dk BT CT Ek DT ET Fk FT Gk GT Hk HT Ik IT Jk JT Kk KT Lk LT Mk MT NT OT Nk PT QT RT Ok ST TT UT Pk VT WT XT YT ZT 0T 1T 2T Qk 3T 4T 5T 6T 7T 8T 9T !T Rk #T $T %T 'T (T )T *T +T Sk ,T -T .T /T :T ;T =T Tk ?T @T [T ]T ^T _T `T {T |T }T ~T aU bU cU dU Uk eU fU gU hU iU jU kU lU mU nU oU pU qU rU sU Vk tU uU vU wU xU yU zU AU BU CU DU EU FU GU HU Wk IU JU KU LU MU NU OU PU QU Xk RU SU TU UU Yk VU WU XU YU Tv ZU 0U 1U 2U 3U Zk 4U 5U 0k 6U 7U 1k 8U 9U 2k !U #U ;b =b $U %U 'U (U )U 3k *U +U ,U -U .U /U 4k :U ;U =U ?U @U [U 5k ]U ^U _U `U {U |U 6k }U ~U aV bV 7k sf cV ?b dV 8k eV fV ab gV 9k hV iV bb jV kV lV mV nV oV pV qV rV sV tV uV vV wV xV @b yV zV AV BV CV DV EV FV GV HV IV JV KV LV MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V !k 3V 4V #k 5V 6V 7V 8V 9V !V #V $V %V 'V (V [b ]b $k )V *V +V ,V ^b _b `b -V .V /V :V ;V =V ?V @V c [V ]V ^V _V `V {V |V }V ~V aW bW cW %k dW eW 'k (k fW Uv )k *k +k ,k gW hW iW jW -k kW lW mW nW Cw oW {b |b .k pW qW /k fw $v mw rW }b sW :k tW uW vW ;k =k wW xW %v nw ~b ac bc yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W )W *W +W ,W -W .W /W :W ;W =W ?W @W [W ]W ^W ?k _W `W {W |W }W ~W aX bX cX dX eX fX gX hX iX jX kX lX mX nX oX pX qX rX sX tX uX vX wX xX yX Dw gf zX @k AX BX CX [k DX EX FX GX HX IX JX KX ]k LX MX NX OX ^k PX QX _k RX SX TX UX VX WX XX YX `k ZX C 7 D E F G H 8 0X {k 1X |k 2X 3X 4X 5X 6X }k 7X 8X 9X !X #X $X %X 'X (X )X ~k cc dc al *X +X ,X -X .X bl /X :X ;X =X cl ?X `v @X [X dl ]X el ^X fl cb db eb I J fb _X gl `X {X |X hl }X ~X aY bY cY il dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY BY CY DY EY FY GY HY IY JY KY LY MY NY OY PY QY RY SY TY UY VY WY XY YY ZY 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y -Y .Y /Y :Y ;Y =Y jl ?Y @Y [Y ]Y ^Y _Y `Y {Y |Y }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ ec fc gc 9 hc ic ! jc kc lc uZ vZ kl wZ ll xZ ml nl yZ zZ AZ BZ CZ DZ EZ ol FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ pl PZ ql QZ RZ SZ TZ UZ VZ WZ XZ YZ ZZ 0Z 1Z 2Z 3Z rl 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 sl b0 c0 d0 e0 f0 g0 mc nc oc . gb pc h0 qc rc hb K tl i0 j0 ul k0 l0 vl m0 n0 wl o0 p0 xl q0 r0 yl s0 t0 zl u0 v0 Al w0 x0 Bl y0 z0 Cl A0 B0 Dl C0 D0 El E0 F0 Fl G0 H0 I0 J0 Gl K0 L0 M0 N0 Hl O0 P0 Q0 R0 Il S0 T0 U0 Jl V0 W0 X0 Kl Y0 Z0 00 Ll 10 20 30 Ml 40 50 60 Nl 70 80 90 Ol !0 #0 $0 %0 '0 (0 )0 *0 +0 Pl ,0 -0 .0 Ql /0 Rl :0 ;0 =0 ?0 @0 [0 ]0 Sl ^0 _0 `0 {0 |0 }0 ~0 a1 b1 Tl c1 d1 e1 Ul f1 Vl g1 h1 i1 Wl j1 k1 l1 Xl m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 Yl S1 T1 U1 V1 W1 Zl X1 'v Y1 Z1 0l 01 11 21 31 1l 41 51 2l 61 71 3l 81 91 4l !1 #1 $1 %1 '1 (1 )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 5l ?1 @1 [1 ]1 sc tc uc ^1 tf Ew hf Fw if Gw Bf _1 `1 {1 |1 }1 ~1 a2 b2 c2 d2 e2 6l f2 g2 h2 i2 j2 k2 l2 m2 n2 o2 p2 q2 r2 s2 t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 7l D2 E2 F2 G2 H2 I2 J2 K2 L2 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 Z2 02 8l 12 22 32 42 52 62 72 82 92 !2 #2 $2 %2 '2 (2 )2 *2 9l +2 ,2 -2 .2 /2 :2 ;2 =2 ?2 @2 [2 ]2 ^2 _2 `2 !l {2 |2 }2 ~2 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 #l k3 l3 m3 $l n3 o3 p3 %l q3 r3 s3 'l t3 u3 v3 (l )l w3 x3 y3 z3 *l A3 B3 C3 D3 +l E3 F3 G3 H3 ,l I3 J3 K3 L3 -l M3 N3 O3 P3 .l Q3 R3 S3 /l T3 U3 V3 :l W3 X3 Y3 ;l Z3 03 13 =l 23 33 43 ?l 53 63 @l 73 83 93 [l ]l !3 #3 ^l _l $3 %3 `l {l '3 h |e vc (3 (v )3 )v *3 *v +3 |l ,3 }l wc ~l xc am yc bm -3 .3 /3 :3 ;3 =3 ?3 @3 [3 ]3 ^3 _3 `3 {3 |3 }3 cm ~3 dm a4 em b4 fm c4 gm hm d4 im e4 f4 g4 h4 i4 j4 jm k4 l4 m4 km n4 lm mm o4 p4 nm q4 om r4 pm s4 qm t4 rm u4 sm v4 tm w4 um x4 vm y4 wm z4 A4 B4 C4 xm D4 E4 F4 G4 ym H4 I4 J4 K4 zm L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 04 14 24 34 44 54 64 74 84 94 !4 #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 ;4 =4 Am ?4 @4 [4 ]4 ^4 _4 `4 {4 Bm |4 }4 ~4 a5 b5 c5 d5 e5 Cm f5 Dm g5 Em h5 Fm i5 aw j5 Gm k5 Hm l5 Im m5 Jm n5 Km o5 p5 Lm q5 r5 Mm s5 Nm t5 Om u5 Pm v5 Qm w5 Rm x5 Sm y5 z5 A5 B5 Tm C5 D5 Um E5 F5 Vm G5 H5 I5 Wm Xm J5 K5 L5 M5 N5 Ym O5 Zm P5 0m Q5 1m R5 2m S5 3m T5 4m U5 5m V5 6m W5 7m X5 8m Y5 9m Z5 !m 05 #m 15 $m 25 %m 35 'm (m 45 55 )m 65 *m 75 +m 85 ,m 95 -m .m /m !5 #5 :m ;m $5 =m %5 '5 (5 ?m )5 *5 +5 ,5 -5 @m [m ]m .5 ^m _m /5 `m {m :5 |m ;5 =5 }m ?5 @5 [5 ]5 ^5 ~m _5 `5 an {5 |5 bn }5 ~5 cn dn a6 b6 c6 d6 en e6 f6 g6 h6 fn i6 j6 k6 l6 gn m6 n6 o6 p6 hn q6 r6 s6 t6 u6 in v6 w6 jn x6 y6 kn z6 A6 ln B6 C6 mn D6 E6 nn F6 G6 H6 on I6 J6 pn K6 L6 qn M6 N6 rn O6 sn P6 Q6 tn R6 S6 un T6 U6 V6 vn W6 X6 wn Y6 Z6 xn 06 16 yn 26 36 zn An 46 56 66 76 86 Bn 96 !6 #6 $6 Cn %6 '6 (6 )6 Dn *6 +6 ,6 -6 En .6 /6 :6 ;6 Fn =6 ?6 @6 [6 Gn ]6 ^6 Hn _6 `6 In {6 |6 Jn }6 ~6 a7 b7 c7 Kn d7 e7 f7 g7 h7 i7 Ln j7 k7 l7 m7 n7 Mn o7 p7 q7 r7 s7 Nn t7 u7 v7 w7 x7 On y7 z7 A7 B7 C7 Pn D7 E7 F7 Qn G7 H7 I7 Rn J7 K7 L7 Sn M7 N7 Tn O7 P7 Q7 R7 S7 Un T7 U7 V7 W7 X7 Vn Y7 Z7 07 17 27 Wn 37 47 57 67 77 Xn 87 97 !7 #7 $7 Yn %7 '7 (7 )7 *7 Zn +7 ,7 -7 .7 /7 0n :7 ;7 =7 ?7 @7 1n [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 2n b8 3n c8 4n d8 e8 f8 5n g8 6n h8 i8 7n j8 k8 8n 9n l8 m8 !n n8 #n o8 $n %n p8 q8 'n r8 s8 (n t8 u8 )n v8 w8 *n x8 +n y8 ,n z8 -n A8 .n B8 /n C8 :n D8 ;n E8 =n F8 ?n G8 @n H8 [n I8 ]n J8 ^n K8 L8 M8 _n N8 O8 P8 `n Q8 R8 S8 {n T8 U8 V8 W8 X8 Y8 Z8 08 |n 18 28 38 48 58 68 78 88 }n 98 !8 #8 $8 %8 '8 (8 )8 ~n *8 +8 ,8 -8 .8 /8 :8 ;8 ao =8 ?8 @8 [8 ]8 ^8 _8 `8 bo {8 |8 }8 ~8 a9 b9 c9 co d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 do s9 t9 u9 v9 w9 x9 y9 z9 A9 B9 C9 D9 E9 F9 G9 eo H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 fo W9 X9 Y9 Z9 09 19 29 39 49 59 69 79 89 99 !9 go #9 $9 %9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 :9 ;9 =9 ho ?9 @9 [9 ]9 ^9 _9 `9 {9 |9 io }9 ~9 a! b! jo c! d! e! f! Vv g! h! i! j! k! ko l! m! lo n! o! mo p! q! no r! s! oo t! u! po v! w! zc Ac x! y! z! A! B! qo C! D! E! F! G! H! ro I! J! K! L! M! N! so O! P! Q! R! S! T! to U! V! W! X! Y! Z! uo 0! 1! 2! 3! 4! 5! vo 6! 7! 8! 9! !! wo uf #! Bc $! xo %! '! ib jb kb (! yo )! *! lb +! ,! -! .! /! :! ;! =! ?! @! [! ]! ^! _! `! Cc {! |! }! ~! a# b# Dc c# d# e# f# g# h# Ec 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# Q# R# S# T# U# V# W# X# Y# Fc zo Z# 0# Ao 1# 2# 3# 4# 5# 6# 7# 8# 9# !# ## Gc Hc Bo $# %# '# (# Ic Jc Kc )# *# +# ,# -# .# /# :# d ;# =# ?# @# [# ]# ^# _# `# {# |# }# Co ~# a$ Do Eo b$ Wv Fo Go Ho Io c$ d$ e$ f$ Jo g$ h$ i$ j$ Hw k$ Lc Mc Ko l$ m$ Lo gw +v ow n$ Nc o$ Mo p$ q$ r$ No Oo s$ t$ ,v pw Oc Pc Qc u$ v$ 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$ !$ #$ $$ %$ '$ ($ )$ *$ +$ ,$ -$ .$ /$ :$ ;$ =$ ?$ Po @$ [$ ]$ ^$ _$ `$ {$ |$ }$ ~$ a% b% c% d% e% f% g% h% i% j% k% l% m% n% o% p% q% r% s% t% u% Iw jf v% Qo w% x% y% Ro z% A% B% C% D% E% F% G% So H% I% J% K% To L% M% Uo N% O% P% Q% R% S% T% U% Vo V% L # M N O P Q $ W% Wo X% Xo Y% Z% 0% 1% 2% Yo 3% 4% 5% 6% 7% 8% 9% !% #% $% Zo Rc Sc 0o %% '% (% )% *% 1o +% ,% -% .% 2o /% {v :% ;% 3o =% 4o ?% 5o mb nb ob R S pb @% 6o [% ]% ^% 7o _% `% {% |% }% 8o ~% 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' 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' !' #' $' %' '' (' )' *' +' ,' -' .' 9o /' :' ;' =' ?' @' [' ]' ^' _' `' {' |' }' ~' a( b( c( d( e( f( g( h( i( j( k( l( m( n( o( p( Tc Uc Vc % Wc Xc ' Yc Zc 0c q( r( !o s( #o t( $o %o u( v( w( x( y( z( A( 'o B( C( D( E( F( G( H( I( J( K( (o L( )o M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( *o 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( +o |( }( ~( a) b) c) 1c 2c 3c / qb 4c d) 5c 6c rb T ,o e) f) -o g) h) .o i) j) /o k) l) :o m) n) ;o o) p) =o q) r) ?o s) t) @o u) v) [o w) x) ]o y) z) ^o A) B) _o C) D) E) F) `o G) H) I) J) {o K) L) M) N) |o O) P) Q) }o R) S) T) ~o U) V) W) ap X) Y) Z) bp 0) 1) 2) cp 3) 4) 5) dp 6) 7) 8) 9) !) #) $) %) ') ep () )) *) fp +) gp ,) -) .) /) :) ;) =) hp ?) @) [) ]) ^) _) `) {) |) ip }) ~) a* jp b* kp c* d* e* lp f* g* h* mp 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* np O* P* Q* R* S* op T* -v U* V* pp W* X* Y* Z* qp 0* 1* rp 2* 3* sp 4* 5* tp 6* 7* 8* 9* !* #* $* %* '* (* )* ** +* ,* -* .* up /* :* ;* =* 7c 8c 9c ?* vf Jw kf Kw lf Lw Cf @* [* ]* ^* _* `* {* |* }* ~* a+ vp b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ m+ n+ o+ p+ q+ r+ s+ t+ u+ v+ w+ x+ y+ wp z+ A+ B+ C+ D+ E+ F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ Q+ R+ S+ T+ U+ V+ W+ xp X+ Y+ Z+ 0+ 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ !+ #+ $+ %+ yp '+ (+ )+ *+ ++ ,+ -+ .+ /+ :+ ;+ =+ ?+ @+ [+ zp ]+ ^+ _+ `+ {+ |+ }+ ~+ a, b, c, d, e, f, Ap g, h, i, Bp j, k, l, Cp m, n, o, Dp p, q, r, Ep Fp s, t, u, v, Gp w, x, y, z, Hp A, B, C, D, Ip E, F, G, H, Jp I, J, K, L, Kp M, N, O, Lp P, Q, R, Mp S, T, U, Np V, W, X, Op Y, Z, 0, Pp 1, 2, Qp 3, 4, 5, Rp Sp 6, 7, Tp Up 8, 9, Vp Wp !, i }e !c #, .v $, /v %, :v ', Xp (, Yp #c Zp $c 0p %c 1p ), *, +, ,, -, ., /, :, ;, =, ?, @, [, ], ^, _, 2p `, 3p {, 4p |, 5p }, 6p 7p ~, 8p a- b- c- d- e- f- 9p g- h- i- !p j- #p $p k- l- %p m- 'p n- (p o- )p p- *p q- +p r- ,p s- -p t- .p u- /p v- w- x- y- :p z- A- B- C- ;p D- E- F- G- =p 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- !- #- $- %- '- (- )- *- +- ,- -- .- ?p /- :- ;- =- ?- @- [- ]- @p ^- _- `- {- |- }- ~- a. [p b. ]p c. ^p d. _p e. bw f. `p g. {p h. |p i. }p j. ~p k. l. aq m. n. bq o. cq p. dq q. eq r. fq s. gq t. hq u. v. w. x. iq y. z. jq A. B. kq C. D. E. lq mq F. G. H. I. J. nq K. oq L. pq M. qq N. rq O. sq P. tq Q. uq R. vq S. wq T. xq U. yq V. zq W. Aq X. Bq Y. Cq Z. Dq Eq 0. 1. Fq 2. Gq 3. Hq 4. Iq 5. Jq Kq Lq 6. 7. Mq Nq 8. Oq 9. !. #. Pq $. %. '. (. ). Qq Rq Sq *. Tq Uq +. Vq Wq ,. Xq -. .. Yq /. :. ;. =. ?. Zq @. [. 0q ]. ^. 1q _. `. 2q 3q {. |. }. ~. 4q a/ b/ c/ d/ 5q e/ f/ g/ h/ 6q i/ j/ k/ l/ 7q m/ n/ o/ p/ q/ 8q r/ s/ 9q t/ u/ !q v/ w/ #q x/ y/ $q z/ A/ %q B/ C/ D/ 'q E/ F/ (q G/ H/ )q I/ J/ *q K/ +q L/ M/ ,q N/ O/ -q P/ Q/ R/ .q S/ T/ /q U/ V/ :q W/ X/ ;q Y/ Z/ =q ?q 0/ 1/ 2/ 3/ 4/ @q 5/ 6/ 7/ 8/ [q 9/ !/ #/ $/ ]q %/ '/ (/ )/ ^q */ +/ ,/ -/ _q ./ // :/ ;/ `q =/ ?/ {q @/ [/ |q ]/ ^/ }q _/ `/ {/ |/ }/ ~q ~/ a: b: c: d: e: ar f: g: h: i: j: br k: l: m: n: o: cr p: q: r: s: t: dr u: v: w: x: y: er z: A: B: fr C: D: E: gr F: G: H: hr I: J: ir K: L: M: N: O: jr P: Q: R: S: T: kr U: V: W: X: Y: lr Z: 0: 1: 2: 3: mr 4: 5: 6: 7: 8: nr 9: !: #: $: %: or ': (: ): *: +: pr ,: -: .: /: :: qr ;: =: ?: @: [: ]: ^: _: `: {: rr |: sr }: tr ~: a; b; ur c; vr d; e; wr f; g; xr yr h; i; zr j; Ar k; Br Cr l; m; Dr n; o; Er p; q; Fr r; s; Gr t; Hr u; Ir v; Jr w; Kr x; Lr y; Mr z; Nr A; Or B; Pr C; Qr D; Rr E; Sr F; Tr G; H; I; Ur J; K; L; Vr M; N; O; Wr P; Q; R; S; T; U; V; W; Xr X; Y; Z; 0; 1; 2; 3; 4; Yr 5; 6; 7; 8; 9; !; #; $; Zr %; '; (; ); *; +; ,; -; 0r .; /; :; ;; =; ?; @; [; 1r ]; ^; _; `; {; |; }; 2r ~; a= b= c= d= e= f= g= h= i= j= k= l= m= n= 3r o= p= q= r= s= t= u= v= w= x= y= z= A= B= C= 4r D= E= F= G= H= I= J= K= L= M= N= O= P= Q= R= 5r S= T= U= V= W= X= Y= Z= 0= 1= 2= 3= 4= 5= 6= 6r 7= 8= 9= != #= $= %= '= (= )= *= += ,= -= .= 7r /= := ;= == ?= @= [= ]= ^= 8r _= `= {= |= 9r }= ~= a? b? Xv c? d? e? f? g? !r h? i? #r j? k? $r l? m? %r n? o? 'r p? q? (r r? s? 'c (c t? u? v? w? x? )r y? z? A? B? C? D? *r E? F? G? H? I? J? +r K? L? M? N? O? P? ,r Q? R? S? T? U? V? -r W? X? Y? Z? 0? 1? .r 2? 3? 4? 5? 6? /r wf 7? )c 8? :r 9? !? sb tb ub #? ;r $? %? vb '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? *c ]? ^? _? `? {? |? +c }? ~? a@ b@ c@ d@ ,c 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@ G@ H@ I@ J@ K@ L@ M@ N@ O@ P@ Q@ R@ S@ T@ U@ -c =r V@ W@ ?r X@ Y@ Z@ 0@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ .c /c @r 8@ 9@ !@ #@ :c ;c =c $@ %@ '@ (@ )@ *@ +@ ,@ e -@ .@ /@ :@ ;@ =@ ?@ @@ [@ ]@ ^@ _@ [r `@ {@ ]r ^r |@ Yv _r `r {r |r }@ ~@ a[ b[ }r c[ d[ e[ f[ Mw g[ ?c @c ~r h[ i[ as hw ;v qw j[ [c k[ bs l[ m[ n[ cs ds o[ p[ =v rw ]c ^c _c 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[ Q[ R[ S[ T[ U[ V[ W[ X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ 9[ ![ #[ $[ %[ '[ ([ )[ *[ +[ ,[ -[ .[ /[ es :[ ;[ =[ ?[ @[ [[ ][ ^[ _[ `[ {[ |[ }[ ~[ a] b] c] d] e] f] g] h] i] j] k] l] m] n] o] p] q] Nw mf r] fs s] t] u] gs v] w] x] y] z] A] B] C] hs D] E] F] G] is H] I] js J] K] L] M] N] O] P] Q] ks R] U ( V W X Y Z ) S] ls T] ms U] V] W] X] Y] ns Z] 0] 1] 2] 3] 4] 5] 6] 7] 8] os `c {c ps 9] !] #] $] %] qs '] (] )] *] rs +] |v ,] -] ss .] ts /] us wb xb yb 0 1 zb :] vs ;] =] ?] ws @] [] ]] ^] _] xs `] {] |] }] ~] 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^ 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^ !^ #^ $^ %^ '^ (^ )^ *^ ys +^ ,^ -^ .^ /^ :^ ;^ =^ ?^ @^ [^ ]^ ^^ _^ `^ {^ |^ }^ ~^ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ |c }c ~c * ad bd + cd dd ed m_ n_ zs o_ As p_ Bs Cs q_ r_ s_ t_ u_ v_ w_ Ds x_ y_ z_ A_ B_ C_ D_ E_ F_ G_ Es H_ Fs I_ J_ K_ L_ M_ N_ O_ P_ Q_ R_ S_ T_ U_ V_ Gs W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ /_ :_ ;_ =_ ?_ @_ [_ ]_ Hs ^_ __ `_ {_ |_ }_ fd gd hd : Ab id ~_ jd kd Bb 2 Is a` b` Js c` d` Ks e` f` Ls g` h` Ms i` j` Ns k` l` Os m` n` Ps o` p` Qs q` r` Rs s` t` Ss u` v` Ts w` x` Us y` z` A` B` Vs C` D` E` F` Ws G` H` I` J` Xs K` L` M` Ys N` O` P` Zs Q` R` S` 0s T` U` V` 1s W` X` Y` 2s Z` 0` 1` 3s 2` 3` 4` 5` 6` 7` 8` 9` !` 4s #` $` %` 5s '` 6s (` )` *` +` ,` -` .` 7s /` :` ;` =` ?` @` [` ]` ^` 8s _` `` {` 9s |` !s }` ~` a{ #s b{ c{ d{ $s 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{ G{ H{ I{ J{ %s K{ L{ M{ N{ O{ 's P{ ?v Q{ R{ (s S{ T{ U{ V{ )s W{ X{ *s Y{ Z{ +s 0{ 1{ ,s 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ -s +{ ,{ -{ .{ ld md nd /{ xf Ow nf Pw of Qw Df :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ .s |{ }{ ~{ a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| s| t| u| /s v| w| x| y| z| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| :s T| U| V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ;s !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =s =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} ?s c} d} e} @s f} g} h} [s i} j} k} ]s l} m} n} ^s _s o} p} q} r} `s s} t} u} v} {s w} x} y} z} |s A} B} C} D} }s E} F} G} H} ~s I} J} K} at L} M} N} bt O} P} Q} ct R} S} T} dt U} V} W} et X} Y} ft Z} 0} 1} gt ht 2} 3} it jt 4} 5} kt lt 6} j ~e od 7} @v 8} [v 9} ]v !} mt #} nt pd ot qd pt rd qt $} %} '} (} )} *} +} ,} -} .} /} :} ;} =} ?} @} rt [} st ]} tt ^} ut _} vt wt `} xt {} |} }} ~} a~ b~ yt c~ d~ e~ zt f~ At Bt g~ h~ Ct i~ Dt j~ Et k~ Ft l~ Gt m~ Ht n~ It o~ Jt p~ Kt q~ Lt r~ s~ t~ u~ Mt v~ w~ x~ y~ Nt z~ A~ B~ C~ Ot 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~ !~ #~ $~ %~ '~ (~ )~ *~ Pt +~ ,~ -~ .~ /~ :~ ;~ =~ Qt ?~ @~ [~ ]~ ^~ _~ `~ {~ Rt |~ St }~ Tt ~~ Ut aabcw babVt cabWt dabXt eabYt fabZt gabhab0t iabjab1t kab2t lab3t mab4t nab5t oab6t pab7t qabrabsabtab8t uabvab9t wabxab!t yabzabAab#t $t BabCabDabEabFab%t Gab't Hab(t Iab)t Jab*t Kab+t Lab,t Mab-t Nab.t Oab/t Pab:t Qab;t Rab=t Sab?t Tab@t Uab[t Vab]t ^t WabXab_t Yab`t Zab{t 0ab|t 1ab}t ~t au 2ab3abbu cu 4abdu 5ab6ab7abeu 8ab9ab!ab#ab$abfu gu hu %abiu ju 'abku lu (abmu )ab*abnu +ab,ab-ab.ab/abou :ab;abpu =ab?abqu @ab[abru su ]ab^ab_ab`abtu {ab|ab}ab~abuu abbbbbcbbdbbvu ebbfbbgbbhbbwu ibbjbbkbblbbmbbxu nbbobbyu pbbqbbzu rbbsbbAu tbbubbBu vbbwbbCu xbbybbzbbDu AbbBbbEu CbbDbbFu EbbFbbGu GbbHu HbbIbbIu JbbKbbJu LbbMbbNbbKu ObbPbbLu QbbRbbMu SbbTbbNu UbbVbbOu Pu WbbXbbYbbZbb0bbQu 1bb2bb3bb4bbRu 5bb6bb7bb8bbSu 9bb!bb#bb$bbTu %bb'bb(bb)bbUu *bb+bb,bb-bbVu .bb/bbWu :bb;bbXu =bb?bbYu @bb[bb]bb^bb_bbZu `bb{bb|bb}bb~bbacb0u bcbccbdcbecbfcb1u gcbhcbicbjcbkcb2u lcbmcbncbocbpcb3u qcbrcbscbtcbucb4u vcbwcbxcb5u ycbzcbAcb6u BcbCcbDcb7u EcbFcb8u GcbHcbIcbJcbKcb9u LcbMcbNcbOcbPcb!u QcbRcbScbTcbUcb#u VcbWcbXcbYcbZcb$u 0cb1cb2cb3cb4cb%u 5cb6cb7cb8cb9cb'u !cb#cb$cb%cb'cb(u (cb)cb*cb+cb,cb)u -cb.cb/cb:cb;cb=cb?cb@cb[cb]cb*u ^cb+u _cb,u `cb{cb|cb-u }cb.u ~cbadb/u bdbcdb:u ;u ddbedb=u fdb?u gdb@u [u hdbidb]u jdbkdb^u ldbmdb_u ndbodb`u pdb{u qdb|u rdb}u sdb~u tdbav udbbv vdbcv wdbdv xdbev ydbfv zdbgv Adbhv Bdbiv CdbDdbEdbjv FdbGdbHdbkv IdbJdbKdblv LdbMdbNdbOdbPdbQdbRdbSdbmv TdbUdbVdbWdbXdbYdbZdb0dbnv 1db2db3db4db5db6db7db8dbov 9db!db#db$db%db'db(db)dbpv *db+db,db-db.db/db:db;dbqv =db?db@db[db]db^db_dbrv `db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebsv keblebmebneboebpebqebrebsebtebuebvebwebxebyebtv zebAebBebCebDebEebFebGebHebIebJebKebLebMebNebuv OebPebQebRebSebTebUebVebWebXebYebZeb0eb1eb2ebvv 3eb4eb5eb6eb7eb8eb9eb!eb#eb$eb%eb'eb(eb)eb*ebwv +eb,eb-eb.eb/eb:eb;eb=eb?ebxv @eb[eb]eb^ebyv _eb`eb{eb|ebZv }eb~ebafbbfbcfbzv dfbefbAv ffbgfbBv hfbifbCv jfbkfbDv lfbmfbEv nfbofbsd td pfbqfbrfbsfbtfbFv ufbvfbwfbxfbyfbzfbGv AfbBfbCfbDfbEfbFfbHv GfbHfbIfbJfbKfbLfbIv MfbNfbOfbPfbQfbRfbJv SfbTfbUfbVfbWfbXfbKv YfbZfb0fb1fb2fbLv yf 3fbud 4fbMv 5fb6fbCb Db Eb 7fbNv 8fb9fbFb !fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fbvd =fb?fb@fb[fb]fb^fbwd _fb`fb{fb|fb}fb~fbxd agbbgbcgbdgbegbfgbggbhgbigbjgbkgblgbmgbngbogbpgbqgbrgbsgbtgbugbvgbwgbxgbygbzgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbPgbQgbyd Ov RgbSgbPv TgbUgbVgbWgbXgbYgbZgb0gb1gb2gb3gbzd Ad Qv 4gb5gb6gb7gbBd Cd Dd 8gb9gb!gb#gb$gb%gb'gb(gb
1054 scope["root_path"] = self.root_path 2twafuwbfvwcfwwzfywdfzwefAwffBwAfDwgfEwhfFwifGwBfIwjfJwkfKwlfLwCfNwmfOwnfPwofQwDf
1055 await super().__call__(scope, receive, send) 3a Rw Sw Tw Uw Vw Ww Xw Yw Zw 0w 1w 2w Ef 3w 4w Ff Gf 5w Rv Hf If Jf Kf 6w 7w 8w 9w Lf !w #w $w %w sw 'w Gb Hb Mf (w )w Nf dw 0v iw *w Ib +w Of ,w -w .w Pf Qf /w :w 1v jw Jb Kb Lb ;w =w ?w @w [w ]w ^w _w `w {w |w }w ~w ax bx cx dx ex fx gx hx ix jx kx lx mx nx ox px qx rx sx tx ux vx wx xx yx zx Ax Bx Cx Dx Ex Fx Gx Hx Ix Jx Kx Lx Mx Nx Ox Px Qx Rx Sx Tx Rf Ux Vx Wx Xx Yx Zx 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x !x #x $x %x 'x (x )x *x +x ,x -x .x /x :x ;x tw af =x Sf ?x @x [x Tf ]x ^x _x `x {x |x }x ~x Uf ay by cy dy Vf ey fy Wf gy hy iy jy ky ly my ny Xf oy k 3 l m n o p 4 py Yf qy Zf ry sy ty uy vy 0f wy xy yy zy Ay By Cy Dy Ey Fy 1f Mb Nb 2f Gy Hy Iy Jy Ky 3f Ly My Ny Oy 4f Py ^v Qy Ry 5f Sy 6f Ty 7f ; = ? q r @ Uy 8f Vy Wy Xy 9f Yy Zy 0y 1y 2y !f 3y 4y 5y 6y 7y 8y 9y !y #y $y %y 'y (y )y *y +y ,y -y .y /y :y ;y =y ?y @y [y ]y ^y _y `y {y |y }y ~y az bz cz dz ez fz gz hz iz jz kz lz mz nz oz pz qz rz sz tz uz vz wz xz yz zz Az Bz Cz Dz Ez Fz Gz Hz Iz Jz Kz Lz Mz Nz Oz #f Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz 0z 1z 2z 3z 4z 5z 6z 7z 8z 9z !z #z $z %z 'z (z )z *z +z ,z Ob Pb -z .z $f /z %f :z 'f (f ;z =z ?z @z [z ]z ^z )f _z `z {z |z }z ~z aA bA cA dA *f eA +f fA gA hA iA jA kA lA mA nA oA pA qA rA sA ,f tA uA vA wA xA yA zA AA BA CA DA EA FA GA HA IA JA KA LA MA NA OA PA QA RA SA TA UA VA WA XA YA ZA 0A -f 1A 2A 3A 4A 5A 6A Qb Rb Sb , [ Tb 7A Ub Vb ] s .f 8A 9A /f !A #A :f $A %A ;f 'A (A =f )A *A ?f +A ,A @f -A .A [f /A :A ]f ;A =A ^f ?A @A _f [A ]A `f ^A _A {f `A {A |A }A |f ~A aB bB cB }f dB eB fB gB ~f hB iB jB ag kB lB mB bg nB oB pB cg qB rB sB dg tB uB vB eg wB xB yB fg zB AB BB CB DB EB FB GB HB gg IB JB KB hg LB ig MB NB OB PB QB RB SB jg TB UB VB WB XB YB ZB 0B 1B kg 2B 3B 4B lg 5B mg 6B 7B 8B ng 9B !B #B og $B %B 'B (B )B *B +B ,B -B .B /B :B ;B =B ?B @B [B ]B ^B _B `B {B |B }B ~B aC bC cC dC eC fC gC pg hC iC jC kC lC qg mC 2v nC oC rg pC qC rC sC sg tC uC tg vC wC ug xC yC vg zC AC BC CC DC EC FC GC HC IC wg JC KC LC MC NC pf uw bf vw cf ww zf OC PC QC RC SC TC UC VC WC XC YC xg ZC 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C !C #C $C %C 'C (C )C *C +C ,C -C .C /C yg :C ;C =C ?C @C [C ]C ^C _C `C {C |C }C ~C aD bD cD zg dD eD fD gD hD iD jD kD lD mD nD oD pD qD Ag rD sD tD Bg Cg uD vD wD xD Dg yD zD AD BD Eg CD DD ED Fg FD GD HD Gg ID JD KD Hg Ig LD f `e Wb MD 3v ND 4v OD 5v PD Jg QD Kg RD SD TD UD VD WD XD YD ZD 0D 1D 2D 3D 4D 5D 6D Lg 7D Mg 8D Ng 9D Og !D Pg Qg #D Rg $D %D 'D (D )D *D Sg +D ,D -D Tg .D Ug Vg /D :D Wg ;D Xg =D Yg ?D Zg @D [D ]D ^D 0g _D `D {D |D 1g }D ~D aE bE cE dE eE fE gE hE iE jE kE lE mE nE oE pE qE rE sE tE uE vE wE xE yE zE AE BE 2g CE DE EE FE GE HE IE JE 3g KE 4g LE 5g ME 6g NE }v OE 7g PE 8g QE RE 9g SE !g TE #g UE $g VE %g WE XE YE ZE 'g 0E 1E (g 2E 3E )g 4E 5E 6E *g +g 7E 8E 9E !E #E ,g $E -g %E .g 'E /g (E :g )E ;g *E =g +E ?g ,E @g [g -E .E ]g /E ^g :E _g ;E `g =E {g |g }g ?E @E ~g ah [E bh ]E ^E _E ch `E {E |E }E ~E dh eh fh aF gh bF cF hh dF eF fF gF hF ih iF jF jh kF lF kh lh mF nF oF pF mh qF rF sF tF uF nh vF wF oh xF yF zF ph AF BF qh CF rh DF EF sh FF GF HF th IF JF uh vh KF LF MF NF OF wh PF QF RF SF xh TF UF VF WF yh XF YF zh ZF 0F Ah 1F 2F 3F 4F 5F 6F Bh 7F 8F 9F !F #F Ch $F %F 'F (F )F Dh *F +F ,F Eh -F .F Fh /F :F ;F =F ?F Gh @F [F ]F ^F _F Hh `F {F |F }F ~F Ih aG bG cG dG eG Jh fG gG hG iG jG Kh kG lG mG nG oG pG qG rG sG tG Lh uG Mh vG wG xG Nh yG Oh zG AG Ph BG Qh Rh CG DG Sh EG FG Th GG Uh HG Vh IG Wh JG Xh KG Yh LG MG NG Zh OG PG QG 0h RG SG TG UG VG WG XG YG 1h ZG 0G 1G 2G 3G 4G 5G 6G 2h 7G 8G 9G !G #G $G %G 3h 'G (G )G *G +G ,G -G .G /G :G ;G =G ?G @G [G 4h ]G ^G _G `G {G |G }G ~G aH 5h bH cH dH eH 6h fH gH hH iH jH 7h kH lH 8h mH nH Xb Yb oH pH qH rH sH 9h tH uH vH wH xH yH !h zH AH BH #h qf CH Zb DH $h EH FH GH %h HH IH ^ JH KH LH MH NH OH PH QH RH SH TH UH VH WH XH YH ZH 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H !H #H $H %H 'H 'h (H )H (h *H +H ,H -H .H /H :H ;H =H ?H @H 0b 1b )h [H ]H ^H _H 2b 3b 4b `H {H |H }H ~H aI bI cI b dI eI fI gI hI iI jI kI lI mI nI oI *h pI qI +h ,h rI Sv -h .h /h :h sI tI uI vI ;h wI xI yI zI xw AI 5b 6b =h BI CI ?h ew 6v kw DI 7b EI @h FI GI HI [h ]h II JI 7v lw 8b 9b !b KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI 0I 1I 2I 3I 4I 5I 6I 7I 8I 9I !I #I $I %I 'I (I )I *I +I ,I -I .I /I :I ;I =I ?I @I [I ]I ^I _I `I {I |I }I ~I aJ bJ cJ dJ eJ fJ ^h gJ hJ iJ jJ kJ lJ mJ nJ oJ pJ qJ rJ sJ tJ uJ vJ wJ xJ yJ zJ AJ BJ CJ DJ EJ FJ GJ HJ IJ JJ KJ yw df LJ _h MJ NJ OJ `h PJ QJ RJ SJ TJ UJ VJ WJ {h XJ YJ ZJ 0J |h 1J 2J }h 3J 4J 5J 6J 7J 8J 9J !J ~h #J t 5 u v w x y 6 $J ai %J bi 'J (J )J *J +J ci ,J -J .J /J :J ;J =J ?J @J [J di #b $b ei ]J ^J _J `J {J fi |J }J ~J aK gi bK _v cK dK hi eK ii fK ji _ ` { z A | gK ki hK iK jK li kK lK mK nK oK mi pK qK rK sK tK uK vK wK xK yK zK AK BK CK DK EK FK GK HK IK JK KK LK MK NK OK PK QK RK SK TK UK VK WK XK YK ZK 0K 1K 2K 3K 4K 5K 6K 7K 8K 9K !K #K $K %K 'K (K )K *K +K ,K -K .K /K :K ;K =K ?K @K [K ]K ^K _K `K {K |K }K ~K aL ni bL cL dL eL fL gL hL iL jL kL lL mL nL oL pL qL rL sL tL uL vL wL xL yL zL AL BL CL DL EL FL %b 'b GL HL oi IL pi JL qi ri KL LL ML NL OL PL QL si RL SL TL UL VL WL XL YL ZL 0L ti 1L ui 2L 3L 4L 5L 6L 7L 8L 9L !L #L $L %L 'L (L vi )L *L +L ,L -L .L /L :L ;L =L ?L @L [L ]L ^L _L `L {L |L }L ~L aM bM cM dM eM fM gM hM iM jM kM lM mM wi nM oM pM qM rM sM (b )b *b - } +b tM ,b -b ~ B xi uM vM yi wM xM zi yM zM Ai AM BM Bi CM DM Ci EM FM Di GM HM Ei IM JM Fi KM LM Gi MM NM Hi OM PM Ii QM RM Ji SM TM UM VM Ki WM XM YM ZM Li 0M 1M 2M 3M Mi 4M 5M 6M Ni 7M 8M 9M Oi !M #M $M Pi %M 'M (M Qi )M *M +M Ri ,M -M .M Si /M :M ;M =M ?M @M [M ]M ^M Ti _M `M {M Ui |M Vi }M ~M aN bN cN dN eN Wi fN gN hN iN jN kN lN mN nN Xi oN pN qN Yi rN Zi sN tN uN 0i vN wN xN 1i yN zN AN BN CN DN EN FN GN HN IN JN KN LN MN NN ON PN QN RN SN TN UN VN WN XN YN ZN 0N 1N 2N 3N 2i 4N 5N 6N 7N 8N 3i 9N 8v !N #N 4i $N %N 'N (N 5i )N *N 6i +N ,N 7i -N .N 8i /N :N ;N =N ?N @N [N ]N ^N _N `N {N 9i |N }N ~N aO .b bO rf zw ef Aw ff Bw Af cO dO eO fO gO hO iO jO kO lO mO !i nO oO pO qO rO sO tO uO vO wO xO yO zO AO BO CO DO EO FO GO HO IO JO KO #i LO MO NO OO PO QO RO SO TO UO VO WO XO YO ZO 0O 1O 2O 3O 4O 5O 6O 7O 8O $i 9O !O #O $O %O 'O (O )O *O +O ,O -O .O /O :O ;O =O %i ?O @O [O ]O ^O _O `O {O |O }O ~O aP bP cP 'i dP eP fP (i gP hP iP )i *i jP kP lP mP +i nP oP pP qP ,i rP sP tP uP -i vP wP xP .i yP zP AP /i BP CP DP :i EP FP ;i GP HP IP =i ?i JP KP @i [i LP g {e /b MP 9v NP !v OP #v PP ]i QP ^i :b _i RP SP TP UP VP WP XP YP ZP 0P 1P 2P 3P 4P 5P 6P `i 7P {i 8P |i 9P }i !P ~i aj #P bj $P %P 'P (P )P *P cj +P ,P -P dj .P ej fj /P :P gj ;P hj =P ij ?P jj @P kj [P lj ]P ^P _P `P mj {P |P }P ~P nj aQ bQ cQ dQ oj eQ fQ gQ hQ iQ jQ kQ lQ mQ nQ oQ pQ qQ rQ sQ tQ uQ vQ wQ xQ yQ zQ AQ BQ CQ DQ EQ FQ GQ HQ IQ JQ KQ LQ MQ NQ OQ PQ QQ RQ SQ pj TQ UQ VQ WQ XQ YQ ZQ 0Q qj 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q rj 9Q sj !Q tj #Q uj $Q ~v %Q vj 'Q wj (Q xj )Q *Q yj +Q zj ,Q Aj -Q Bj .Q Cj /Q Dj :Q Ej ;Q =Q ?Q @Q Fj [Q ]Q Gj ^Q _Q Hj `Q {Q |Q Ij Jj }Q ~Q aR bR cR Kj dR Lj eR Mj fR Nj gR Oj hR Pj iR Qj jR Rj kR Sj lR Tj mR Uj Vj nR oR Wj pR Xj qR Yj rR Zj sR 0j 1j 2j tR uR 3j 4j vR 5j wR xR yR 6j zR AR BR CR DR 7j 8j 9j ER !j #j FR $j GR HR %j IR JR KR LR MR 'j NR OR (j PR QR )j *j RR SR TR UR +j VR WR XR YR ,j ZR 0R 1R 2R 3R -j 4R 5R .j 6R 7R /j 8R 9R :j !R #R $R ;j %R 'R =j (R )R ?j *R +R @j ,R [j -R .R ]j /R :R ^j ;R =R ?R _j @R [R `j {j ]R ^R _R `R {R |j |R }R ~R aS }j bS cS dS eS ~j fS gS hS iS ak jS kS bk lS mS ck nS oS dk pS qS rS sS tS ek uS vS wS xS yS zS fk AS BS CS DS ES gk FS GS HS IS JS hk KS LS MS NS OS ik PS QS RS SS TS jk US VS WS kk XS YS ZS lk 0S 1S 2S mk 3S 4S nk 5S 6S 7S 8S 9S ok !S #S $S %S 'S pk (S )S *S +S ,S qk -S .S /S :S ;S rk =S ?S @S [S ]S sk ^S _S `S {S |S tk }S ~S aT bT cT uk dT eT fT gT hT vk iT jT kT lT mT nT oT pT qT rT wk sT xk tT uT vT yk wT zk xT yT Ak zT Bk AT Ck Dk BT CT Ek DT ET Fk FT Gk GT Hk HT Ik IT Jk JT Kk KT Lk LT Mk MT NT OT Nk PT QT RT Ok ST TT UT Pk VT WT XT YT ZT 0T 1T 2T Qk 3T 4T 5T 6T 7T 8T 9T !T Rk #T $T %T 'T (T )T *T +T Sk ,T -T .T /T :T ;T =T Tk ?T @T [T ]T ^T _T `T {T |T }T ~T aU bU cU dU Uk eU fU gU hU iU jU kU lU mU nU oU pU qU rU sU Vk tU uU vU wU xU yU zU AU BU CU DU EU FU GU HU Wk IU JU KU LU MU NU OU PU QU Xk RU SU TU UU Yk VU WU XU YU Tv ZU 0U 1U 2U 3U Zk 4U 5U 0k 6U 7U 1k 8U 9U 2k !U #U ;b =b $U %U 'U (U )U 3k *U +U ,U -U .U /U 4k :U ;U =U ?U @U [U 5k ]U ^U _U `U {U |U 6k }U ~U aV bV 7k sf cV ?b dV 8k eV fV ab gV 9k hV iV bb jV kV lV mV nV oV pV qV rV sV tV uV vV wV xV @b yV zV AV BV CV DV EV FV GV HV IV JV KV LV MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V !k 3V 4V #k 5V 6V 7V 8V 9V !V #V $V %V 'V (V [b ]b $k )V *V +V ,V ^b _b `b -V .V /V :V ;V =V ?V @V c [V ]V ^V _V `V {V |V }V ~V aW bW cW %k dW eW 'k (k fW Uv )k *k +k ,k gW hW iW jW -k kW lW mW nW Cw oW {b |b .k pW qW /k fw $v mw rW }b sW :k tW uW vW ;k =k wW xW %v nw ~b ac bc yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W )W *W +W ,W -W .W /W :W ;W =W ?W @W [W ]W ^W ?k _W `W {W |W }W ~W aX bX cX dX eX fX gX hX iX jX kX lX mX nX oX pX qX rX sX tX uX vX wX xX yX Dw gf zX @k AX BX CX [k DX EX FX GX HX IX JX KX ]k LX MX NX OX ^k PX QX _k RX SX TX UX VX WX XX YX `k ZX C 7 D E F G H 8 0X {k 1X |k 2X 3X 4X 5X 6X }k 7X 8X 9X !X #X $X %X 'X (X )X ~k cc dc al *X +X ,X -X .X bl /X :X ;X =X cl ?X `v @X [X dl ]X el ^X fl cb db eb I J fb _X gl `X {X |X hl }X ~X aY bY cY il dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY BY CY DY EY FY GY HY IY JY KY LY MY NY OY PY QY RY SY TY UY VY WY XY YY ZY 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y -Y .Y /Y :Y ;Y =Y jl ?Y @Y [Y ]Y ^Y _Y `Y {Y |Y }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ ec fc gc 9 hc ic ! jc kc lc uZ vZ kl wZ ll xZ ml nl yZ zZ AZ BZ CZ DZ EZ ol FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ pl PZ ql QZ RZ SZ TZ UZ VZ WZ XZ YZ ZZ 0Z 1Z 2Z 3Z rl 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 sl b0 c0 d0 e0 f0 g0 mc nc oc . gb pc h0 qc rc hb K tl i0 j0 ul k0 l0 vl m0 n0 wl o0 p0 xl q0 r0 yl s0 t0 zl u0 v0 Al w0 x0 Bl y0 z0 Cl A0 B0 Dl C0 D0 El E0 F0 Fl G0 H0 I0 J0 Gl K0 L0 M0 N0 Hl O0 P0 Q0 R0 Il S0 T0 U0 Jl V0 W0 X0 Kl Y0 Z0 00 Ll 10 20 30 Ml 40 50 60 Nl 70 80 90 Ol !0 #0 $0 %0 '0 (0 )0 *0 +0 Pl ,0 -0 .0 Ql /0 Rl :0 ;0 =0 ?0 @0 [0 ]0 Sl ^0 _0 `0 {0 |0 }0 ~0 a1 b1 Tl c1 d1 e1 Ul f1 Vl g1 h1 i1 Wl j1 k1 l1 Xl m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 Yl S1 T1 U1 V1 W1 Zl X1 'v Y1 Z1 0l 01 11 21 31 1l 41 51 2l 61 71 3l 81 91 4l !1 #1 $1 %1 '1 (1 )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 5l ?1 @1 [1 ]1 sc tc uc ^1 tf Ew hf Fw if Gw Bf _1 `1 {1 |1 }1 ~1 a2 b2 c2 d2 e2 6l f2 g2 h2 i2 j2 k2 l2 m2 n2 o2 p2 q2 r2 s2 t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 7l D2 E2 F2 G2 H2 I2 J2 K2 L2 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 Z2 02 8l 12 22 32 42 52 62 72 82 92 !2 #2 $2 %2 '2 (2 )2 *2 9l +2 ,2 -2 .2 /2 :2 ;2 =2 ?2 @2 [2 ]2 ^2 _2 `2 !l {2 |2 }2 ~2 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 #l k3 l3 m3 $l n3 o3 p3 %l q3 r3 s3 'l t3 u3 v3 (l )l w3 x3 y3 z3 *l A3 B3 C3 D3 +l E3 F3 G3 H3 ,l I3 J3 K3 L3 -l M3 N3 O3 P3 .l Q3 R3 S3 /l T3 U3 V3 :l W3 X3 Y3 ;l Z3 03 13 =l 23 33 43 ?l 53 63 @l 73 83 93 [l ]l !3 #3 ^l _l $3 %3 `l {l '3 h |e vc (3 (v )3 )v *3 *v +3 |l ,3 }l wc ~l xc am yc bm -3 .3 /3 :3 ;3 =3 ?3 @3 [3 ]3 ^3 _3 `3 {3 |3 }3 cm ~3 dm a4 em b4 fm c4 gm hm d4 im e4 f4 g4 h4 i4 j4 jm k4 l4 m4 km n4 lm mm o4 p4 nm q4 om r4 pm s4 qm t4 rm u4 sm v4 tm w4 um x4 vm y4 wm z4 A4 B4 C4 xm D4 E4 F4 G4 ym H4 I4 J4 K4 zm L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 04 14 24 34 44 54 64 74 84 94 !4 #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 ;4 =4 Am ?4 @4 [4 ]4 ^4 _4 `4 {4 Bm |4 }4 ~4 a5 b5 c5 d5 e5 Cm f5 Dm g5 Em h5 Fm i5 aw j5 Gm k5 Hm l5 Im m5 Jm n5 Km o5 p5 Lm q5 r5 Mm s5 Nm t5 Om u5 Pm v5 Qm w5 Rm x5 Sm y5 z5 A5 B5 Tm C5 D5 Um E5 F5 Vm G5 H5 I5 Wm Xm J5 K5 L5 M5 N5 Ym O5 Zm P5 0m Q5 1m R5 2m S5 3m T5 4m U5 5m V5 6m W5 7m X5 8m Y5 9m Z5 !m 05 #m 15 $m 25 %m 35 'm (m 45 55 )m 65 *m 75 +m 85 ,m 95 -m .m /m !5 #5 :m ;m $5 =m %5 '5 (5 ?m )5 *5 +5 ,5 -5 @m [m ]m .5 ^m _m /5 `m {m :5 |m ;5 =5 }m ?5 @5 [5 ]5 ^5 ~m _5 `5 an {5 |5 bn }5 ~5 cn dn a6 b6 c6 d6 en e6 f6 g6 h6 fn i6 j6 k6 l6 gn m6 n6 o6 p6 hn q6 r6 s6 t6 u6 in v6 w6 jn x6 y6 kn z6 A6 ln B6 C6 mn D6 E6 nn F6 G6 H6 on I6 J6 pn K6 L6 qn M6 N6 rn O6 sn P6 Q6 tn R6 S6 un T6 U6 V6 vn W6 X6 wn Y6 Z6 xn 06 16 yn 26 36 zn An 46 56 66 76 86 Bn 96 !6 #6 $6 Cn %6 '6 (6 )6 Dn *6 +6 ,6 -6 En .6 /6 :6 ;6 Fn =6 ?6 @6 [6 Gn ]6 ^6 Hn _6 `6 In {6 |6 Jn }6 ~6 a7 b7 c7 Kn d7 e7 f7 g7 h7 i7 Ln j7 k7 l7 m7 n7 Mn o7 p7 q7 r7 s7 Nn t7 u7 v7 w7 x7 On y7 z7 A7 B7 C7 Pn D7 E7 F7 Qn G7 H7 I7 Rn J7 K7 L7 Sn M7 N7 Tn O7 P7 Q7 R7 S7 Un T7 U7 V7 W7 X7 Vn Y7 Z7 07 17 27 Wn 37 47 57 67 77 Xn 87 97 !7 #7 $7 Yn %7 '7 (7 )7 *7 Zn +7 ,7 -7 .7 /7 0n :7 ;7 =7 ?7 @7 1n [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 2n b8 3n c8 4n d8 e8 f8 5n g8 6n h8 i8 7n j8 k8 8n 9n l8 m8 !n n8 #n o8 $n %n p8 q8 'n r8 s8 (n t8 u8 )n v8 w8 *n x8 +n y8 ,n z8 -n A8 .n B8 /n C8 :n D8 ;n E8 =n F8 ?n G8 @n H8 [n I8 ]n J8 ^n K8 L8 M8 _n N8 O8 P8 `n Q8 R8 S8 {n T8 U8 V8 W8 X8 Y8 Z8 08 |n 18 28 38 48 58 68 78 88 }n 98 !8 #8 $8 %8 '8 (8 )8 ~n *8 +8 ,8 -8 .8 /8 :8 ;8 ao =8 ?8 @8 [8 ]8 ^8 _8 `8 bo {8 |8 }8 ~8 a9 b9 c9 co d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 do s9 t9 u9 v9 w9 x9 y9 z9 A9 B9 C9 D9 E9 F9 G9 eo H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 fo W9 X9 Y9 Z9 09 19 29 39 49 59 69 79 89 99 !9 go #9 $9 %9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 :9 ;9 =9 ho ?9 @9 [9 ]9 ^9 _9 `9 {9 |9 io }9 ~9 a! b! jo c! d! e! f! Vv g! h! i! j! k! ko l! m! lo n! o! mo p! q! no r! s! oo t! u! po v! w! zc Ac x! y! z! A! B! qo C! D! E! F! G! H! ro I! J! K! L! M! N! so O! P! Q! R! S! T! to U! V! W! X! Y! Z! uo 0! 1! 2! 3! 4! 5! vo 6! 7! 8! 9! !! wo uf #! Bc $! xo %! '! ib jb kb (! yo )! *! lb +! ,! -! .! /! :! ;! =! ?! @! [! ]! ^! _! `! Cc {! |! }! ~! a# b# Dc c# d# e# f# g# h# Ec 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# Q# R# S# T# U# V# W# X# Y# Fc zo Z# 0# Ao 1# 2# 3# 4# 5# 6# 7# 8# 9# !# ## Gc Hc Bo $# %# '# (# Ic Jc Kc )# *# +# ,# -# .# /# :# d ;# =# ?# @# [# ]# ^# _# `# {# |# }# Co ~# a$ Do Eo b$ Wv Fo Go Ho Io c$ d$ e$ f$ Jo g$ h$ i$ j$ Hw k$ Lc Mc Ko l$ m$ Lo gw +v ow n$ Nc o$ Mo p$ q$ r$ No Oo s$ t$ ,v pw Oc Pc Qc u$ v$ 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$ !$ #$ $$ %$ '$ ($ )$ *$ +$ ,$ -$ .$ /$ :$ ;$ =$ ?$ Po @$ [$ ]$ ^$ _$ `$ {$ |$ }$ ~$ a% b% c% d% e% f% g% h% i% j% k% l% m% n% o% p% q% r% s% t% u% Iw jf v% Qo w% x% y% Ro z% A% B% C% D% E% F% G% So H% I% J% K% To L% M% Uo N% O% P% Q% R% S% T% U% Vo V% L # M N O P Q $ W% Wo X% Xo Y% Z% 0% 1% 2% Yo 3% 4% 5% 6% 7% 8% 9% !% #% $% Zo Rc Sc 0o %% '% (% )% *% 1o +% ,% -% .% 2o /% {v :% ;% 3o =% 4o ?% 5o mb nb ob R S pb @% 6o [% ]% ^% 7o _% `% {% |% }% 8o ~% 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' 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' !' #' $' %' '' (' )' *' +' ,' -' .' 9o /' :' ;' =' ?' @' [' ]' ^' _' `' {' |' }' ~' a( b( c( d( e( f( g( h( i( j( k( l( m( n( o( p( Tc Uc Vc % Wc Xc ' Yc Zc 0c q( r( !o s( #o t( $o %o u( v( w( x( y( z( A( 'o B( C( D( E( F( G( H( I( J( K( (o L( )o M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( *o 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( +o |( }( ~( a) b) c) 1c 2c 3c / qb 4c d) 5c 6c rb T ,o e) f) -o g) h) .o i) j) /o k) l) :o m) n) ;o o) p) =o q) r) ?o s) t) @o u) v) [o w) x) ]o y) z) ^o A) B) _o C) D) E) F) `o G) H) I) J) {o K) L) M) N) |o O) P) Q) }o R) S) T) ~o U) V) W) ap X) Y) Z) bp 0) 1) 2) cp 3) 4) 5) dp 6) 7) 8) 9) !) #) $) %) ') ep () )) *) fp +) gp ,) -) .) /) :) ;) =) hp ?) @) [) ]) ^) _) `) {) |) ip }) ~) a* jp b* kp c* d* e* lp f* g* h* mp 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* np O* P* Q* R* S* op T* -v U* V* pp W* X* Y* Z* qp 0* 1* rp 2* 3* sp 4* 5* tp 6* 7* 8* 9* !* #* $* %* '* (* )* ** +* ,* -* .* up /* :* ;* =* 7c 8c 9c ?* vf Jw kf Kw lf Lw Cf @* [* ]* ^* _* `* {* |* }* ~* a+ vp b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ m+ n+ o+ p+ q+ r+ s+ t+ u+ v+ w+ x+ y+ wp z+ A+ B+ C+ D+ E+ F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ Q+ R+ S+ T+ U+ V+ W+ xp X+ Y+ Z+ 0+ 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ !+ #+ $+ %+ yp '+ (+ )+ *+ ++ ,+ -+ .+ /+ :+ ;+ =+ ?+ @+ [+ zp ]+ ^+ _+ `+ {+ |+ }+ ~+ a, b, c, d, e, f, Ap g, h, i, Bp j, k, l, Cp m, n, o, Dp p, q, r, Ep Fp s, t, u, v, Gp w, x, y, z, Hp A, B, C, D, Ip E, F, G, H, Jp I, J, K, L, Kp M, N, O, Lp P, Q, R, Mp S, T, U, Np V, W, X, Op Y, Z, 0, Pp 1, 2, Qp 3, 4, 5, Rp Sp 6, 7, Tp Up 8, 9, Vp Wp !, i }e !c #, .v $, /v %, :v ', Xp (, Yp #c Zp $c 0p %c 1p ), *, +, ,, -, ., /, :, ;, =, ?, @, [, ], ^, _, 2p `, 3p {, 4p |, 5p }, 6p 7p ~, 8p a- b- c- d- e- f- 9p g- h- i- !p j- #p $p k- l- %p m- 'p n- (p o- )p p- *p q- +p r- ,p s- -p t- .p u- /p v- w- x- y- :p z- A- B- C- ;p D- E- F- G- =p 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- !- #- $- %- '- (- )- *- +- ,- -- .- ?p /- :- ;- =- ?- @- [- ]- @p ^- _- `- {- |- }- ~- a. [p b. ]p c. ^p d. _p e. bw f. `p g. {p h. |p i. }p j. ~p k. l. aq m. n. bq o. cq p. dq q. eq r. fq s. gq t. hq u. v. w. x. iq y. z. jq A. B. kq C. D. E. lq mq F. G. H. I. J. nq K. oq L. pq M. qq N. rq O. sq P. tq Q. uq R. vq S. wq T. xq U. yq V. zq W. Aq X. Bq Y. Cq Z. Dq Eq 0. 1. Fq 2. Gq 3. Hq 4. Iq 5. Jq Kq Lq 6. 7. Mq Nq 8. Oq 9. !. #. Pq $. %. '. (. ). Qq Rq Sq *. Tq Uq +. Vq Wq ,. Xq -. .. Yq /. :. ;. =. ?. Zq @. [. 0q ]. ^. 1q _. `. 2q 3q {. |. }. ~. 4q a/ b/ c/ d/ 5q e/ f/ g/ h/ 6q i/ j/ k/ l/ 7q m/ n/ o/ p/ q/ 8q r/ s/ 9q t/ u/ !q v/ w/ #q x/ y/ $q z/ A/ %q B/ C/ D/ 'q E/ F/ (q G/ H/ )q I/ J/ *q K/ +q L/ M/ ,q N/ O/ -q P/ Q/ R/ .q S/ T/ /q U/ V/ :q W/ X/ ;q Y/ Z/ =q ?q 0/ 1/ 2/ 3/ 4/ @q 5/ 6/ 7/ 8/ [q 9/ !/ #/ $/ ]q %/ '/ (/ )/ ^q */ +/ ,/ -/ _q ./ // :/ ;/ `q =/ ?/ {q @/ [/ |q ]/ ^/ }q _/ `/ {/ |/ }/ ~q ~/ a: b: c: d: e: ar f: g: h: i: j: br k: l: m: n: o: cr p: q: r: s: t: dr u: v: w: x: y: er z: A: B: fr C: D: E: gr F: G: H: hr I: J: ir K: L: M: N: O: jr P: Q: R: S: T: kr U: V: W: X: Y: lr Z: 0: 1: 2: 3: mr 4: 5: 6: 7: 8: nr 9: !: #: $: %: or ': (: ): *: +: pr ,: -: .: /: :: qr ;: =: ?: @: [: ]: ^: _: `: {: rr |: sr }: tr ~: a; b; ur c; vr d; e; wr f; g; xr yr h; i; zr j; Ar k; Br Cr l; m; Dr n; o; Er p; q; Fr r; s; Gr t; Hr u; Ir v; Jr w; Kr x; Lr y; Mr z; Nr A; Or B; Pr C; Qr D; Rr E; Sr F; Tr G; H; I; Ur J; K; L; Vr M; N; O; Wr P; Q; R; S; T; U; V; W; Xr X; Y; Z; 0; 1; 2; 3; 4; Yr 5; 6; 7; 8; 9; !; #; $; Zr %; '; (; ); *; +; ,; -; 0r .; /; :; ;; =; ?; @; [; 1r ]; ^; _; `; {; |; }; 2r ~; a= b= c= d= e= f= g= h= i= j= k= l= m= n= 3r o= p= q= r= s= t= u= v= w= x= y= z= A= B= C= 4r D= E= F= G= H= I= J= K= L= M= N= O= P= Q= R= 5r S= T= U= V= W= X= Y= Z= 0= 1= 2= 3= 4= 5= 6= 6r 7= 8= 9= != #= $= %= '= (= )= *= += ,= -= .= 7r /= := ;= == ?= @= [= ]= ^= 8r _= `= {= |= 9r }= ~= a? b? Xv c? d? e? f? g? !r h? i? #r j? k? $r l? m? %r n? o? 'r p? q? (r r? s? 'c (c t? u? v? w? x? )r y? z? A? B? C? D? *r E? F? G? H? I? J? +r K? L? M? N? O? P? ,r Q? R? S? T? U? V? -r W? X? Y? Z? 0? 1? .r 2? 3? 4? 5? 6? /r wf 7? )c 8? :r 9? !? sb tb ub #? ;r $? %? vb '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? *c ]? ^? _? `? {? |? +c }? ~? a@ b@ c@ d@ ,c 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@ G@ H@ I@ J@ K@ L@ M@ N@ O@ P@ Q@ R@ S@ T@ U@ -c =r V@ W@ ?r X@ Y@ Z@ 0@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ .c /c @r 8@ 9@ !@ #@ :c ;c =c $@ %@ '@ (@ )@ *@ +@ ,@ e -@ .@ /@ :@ ;@ =@ ?@ @@ [@ ]@ ^@ _@ [r `@ {@ ]r ^r |@ Yv _r `r {r |r }@ ~@ a[ b[ }r c[ d[ e[ f[ Mw g[ ?c @c ~r h[ i[ as hw ;v qw j[ [c k[ bs l[ m[ n[ cs ds o[ p[ =v rw ]c ^c _c 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[ Q[ R[ S[ T[ U[ V[ W[ X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ 9[ ![ #[ $[ %[ '[ ([ )[ *[ +[ ,[ -[ .[ /[ es :[ ;[ =[ ?[ @[ [[ ][ ^[ _[ `[ {[ |[ }[ ~[ a] b] c] d] e] f] g] h] i] j] k] l] m] n] o] p] q] Nw mf r] fs s] t] u] gs v] w] x] y] z] A] B] C] hs D] E] F] G] is H] I] js J] K] L] M] N] O] P] Q] ks R] U ( V W X Y Z ) S] ls T] ms U] V] W] X] Y] ns Z] 0] 1] 2] 3] 4] 5] 6] 7] 8] os `c {c ps 9] !] #] $] %] qs '] (] )] *] rs +] |v ,] -] ss .] ts /] us wb xb yb 0 1 zb :] vs ;] =] ?] ws @] [] ]] ^] _] xs `] {] |] }] ~] 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^ 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^ !^ #^ $^ %^ '^ (^ )^ *^ ys +^ ,^ -^ .^ /^ :^ ;^ =^ ?^ @^ [^ ]^ ^^ _^ `^ {^ |^ }^ ~^ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ |c }c ~c * ad bd + cd dd ed m_ n_ zs o_ As p_ Bs Cs q_ r_ s_ t_ u_ v_ w_ Ds x_ y_ z_ A_ B_ C_ D_ E_ F_ G_ Es H_ Fs I_ J_ K_ L_ M_ N_ O_ P_ Q_ R_ S_ T_ U_ V_ Gs W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ /_ :_ ;_ =_ ?_ @_ [_ ]_ Hs ^_ __ `_ {_ |_ }_ fd gd hd : Ab id ~_ jd kd Bb 2 Is a` b` Js c` d` Ks e` f` Ls g` h` Ms i` j` Ns k` l` Os m` n` Ps o` p` Qs q` r` Rs s` t` Ss u` v` Ts w` x` Us y` z` A` B` Vs C` D` E` F` Ws G` H` I` J` Xs K` L` M` Ys N` O` P` Zs Q` R` S` 0s T` U` V` 1s W` X` Y` 2s Z` 0` 1` 3s 2` 3` 4` 5` 6` 7` 8` 9` !` 4s #` $` %` 5s '` 6s (` )` *` +` ,` -` .` 7s /` :` ;` =` ?` @` [` ]` ^` 8s _` `` {` 9s |` !s }` ~` a{ #s b{ c{ d{ $s 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{ G{ H{ I{ J{ %s K{ L{ M{ N{ O{ 's P{ ?v Q{ R{ (s S{ T{ U{ V{ )s W{ X{ *s Y{ Z{ +s 0{ 1{ ,s 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ -s +{ ,{ -{ .{ ld md nd /{ xf Ow nf Pw of Qw Df :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ .s |{ }{ ~{ a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| s| t| u| /s v| w| x| y| z| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| :s T| U| V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ;s !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =s =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} ?s c} d} e} @s f} g} h} [s i} j} k} ]s l} m} n} ^s _s o} p} q} r} `s s} t} u} v} {s w} x} y} z} |s A} B} C} D} }s E} F} G} H} ~s I} J} K} at L} M} N} bt O} P} Q} ct R} S} T} dt U} V} W} et X} Y} ft Z} 0} 1} gt ht 2} 3} it jt 4} 5} kt lt 6} j ~e od 7} @v 8} [v 9} ]v !} mt #} nt pd ot qd pt rd qt $} %} '} (} )} *} +} ,} -} .} /} :} ;} =} ?} @} rt [} st ]} tt ^} ut _} vt wt `} xt {} |} }} ~} a~ b~ yt c~ d~ e~ zt f~ At Bt g~ h~ Ct i~ Dt j~ Et k~ Ft l~ Gt m~ Ht n~ It o~ Jt p~ Kt q~ Lt r~ s~ t~ u~ Mt v~ w~ x~ y~ Nt z~ A~ B~ C~ Ot 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~ !~ #~ $~ %~ '~ (~ )~ *~ Pt +~ ,~ -~ .~ /~ :~ ;~ =~ Qt ?~ @~ [~ ]~ ^~ _~ `~ {~ Rt |~ St }~ Tt ~~ Ut aabcw babVt cabWt dabXt eabYt fabZt gabhab0t iabjab1t kab2t lab3t mab4t nab5t oab6t pab7t qabrabsabtab8t uabvab9t wabxab!t yabzabAab#t $t BabCabDabEabFab%t Gab't Hab(t Iab)t Jab*t Kab+t Lab,t Mab-t Nab.t Oab/t Pab:t Qab;t Rab=t Sab?t Tab@t Uab[t Vab]t ^t WabXab_t Yab`t Zab{t 0ab|t 1ab}t ~t au 2ab3abbu cu 4abdu 5ab6ab7abeu 8ab9ab!ab#ab$abfu gu hu %abiu ju 'abku lu (abmu )ab*abnu +ab,ab-ab.ab/abou :ab;abpu =ab?abqu @ab[abru su ]ab^ab_ab`abtu {ab|ab}ab~abuu abbbbbcbbdbbvu ebbfbbgbbhbbwu ibbjbbkbblbbmbbxu nbbobbyu pbbqbbzu rbbsbbAu tbbubbBu vbbwbbCu xbbybbzbbDu AbbBbbEu CbbDbbFu EbbFbbGu GbbHu HbbIbbIu JbbKbbJu LbbMbbNbbKu ObbPbbLu QbbRbbMu SbbTbbNu UbbVbbOu Pu WbbXbbYbbZbb0bbQu 1bb2bb3bb4bbRu 5bb6bb7bb8bbSu 9bb!bb#bb$bbTu %bb'bb(bb)bbUu *bb+bb,bb-bbVu .bb/bbWu :bb;bbXu =bb?bbYu @bb[bb]bb^bb_bbZu `bb{bb|bb}bb~bbacb0u bcbccbdcbecbfcb1u gcbhcbicbjcbkcb2u lcbmcbncbocbpcb3u qcbrcbscbtcbucb4u vcbwcbxcb5u ycbzcbAcb6u BcbCcbDcb7u EcbFcb8u GcbHcbIcbJcbKcb9u LcbMcbNcbOcbPcb!u QcbRcbScbTcbUcb#u VcbWcbXcbYcbZcb$u 0cb1cb2cb3cb4cb%u 5cb6cb7cb8cb9cb'u !cb#cb$cb%cb'cb(u (cb)cb*cb+cb,cb)u -cb.cb/cb:cb;cb=cb?cb@cb[cb]cb*u ^cb+u _cb,u `cb{cb|cb-u }cb.u ~cbadb/u bdbcdb:u ;u ddbedb=u fdb?u gdb@u [u hdbidb]u jdbkdb^u ldbmdb_u ndbodb`u pdb{u qdb|u rdb}u sdb~u tdbav udbbv vdbcv wdbdv xdbev ydbfv zdbgv Adbhv Bdbiv CdbDdbEdbjv FdbGdbHdbkv IdbJdbKdblv LdbMdbNdbOdbPdbQdbRdbSdbmv TdbUdbVdbWdbXdbYdbZdb0dbnv 1db2db3db4db5db6db7db8dbov 9db!db#db$db%db'db(db)dbpv *db+db,db-db.db/db:db;dbqv =db?db@db[db]db^db_dbrv `db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebsv keblebmebneboebpebqebrebsebtebuebvebwebxebyebtv zebAebBebCebDebEebFebGebHebIebJebKebLebMebNebuv OebPebQebRebSebTebUebVebWebXebYebZeb0eb1eb2ebvv 3eb4eb5eb6eb7eb8eb9eb!eb#eb$eb%eb'eb(eb)eb*ebwv +eb,eb-eb.eb/eb:eb;eb=eb?ebxv @eb[eb]eb^ebyv _eb`eb{eb|ebZv }eb~ebafbbfbcfbzv dfbefbAv ffbgfbBv hfbifbCv jfbkfbDv lfbmfbEv nfbofbsd td pfbqfbrfbsfbtfbFv ufbvfbwfbxfbyfbzfbGv AfbBfbCfbDfbEfbFfbHv GfbHfbIfbJfbKfbLfbIv MfbNfbOfbPfbQfbRfbJv SfbTfbUfbVfbWfbXfbKv YfbZfb0fb1fb2fbLv yf 3fbud 4fbMv 5fb6fbCb Db Eb 7fbNv 8fb9fbFb !fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fbvd =fb?fb@fb[fb]fb^fbwd _fb`fb{fb|fb}fb~fbxd agbbgbcgbdgbegbfgbggbhgbigbjgbkgblgbmgbngbogbpgbqgbrgbsgbtgbugbvgbwgbxgbygbzgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbPgbQgbyd Ov RgbSgbPv TgbUgbVgbWgbXgbYgbZgb0gb1gb2gb3gbzd Ad Qv 4gb5gb6gb7gbBd Cd Dd 8gb9gb!gb#gb$gb%gb'gb(gb
1057 def add_api_route( 1abcde
1058 self,
1059 path: str,
1060 endpoint: Callable[..., Any],
1061 *,
1062 response_model: Any = Default(None),
1063 status_code: Optional[int] = None,
1064 tags: Optional[List[Union[str, Enum]]] = None,
1065 dependencies: Optional[Sequence[Depends]] = None,
1066 summary: Optional[str] = None,
1067 description: Optional[str] = None,
1068 response_description: str = "Successful Response",
1069 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1070 deprecated: Optional[bool] = None,
1071 methods: Optional[List[str]] = None,
1072 operation_id: Optional[str] = None,
1073 response_model_include: Optional[IncEx] = None,
1074 response_model_exclude: Optional[IncEx] = None,
1075 response_model_by_alias: bool = True,
1076 response_model_exclude_unset: bool = False,
1077 response_model_exclude_defaults: bool = False,
1078 response_model_exclude_none: bool = False,
1079 include_in_schema: bool = True,
1080 response_class: Union[Type[Response], DefaultPlaceholder] = Default(
1081 JSONResponse
1082 ),
1083 name: Optional[str] = None,
1084 openapi_extra: Optional[Dict[str, Any]] = None,
1085 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1086 generate_unique_id
1087 ),
1088 ) -> None:
1089 self.router.add_api_route( 1abcde
1090 path,
1091 endpoint=endpoint,
1092 response_model=response_model,
1093 status_code=status_code,
1094 tags=tags,
1095 dependencies=dependencies,
1096 summary=summary,
1097 description=description,
1098 response_description=response_description,
1099 responses=responses,
1100 deprecated=deprecated,
1101 methods=methods,
1102 operation_id=operation_id,
1103 response_model_include=response_model_include,
1104 response_model_exclude=response_model_exclude,
1105 response_model_by_alias=response_model_by_alias,
1106 response_model_exclude_unset=response_model_exclude_unset,
1107 response_model_exclude_defaults=response_model_exclude_defaults,
1108 response_model_exclude_none=response_model_exclude_none,
1109 include_in_schema=include_in_schema,
1110 response_class=response_class,
1111 name=name,
1112 openapi_extra=openapi_extra,
1113 generate_unique_id_function=generate_unique_id_function,
1114 )
1116 def api_route( 1abcde
1117 self,
1118 path: str,
1119 *,
1120 response_model: Any = Default(None),
1121 status_code: Optional[int] = None,
1122 tags: Optional[List[Union[str, Enum]]] = None,
1123 dependencies: Optional[Sequence[Depends]] = None,
1124 summary: Optional[str] = None,
1125 description: Optional[str] = None,
1126 response_description: str = "Successful Response",
1127 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1128 deprecated: Optional[bool] = None,
1129 methods: Optional[List[str]] = None,
1130 operation_id: Optional[str] = None,
1131 response_model_include: Optional[IncEx] = None,
1132 response_model_exclude: Optional[IncEx] = None,
1133 response_model_by_alias: bool = True,
1134 response_model_exclude_unset: bool = False,
1135 response_model_exclude_defaults: bool = False,
1136 response_model_exclude_none: bool = False,
1137 include_in_schema: bool = True,
1138 response_class: Type[Response] = Default(JSONResponse),
1139 name: Optional[str] = None,
1140 openapi_extra: Optional[Dict[str, Any]] = None,
1141 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1142 generate_unique_id
1143 ),
1144 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1145 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde
1146 self.router.add_api_route( 1abcde
1147 path,
1148 func,
1149 response_model=response_model,
1150 status_code=status_code,
1151 tags=tags,
1152 dependencies=dependencies,
1153 summary=summary,
1154 description=description,
1155 response_description=response_description,
1156 responses=responses,
1157 deprecated=deprecated,
1158 methods=methods,
1159 operation_id=operation_id,
1160 response_model_include=response_model_include,
1161 response_model_exclude=response_model_exclude,
1162 response_model_by_alias=response_model_by_alias,
1163 response_model_exclude_unset=response_model_exclude_unset,
1164 response_model_exclude_defaults=response_model_exclude_defaults,
1165 response_model_exclude_none=response_model_exclude_none,
1166 include_in_schema=include_in_schema,
1167 response_class=response_class,
1168 name=name,
1169 openapi_extra=openapi_extra,
1170 generate_unique_id_function=generate_unique_id_function,
1171 )
1172 return func 1abcde
1174 return decorator 1abcde
1176 def add_api_websocket_route( 1abcde
1177 self,
1178 path: str,
1179 endpoint: Callable[..., Any],
1180 name: Optional[str] = None,
1181 *,
1182 dependencies: Optional[Sequence[Depends]] = None,
1183 ) -> None:
1184 self.router.add_api_websocket_route( 1abcde
1185 path,
1186 endpoint,
1187 name=name,
1188 dependencies=dependencies,
1189 )
1191 def websocket( 1abcde
1192 self,
1193 path: Annotated[
1194 str,
1195 Doc(
1196 """
1197 WebSocket path.
1198 """
1199 ),
1200 ],
1201 name: Annotated[
1202 Optional[str],
1203 Doc(
1204 """
1205 A name for the WebSocket. Only used internally.
1206 """
1207 ),
1208 ] = None,
1209 *,
1210 dependencies: Annotated[
1211 Optional[Sequence[Depends]],
1212 Doc(
1213 """
1214 A list of dependencies (using `Depends()`) to be used for this
1215 WebSocket.
1217 Read more about it in the
1218 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1219 """
1220 ),
1221 ] = None,
1222 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1223 """
1224 Decorate a WebSocket function.
1226 Read more about it in the
1227 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1229 **Example**
1231 ```python
1232 from fastapi import FastAPI, WebSocket
1234 app = FastAPI()
1236 @app.websocket("/ws")
1237 async def websocket_endpoint(websocket: WebSocket):
1238 await websocket.accept()
1239 while True:
1240 data = await websocket.receive_text()
1241 await websocket.send_text(f"Message text was: {data}")
1242 ```
1243 """
1245 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde
1246 self.add_api_websocket_route( 1abcde
1247 path,
1248 func,
1249 name=name,
1250 dependencies=dependencies,
1251 )
1252 return func 1abcde
1254 return decorator 1abcde
1256 def include_router( 1abcde
1257 self,
1258 router: Annotated[routing.APIRouter, Doc("The `APIRouter` to include.")],
1259 *,
1260 prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
1261 tags: Annotated[
1262 Optional[List[Union[str, Enum]]],
1263 Doc(
1264 """
1265 A list of tags to be applied to all the *path operations* in this
1266 router.
1268 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1270 Read more about it in the
1271 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1272 """
1273 ),
1274 ] = None,
1275 dependencies: Annotated[
1276 Optional[Sequence[Depends]],
1277 Doc(
1278 """
1279 A list of dependencies (using `Depends()`) to be applied to all the
1280 *path operations* in this router.
1282 Read more about it in the
1283 [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).
1285 **Example**
1287 ```python
1288 from fastapi import Depends, FastAPI
1290 from .dependencies import get_token_header
1291 from .internal import admin
1293 app = FastAPI()
1295 app.include_router(
1296 admin.router,
1297 dependencies=[Depends(get_token_header)],
1298 )
1299 ```
1300 """
1301 ),
1302 ] = None,
1303 responses: Annotated[
1304 Optional[Dict[Union[int, str], Dict[str, Any]]],
1305 Doc(
1306 """
1307 Additional responses to be shown in OpenAPI.
1309 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1311 Read more about it in the
1312 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
1314 And in the
1315 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
1316 """
1317 ),
1318 ] = None,
1319 deprecated: Annotated[
1320 Optional[bool],
1321 Doc(
1322 """
1323 Mark all the *path operations* in this router as deprecated.
1325 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1327 **Example**
1329 ```python
1330 from fastapi import FastAPI
1332 from .internal import old_api
1334 app = FastAPI()
1336 app.include_router(
1337 old_api.router,
1338 deprecated=True,
1339 )
1340 ```
1341 """
1342 ),
1343 ] = None,
1344 include_in_schema: Annotated[
1345 bool,
1346 Doc(
1347 """
1348 Include (or not) all the *path operations* in this router in the
1349 generated OpenAPI schema.
1351 This affects the generated OpenAPI (e.g. visible at `/docs`).
1353 **Example**
1355 ```python
1356 from fastapi import FastAPI
1358 from .internal import old_api
1360 app = FastAPI()
1362 app.include_router(
1363 old_api.router,
1364 include_in_schema=False,
1365 )
1366 ```
1367 """
1368 ),
1369 ] = True,
1370 default_response_class: Annotated[
1371 Type[Response],
1372 Doc(
1373 """
1374 Default response class to be used for the *path operations* in this
1375 router.
1377 Read more in the
1378 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
1380 **Example**
1382 ```python
1383 from fastapi import FastAPI
1384 from fastapi.responses import ORJSONResponse
1386 from .internal import old_api
1388 app = FastAPI()
1390 app.include_router(
1391 old_api.router,
1392 default_response_class=ORJSONResponse,
1393 )
1394 ```
1395 """
1396 ),
1397 ] = Default(JSONResponse),
1398 callbacks: Annotated[
1399 Optional[List[BaseRoute]],
1400 Doc(
1401 """
1402 List of *path operations* that will be used as OpenAPI callbacks.
1404 This is only for OpenAPI documentation, the callbacks won't be used
1405 directly.
1407 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1409 Read more about it in the
1410 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1411 """
1412 ),
1413 ] = None,
1414 generate_unique_id_function: Annotated[
1415 Callable[[routing.APIRoute], str],
1416 Doc(
1417 """
1418 Customize the function used to generate unique IDs for the *path
1419 operations* shown in the generated OpenAPI.
1421 This is particularly useful when automatically generating clients or
1422 SDKs for your API.
1424 Read more about it in the
1425 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1426 """
1427 ),
1428 ] = Default(generate_unique_id),
1429 ) -> None:
1430 """
1431 Include an `APIRouter` in the same app.
1433 Read more about it in the
1434 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/).
1436 ## Example
1438 ```python
1439 from fastapi import FastAPI
1441 from .users import users_router
1443 app = FastAPI()
1445 app.include_router(users_router)
1446 ```
1447 """
1448 self.router.include_router( 3a Hb )gbk l m n o p Rb Sb , [ Tb Ub Vb 2b 3b 4b b 6b *gbt u v w x y )b *b - } +b ,b -b ^b _b `b c |b +gbC D E F G H nc oc . gb pc qc rc Ic Jc Kc d Mc ,gbL M N O P Q 2c 3c / qb 4c 5c 6c :c ;c =c e @c -gbU V W X Y Z gd hd : Ab id jd kd Bd Cd Dd
1449 router,
1450 prefix=prefix,
1451 tags=tags,
1452 dependencies=dependencies,
1453 responses=responses,
1454 deprecated=deprecated,
1455 include_in_schema=include_in_schema,
1456 default_response_class=default_response_class,
1457 callbacks=callbacks,
1458 generate_unique_id_function=generate_unique_id_function,
1459 )
1461 def get( 1abcde
1462 self,
1463 path: Annotated[
1464 str,
1465 Doc(
1466 """
1467 The URL path to be used for this *path operation*.
1469 For example, in `http://example.com/items`, the path is `/items`.
1470 """
1471 ),
1472 ],
1473 *,
1474 response_model: Annotated[
1475 Any,
1476 Doc(
1477 """
1478 The type to use for the response.
1480 It could be any valid Pydantic *field* type. So, it doesn't have to
1481 be a Pydantic model, it could be other things, like a `list`, `dict`,
1482 etc.
1484 It will be used for:
1486 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1487 show it as the response (JSON Schema).
1488 * Serialization: you could return an arbitrary object and the
1489 `response_model` would be used to serialize that object into the
1490 corresponding JSON.
1491 * Filtering: the JSON sent to the client will only contain the data
1492 (fields) defined in the `response_model`. If you returned an object
1493 that contains an attribute `password` but the `response_model` does
1494 not include that field, the JSON sent to the client would not have
1495 that `password`.
1496 * Validation: whatever you return will be serialized with the
1497 `response_model`, converting any data as necessary to generate the
1498 corresponding JSON. But if the data in the object returned is not
1499 valid, that would mean a violation of the contract with the client,
1500 so it's an error from the API developer. So, FastAPI will raise an
1501 error and return a 500 error code (Internal Server Error).
1503 Read more about it in the
1504 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1505 """
1506 ),
1507 ] = Default(None),
1508 status_code: Annotated[
1509 Optional[int],
1510 Doc(
1511 """
1512 The default status code to be used for the response.
1514 You could override the status code by returning a response directly.
1516 Read more about it in the
1517 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1518 """
1519 ),
1520 ] = None,
1521 tags: Annotated[
1522 Optional[List[Union[str, Enum]]],
1523 Doc(
1524 """
1525 A list of tags to be applied to the *path operation*.
1527 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1529 Read more about it in the
1530 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1531 """
1532 ),
1533 ] = None,
1534 dependencies: Annotated[
1535 Optional[Sequence[Depends]],
1536 Doc(
1537 """
1538 A list of dependencies (using `Depends()`) to be applied to the
1539 *path operation*.
1541 Read more about it in the
1542 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
1543 """
1544 ),
1545 ] = None,
1546 summary: Annotated[
1547 Optional[str],
1548 Doc(
1549 """
1550 A summary for the *path operation*.
1552 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1554 Read more about it in the
1555 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1556 """
1557 ),
1558 ] = None,
1559 description: Annotated[
1560 Optional[str],
1561 Doc(
1562 """
1563 A description for the *path operation*.
1565 If not provided, it will be extracted automatically from the docstring
1566 of the *path operation function*.
1568 It can contain Markdown.
1570 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1572 Read more about it in the
1573 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1574 """
1575 ),
1576 ] = None,
1577 response_description: Annotated[
1578 str,
1579 Doc(
1580 """
1581 The description for the default response.
1583 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1584 """
1585 ),
1586 ] = "Successful Response",
1587 responses: Annotated[
1588 Optional[Dict[Union[int, str], Dict[str, Any]]],
1589 Doc(
1590 """
1591 Additional responses that could be returned by this *path operation*.
1593 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1594 """
1595 ),
1596 ] = None,
1597 deprecated: Annotated[
1598 Optional[bool],
1599 Doc(
1600 """
1601 Mark this *path operation* as deprecated.
1603 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1604 """
1605 ),
1606 ] = None,
1607 operation_id: Annotated[
1608 Optional[str],
1609 Doc(
1610 """
1611 Custom operation ID to be used by this *path operation*.
1613 By default, it is generated automatically.
1615 If you provide a custom operation ID, you need to make sure it is
1616 unique for the whole API.
1618 You can customize the
1619 operation ID generation with the parameter
1620 `generate_unique_id_function` in the `FastAPI` class.
1622 Read more about it in the
1623 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1624 """
1625 ),
1626 ] = None,
1627 response_model_include: Annotated[
1628 Optional[IncEx],
1629 Doc(
1630 """
1631 Configuration passed to Pydantic to include only certain fields in the
1632 response data.
1634 Read more about it in the
1635 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1636 """
1637 ),
1638 ] = None,
1639 response_model_exclude: Annotated[
1640 Optional[IncEx],
1641 Doc(
1642 """
1643 Configuration passed to Pydantic to exclude certain fields in the
1644 response data.
1646 Read more about it in the
1647 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1648 """
1649 ),
1650 ] = None,
1651 response_model_by_alias: Annotated[
1652 bool,
1653 Doc(
1654 """
1655 Configuration passed to Pydantic to define if the response model
1656 should be serialized by alias when an alias is used.
1658 Read more about it in the
1659 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1660 """
1661 ),
1662 ] = True,
1663 response_model_exclude_unset: Annotated[
1664 bool,
1665 Doc(
1666 """
1667 Configuration passed to Pydantic to define if the response data
1668 should have all the fields, including the ones that were not set and
1669 have their default values. This is different from
1670 `response_model_exclude_defaults` in that if the fields are set,
1671 they will be included in the response, even if the value is the same
1672 as the default.
1674 When `True`, default values are omitted from the response.
1676 Read more about it in the
1677 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1678 """
1679 ),
1680 ] = False,
1681 response_model_exclude_defaults: Annotated[
1682 bool,
1683 Doc(
1684 """
1685 Configuration passed to Pydantic to define if the response data
1686 should have all the fields, including the ones that have the same value
1687 as the default. This is different from `response_model_exclude_unset`
1688 in that if the fields are set but contain the same default values,
1689 they will be excluded from the response.
1691 When `True`, default values are omitted from the response.
1693 Read more about it in the
1694 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1695 """
1696 ),
1697 ] = False,
1698 response_model_exclude_none: Annotated[
1699 bool,
1700 Doc(
1701 """
1702 Configuration passed to Pydantic to define if the response data should
1703 exclude fields set to `None`.
1705 This is much simpler (less smart) than `response_model_exclude_unset`
1706 and `response_model_exclude_defaults`. You probably want to use one of
1707 those two instead of this one, as those allow returning `None` values
1708 when it makes sense.
1710 Read more about it in the
1711 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
1712 """
1713 ),
1714 ] = False,
1715 include_in_schema: Annotated[
1716 bool,
1717 Doc(
1718 """
1719 Include this *path operation* in the generated OpenAPI schema.
1721 This affects the generated OpenAPI (e.g. visible at `/docs`).
1723 Read more about it in the
1724 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
1725 """
1726 ),
1727 ] = True,
1728 response_class: Annotated[
1729 Type[Response],
1730 Doc(
1731 """
1732 Response class to be used for this *path operation*.
1734 This will not be used if you return a response directly.
1736 Read more about it in the
1737 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
1738 """
1739 ),
1740 ] = Default(JSONResponse),
1741 name: Annotated[
1742 Optional[str],
1743 Doc(
1744 """
1745 Name for this *path operation*. Only used internally.
1746 """
1747 ),
1748 ] = None,
1749 callbacks: Annotated[
1750 Optional[List[BaseRoute]],
1751 Doc(
1752 """
1753 List of *path operations* that will be used as OpenAPI callbacks.
1755 This is only for OpenAPI documentation, the callbacks won't be used
1756 directly.
1758 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1760 Read more about it in the
1761 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1762 """
1763 ),
1764 ] = None,
1765 openapi_extra: Annotated[
1766 Optional[Dict[str, Any]],
1767 Doc(
1768 """
1769 Extra metadata to be included in the OpenAPI schema for this *path
1770 operation*.
1772 Read more about it in the
1773 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
1774 """
1775 ),
1776 ] = None,
1777 generate_unique_id_function: Annotated[
1778 Callable[[routing.APIRoute], str],
1779 Doc(
1780 """
1781 Customize the function used to generate unique IDs for the *path
1782 operations* shown in the generated OpenAPI.
1784 This is particularly useful when automatically generating clients or
1785 SDKs for your API.
1787 Read more about it in the
1788 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1789 """
1790 ),
1791 ] = Default(generate_unique_id),
1792 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1793 """
1794 Add a *path operation* using an HTTP GET operation.
1796 ## Example
1798 ```python
1799 from fastapi import FastAPI
1801 app = FastAPI()
1803 @app.get("/items/")
1804 def read_items():
1805 return [{"name": "Empanada"}, {"name": "Arepa"}]
1806 ```
1807 """
1808 return self.router.get( 3a sw .gbGb Kb Lb Mb Nb Ed Fd Gd Hd Id Jd Kd Ld Md Nd Od ; = ? q r @ Zd 0d 1d 2d 3d Qb , [ ] s f `e Wb 4d 5d Xb Yb Zb ^ 0b 1b b xw /gb5b 9b !b #b $b 6d 7d 8d 9d !d #d $d %d 'd (d )d _ ` { z A | @d [d ]d ^d _d (b - } ~ B g {e /b :b `d {d ;b =b ?b ab bb @b [b ]b c Cw :gb{b ac bc cc dc |d }d ~d ae be ce de ee fe ge he cb db eb I J fb ! jc kc lc se te ue ve we mc . gb hb K h |e vc wc xc yc xe ye ze zc Ac Bc ib jb kb lb Cc Dc Ec Gc Hc d Hw ;gbLc Pc Qc Rc Sc Ae Be Ce De Ee Fe Ge He Ie Je Ke mb nb ob R S pb ' Yc Zc 0c Ve We Xe Ye Ze 1c / qb rb T i }e !c #c $c %c 0e 1e 2e 'c (c )c sb tb ub vb *c +c ,c .c /c e Mw =gb?c ^c _c `c {c 3e 4e 5e 6e 7e 8e 9e !e #e $e %e wb xb yb 0 1 zb + cd dd ed ;e =e ?e @e [e fd : Ab Bb 2 j ~e od pd qd rd ]e ^e _e sd td ud Cb Db Eb Fb vd wd xd zd Ad
1809 path,
1810 response_model=response_model,
1811 status_code=status_code,
1812 tags=tags,
1813 dependencies=dependencies,
1814 summary=summary,
1815 description=description,
1816 response_description=response_description,
1817 responses=responses,
1818 deprecated=deprecated,
1819 operation_id=operation_id,
1820 response_model_include=response_model_include,
1821 response_model_exclude=response_model_exclude,
1822 response_model_by_alias=response_model_by_alias,
1823 response_model_exclude_unset=response_model_exclude_unset,
1824 response_model_exclude_defaults=response_model_exclude_defaults,
1825 response_model_exclude_none=response_model_exclude_none,
1826 include_in_schema=include_in_schema,
1827 response_class=response_class,
1828 name=name,
1829 callbacks=callbacks,
1830 openapi_extra=openapi_extra,
1831 generate_unique_id_function=generate_unique_id_function,
1832 )
1834 def put( 1abcde
1835 self,
1836 path: Annotated[
1837 str,
1838 Doc(
1839 """
1840 The URL path to be used for this *path operation*.
1842 For example, in `http://example.com/items`, the path is `/items`.
1843 """
1844 ),
1845 ],
1846 *,
1847 response_model: Annotated[
1848 Any,
1849 Doc(
1850 """
1851 The type to use for the response.
1853 It could be any valid Pydantic *field* type. So, it doesn't have to
1854 be a Pydantic model, it could be other things, like a `list`, `dict`,
1855 etc.
1857 It will be used for:
1859 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1860 show it as the response (JSON Schema).
1861 * Serialization: you could return an arbitrary object and the
1862 `response_model` would be used to serialize that object into the
1863 corresponding JSON.
1864 * Filtering: the JSON sent to the client will only contain the data
1865 (fields) defined in the `response_model`. If you returned an object
1866 that contains an attribute `password` but the `response_model` does
1867 not include that field, the JSON sent to the client would not have
1868 that `password`.
1869 * Validation: whatever you return will be serialized with the
1870 `response_model`, converting any data as necessary to generate the
1871 corresponding JSON. But if the data in the object returned is not
1872 valid, that would mean a violation of the contract with the client,
1873 so it's an error from the API developer. So, FastAPI will raise an
1874 error and return a 500 error code (Internal Server Error).
1876 Read more about it in the
1877 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1878 """
1879 ),
1880 ] = Default(None),
1881 status_code: Annotated[
1882 Optional[int],
1883 Doc(
1884 """
1885 The default status code to be used for the response.
1887 You could override the status code by returning a response directly.
1889 Read more about it in the
1890 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1891 """
1892 ),
1893 ] = None,
1894 tags: Annotated[
1895 Optional[List[Union[str, Enum]]],
1896 Doc(
1897 """
1898 A list of tags to be applied to the *path operation*.
1900 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1902 Read more about it in the
1903 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1904 """
1905 ),
1906 ] = None,
1907 dependencies: Annotated[
1908 Optional[Sequence[Depends]],
1909 Doc(
1910 """
1911 A list of dependencies (using `Depends()`) to be applied to the
1912 *path operation*.
1914 Read more about it in the
1915 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
1916 """
1917 ),
1918 ] = None,
1919 summary: Annotated[
1920 Optional[str],
1921 Doc(
1922 """
1923 A summary for the *path operation*.
1925 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1927 Read more about it in the
1928 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1929 """
1930 ),
1931 ] = None,
1932 description: Annotated[
1933 Optional[str],
1934 Doc(
1935 """
1936 A description for the *path operation*.
1938 If not provided, it will be extracted automatically from the docstring
1939 of the *path operation function*.
1941 It can contain Markdown.
1943 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1945 Read more about it in the
1946 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1947 """
1948 ),
1949 ] = None,
1950 response_description: Annotated[
1951 str,
1952 Doc(
1953 """
1954 The description for the default response.
1956 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1957 """
1958 ),
1959 ] = "Successful Response",
1960 responses: Annotated[
1961 Optional[Dict[Union[int, str], Dict[str, Any]]],
1962 Doc(
1963 """
1964 Additional responses that could be returned by this *path operation*.
1966 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1967 """
1968 ),
1969 ] = None,
1970 deprecated: Annotated[
1971 Optional[bool],
1972 Doc(
1973 """
1974 Mark this *path operation* as deprecated.
1976 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1977 """
1978 ),
1979 ] = None,
1980 operation_id: Annotated[
1981 Optional[str],
1982 Doc(
1983 """
1984 Custom operation ID to be used by this *path operation*.
1986 By default, it is generated automatically.
1988 If you provide a custom operation ID, you need to make sure it is
1989 unique for the whole API.
1991 You can customize the
1992 operation ID generation with the parameter
1993 `generate_unique_id_function` in the `FastAPI` class.
1995 Read more about it in the
1996 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1997 """
1998 ),
1999 ] = None,
2000 response_model_include: Annotated[
2001 Optional[IncEx],
2002 Doc(
2003 """
2004 Configuration passed to Pydantic to include only certain fields in the
2005 response data.
2007 Read more about it in the
2008 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2009 """
2010 ),
2011 ] = None,
2012 response_model_exclude: Annotated[
2013 Optional[IncEx],
2014 Doc(
2015 """
2016 Configuration passed to Pydantic to exclude certain fields in the
2017 response data.
2019 Read more about it in the
2020 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2021 """
2022 ),
2023 ] = None,
2024 response_model_by_alias: Annotated[
2025 bool,
2026 Doc(
2027 """
2028 Configuration passed to Pydantic to define if the response model
2029 should be serialized by alias when an alias is used.
2031 Read more about it in the
2032 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2033 """
2034 ),
2035 ] = True,
2036 response_model_exclude_unset: Annotated[
2037 bool,
2038 Doc(
2039 """
2040 Configuration passed to Pydantic to define if the response data
2041 should have all the fields, including the ones that were not set and
2042 have their default values. This is different from
2043 `response_model_exclude_defaults` in that if the fields are set,
2044 they will be included in the response, even if the value is the same
2045 as the default.
2047 When `True`, default values are omitted from the response.
2049 Read more about it in the
2050 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2051 """
2052 ),
2053 ] = False,
2054 response_model_exclude_defaults: Annotated[
2055 bool,
2056 Doc(
2057 """
2058 Configuration passed to Pydantic to define if the response data
2059 should have all the fields, including the ones that have the same value
2060 as the default. This is different from `response_model_exclude_unset`
2061 in that if the fields are set but contain the same default values,
2062 they will be excluded from the response.
2064 When `True`, default values are omitted from the response.
2066 Read more about it in the
2067 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2068 """
2069 ),
2070 ] = False,
2071 response_model_exclude_none: Annotated[
2072 bool,
2073 Doc(
2074 """
2075 Configuration passed to Pydantic to define if the response data should
2076 exclude fields set to `None`.
2078 This is much simpler (less smart) than `response_model_exclude_unset`
2079 and `response_model_exclude_defaults`. You probably want to use one of
2080 those two instead of this one, as those allow returning `None` values
2081 when it makes sense.
2083 Read more about it in the
2084 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2085 """
2086 ),
2087 ] = False,
2088 include_in_schema: Annotated[
2089 bool,
2090 Doc(
2091 """
2092 Include this *path operation* in the generated OpenAPI schema.
2094 This affects the generated OpenAPI (e.g. visible at `/docs`).
2096 Read more about it in the
2097 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
2098 """
2099 ),
2100 ] = True,
2101 response_class: Annotated[
2102 Type[Response],
2103 Doc(
2104 """
2105 Response class to be used for this *path operation*.
2107 This will not be used if you return a response directly.
2109 Read more about it in the
2110 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2111 """
2112 ),
2113 ] = Default(JSONResponse),
2114 name: Annotated[
2115 Optional[str],
2116 Doc(
2117 """
2118 Name for this *path operation*. Only used internally.
2119 """
2120 ),
2121 ] = None,
2122 callbacks: Annotated[
2123 Optional[List[BaseRoute]],
2124 Doc(
2125 """
2126 List of *path operations* that will be used as OpenAPI callbacks.
2128 This is only for OpenAPI documentation, the callbacks won't be used
2129 directly.
2131 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2133 Read more about it in the
2134 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2135 """
2136 ),
2137 ] = None,
2138 openapi_extra: Annotated[
2139 Optional[Dict[str, Any]],
2140 Doc(
2141 """
2142 Extra metadata to be included in the OpenAPI schema for this *path
2143 operation*.
2145 Read more about it in the
2146 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2147 """
2148 ),
2149 ] = None,
2150 generate_unique_id_function: Annotated[
2151 Callable[[routing.APIRoute], str],
2152 Doc(
2153 """
2154 Customize the function used to generate unique IDs for the *path
2155 operations* shown in the generated OpenAPI.
2157 This is particularly useful when automatically generating clients or
2158 SDKs for your API.
2160 Read more about it in the
2161 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2162 """
2163 ),
2164 ] = Default(generate_unique_id),
2165 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2166 """
2167 Add a *path operation* using an HTTP PUT operation.
2169 ## Example
2171 ```python
2172 from fastapi import FastAPI
2173 from pydantic import BaseModel
2175 class Item(BaseModel):
2176 name: str
2177 description: str | None = None
2179 app = FastAPI()
2181 @app.put("/items/{item_id}")
2182 def replace_item(item_id: str, item: Item):
2183 return {"message": "Item replaced", "id": item_id}
2184 ```
2185 """
2186 return self.router.put( 1abcde
2187 path,
2188 response_model=response_model,
2189 status_code=status_code,
2190 tags=tags,
2191 dependencies=dependencies,
2192 summary=summary,
2193 description=description,
2194 response_description=response_description,
2195 responses=responses,
2196 deprecated=deprecated,
2197 operation_id=operation_id,
2198 response_model_include=response_model_include,
2199 response_model_exclude=response_model_exclude,
2200 response_model_by_alias=response_model_by_alias,
2201 response_model_exclude_unset=response_model_exclude_unset,
2202 response_model_exclude_defaults=response_model_exclude_defaults,
2203 response_model_exclude_none=response_model_exclude_none,
2204 include_in_schema=include_in_schema,
2205 response_class=response_class,
2206 name=name,
2207 callbacks=callbacks,
2208 openapi_extra=openapi_extra,
2209 generate_unique_id_function=generate_unique_id_function,
2210 )
2212 def post( 1abcde
2213 self,
2214 path: Annotated[
2215 str,
2216 Doc(
2217 """
2218 The URL path to be used for this *path operation*.
2220 For example, in `http://example.com/items`, the path is `/items`.
2221 """
2222 ),
2223 ],
2224 *,
2225 response_model: Annotated[
2226 Any,
2227 Doc(
2228 """
2229 The type to use for the response.
2231 It could be any valid Pydantic *field* type. So, it doesn't have to
2232 be a Pydantic model, it could be other things, like a `list`, `dict`,
2233 etc.
2235 It will be used for:
2237 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2238 show it as the response (JSON Schema).
2239 * Serialization: you could return an arbitrary object and the
2240 `response_model` would be used to serialize that object into the
2241 corresponding JSON.
2242 * Filtering: the JSON sent to the client will only contain the data
2243 (fields) defined in the `response_model`. If you returned an object
2244 that contains an attribute `password` but the `response_model` does
2245 not include that field, the JSON sent to the client would not have
2246 that `password`.
2247 * Validation: whatever you return will be serialized with the
2248 `response_model`, converting any data as necessary to generate the
2249 corresponding JSON. But if the data in the object returned is not
2250 valid, that would mean a violation of the contract with the client,
2251 so it's an error from the API developer. So, FastAPI will raise an
2252 error and return a 500 error code (Internal Server Error).
2254 Read more about it in the
2255 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2256 """
2257 ),
2258 ] = Default(None),
2259 status_code: Annotated[
2260 Optional[int],
2261 Doc(
2262 """
2263 The default status code to be used for the response.
2265 You could override the status code by returning a response directly.
2267 Read more about it in the
2268 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2269 """
2270 ),
2271 ] = None,
2272 tags: Annotated[
2273 Optional[List[Union[str, Enum]]],
2274 Doc(
2275 """
2276 A list of tags to be applied to the *path operation*.
2278 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2280 Read more about it in the
2281 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2282 """
2283 ),
2284 ] = None,
2285 dependencies: Annotated[
2286 Optional[Sequence[Depends]],
2287 Doc(
2288 """
2289 A list of dependencies (using `Depends()`) to be applied to the
2290 *path operation*.
2292 Read more about it in the
2293 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2294 """
2295 ),
2296 ] = None,
2297 summary: Annotated[
2298 Optional[str],
2299 Doc(
2300 """
2301 A summary for the *path operation*.
2303 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2305 Read more about it in the
2306 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2307 """
2308 ),
2309 ] = None,
2310 description: Annotated[
2311 Optional[str],
2312 Doc(
2313 """
2314 A description for the *path operation*.
2316 If not provided, it will be extracted automatically from the docstring
2317 of the *path operation function*.
2319 It can contain Markdown.
2321 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2323 Read more about it in the
2324 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2325 """
2326 ),
2327 ] = None,
2328 response_description: Annotated[
2329 str,
2330 Doc(
2331 """
2332 The description for the default response.
2334 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2335 """
2336 ),
2337 ] = "Successful Response",
2338 responses: Annotated[
2339 Optional[Dict[Union[int, str], Dict[str, Any]]],
2340 Doc(
2341 """
2342 Additional responses that could be returned by this *path operation*.
2344 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2345 """
2346 ),
2347 ] = None,
2348 deprecated: Annotated[
2349 Optional[bool],
2350 Doc(
2351 """
2352 Mark this *path operation* as deprecated.
2354 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2355 """
2356 ),
2357 ] = None,
2358 operation_id: Annotated[
2359 Optional[str],
2360 Doc(
2361 """
2362 Custom operation ID to be used by this *path operation*.
2364 By default, it is generated automatically.
2366 If you provide a custom operation ID, you need to make sure it is
2367 unique for the whole API.
2369 You can customize the
2370 operation ID generation with the parameter
2371 `generate_unique_id_function` in the `FastAPI` class.
2373 Read more about it in the
2374 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2375 """
2376 ),
2377 ] = None,
2378 response_model_include: Annotated[
2379 Optional[IncEx],
2380 Doc(
2381 """
2382 Configuration passed to Pydantic to include only certain fields in the
2383 response data.
2385 Read more about it in the
2386 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2387 """
2388 ),
2389 ] = None,
2390 response_model_exclude: Annotated[
2391 Optional[IncEx],
2392 Doc(
2393 """
2394 Configuration passed to Pydantic to exclude certain fields in the
2395 response data.
2397 Read more about it in the
2398 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2399 """
2400 ),
2401 ] = None,
2402 response_model_by_alias: Annotated[
2403 bool,
2404 Doc(
2405 """
2406 Configuration passed to Pydantic to define if the response model
2407 should be serialized by alias when an alias is used.
2409 Read more about it in the
2410 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2411 """
2412 ),
2413 ] = True,
2414 response_model_exclude_unset: Annotated[
2415 bool,
2416 Doc(
2417 """
2418 Configuration passed to Pydantic to define if the response data
2419 should have all the fields, including the ones that were not set and
2420 have their default values. This is different from
2421 `response_model_exclude_defaults` in that if the fields are set,
2422 they will be included in the response, even if the value is the same
2423 as the default.
2425 When `True`, default values are omitted from the response.
2427 Read more about it in the
2428 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2429 """
2430 ),
2431 ] = False,
2432 response_model_exclude_defaults: Annotated[
2433 bool,
2434 Doc(
2435 """
2436 Configuration passed to Pydantic to define if the response data
2437 should have all the fields, including the ones that have the same value
2438 as the default. This is different from `response_model_exclude_unset`
2439 in that if the fields are set but contain the same default values,
2440 they will be excluded from the response.
2442 When `True`, default values are omitted from the response.
2444 Read more about it in the
2445 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2446 """
2447 ),
2448 ] = False,
2449 response_model_exclude_none: Annotated[
2450 bool,
2451 Doc(
2452 """
2453 Configuration passed to Pydantic to define if the response data should
2454 exclude fields set to `None`.
2456 This is much simpler (less smart) than `response_model_exclude_unset`
2457 and `response_model_exclude_defaults`. You probably want to use one of
2458 those two instead of this one, as those allow returning `None` values
2459 when it makes sense.
2461 Read more about it in the
2462 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2463 """
2464 ),
2465 ] = False,
2466 include_in_schema: Annotated[
2467 bool,
2468 Doc(
2469 """
2470 Include this *path operation* in the generated OpenAPI schema.
2472 This affects the generated OpenAPI (e.g. visible at `/docs`).
2474 Read more about it in the
2475 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
2476 """
2477 ),
2478 ] = True,
2479 response_class: Annotated[
2480 Type[Response],
2481 Doc(
2482 """
2483 Response class to be used for this *path operation*.
2485 This will not be used if you return a response directly.
2487 Read more about it in the
2488 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2489 """
2490 ),
2491 ] = Default(JSONResponse),
2492 name: Annotated[
2493 Optional[str],
2494 Doc(
2495 """
2496 Name for this *path operation*. Only used internally.
2497 """
2498 ),
2499 ] = None,
2500 callbacks: Annotated[
2501 Optional[List[BaseRoute]],
2502 Doc(
2503 """
2504 List of *path operations* that will be used as OpenAPI callbacks.
2506 This is only for OpenAPI documentation, the callbacks won't be used
2507 directly.
2509 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2511 Read more about it in the
2512 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2513 """
2514 ),
2515 ] = None,
2516 openapi_extra: Annotated[
2517 Optional[Dict[str, Any]],
2518 Doc(
2519 """
2520 Extra metadata to be included in the OpenAPI schema for this *path
2521 operation*.
2523 Read more about it in the
2524 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2525 """
2526 ),
2527 ] = None,
2528 generate_unique_id_function: Annotated[
2529 Callable[[routing.APIRoute], str],
2530 Doc(
2531 """
2532 Customize the function used to generate unique IDs for the *path
2533 operations* shown in the generated OpenAPI.
2535 This is particularly useful when automatically generating clients or
2536 SDKs for your API.
2538 Read more about it in the
2539 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2540 """
2541 ),
2542 ] = Default(generate_unique_id),
2543 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2544 """
2545 Add a *path operation* using an HTTP POST operation.
2547 ## Example
2549 ```python
2550 from fastapi import FastAPI
2551 from pydantic import BaseModel
2553 class Item(BaseModel):
2554 name: str
2555 description: str | None = None
2557 app = FastAPI()
2559 @app.post("/items/")
2560 def create_item(item: Item):
2561 return {"message": "Item created"}
2562 ```
2563 """
2564 return self.router.post( 2a IbJbk 3 l m n o p 4 PdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPb] s b 7b8bt 5 u v w x y 6 *d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b~ B .babc }b~bC 7 D E F G H 8 iejekelemeneoepeqerecbdbebI J fbecfcgc9 hcichbK sctcucibjbkbFcd NcOcL # M N O P Q $ LeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXcrbT 7c8c9csbtbub-ce [c]cU ( V W X Y Z ) 'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbdBb2 ldmdndCbDbEbyd
2565 path,
2566 response_model=response_model,
2567 status_code=status_code,
2568 tags=tags,
2569 dependencies=dependencies,
2570 summary=summary,
2571 description=description,
2572 response_description=response_description,
2573 responses=responses,
2574 deprecated=deprecated,
2575 operation_id=operation_id,
2576 response_model_include=response_model_include,
2577 response_model_exclude=response_model_exclude,
2578 response_model_by_alias=response_model_by_alias,
2579 response_model_exclude_unset=response_model_exclude_unset,
2580 response_model_exclude_defaults=response_model_exclude_defaults,
2581 response_model_exclude_none=response_model_exclude_none,
2582 include_in_schema=include_in_schema,
2583 response_class=response_class,
2584 name=name,
2585 callbacks=callbacks,
2586 openapi_extra=openapi_extra,
2587 generate_unique_id_function=generate_unique_id_function,
2588 )
2590 def delete( 1abcde
2591 self,
2592 path: Annotated[
2593 str,
2594 Doc(
2595 """
2596 The URL path to be used for this *path operation*.
2598 For example, in `http://example.com/items`, the path is `/items`.
2599 """
2600 ),
2601 ],
2602 *,
2603 response_model: Annotated[
2604 Any,
2605 Doc(
2606 """
2607 The type to use for the response.
2609 It could be any valid Pydantic *field* type. So, it doesn't have to
2610 be a Pydantic model, it could be other things, like a `list`, `dict`,
2611 etc.
2613 It will be used for:
2615 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2616 show it as the response (JSON Schema).
2617 * Serialization: you could return an arbitrary object and the
2618 `response_model` would be used to serialize that object into the
2619 corresponding JSON.
2620 * Filtering: the JSON sent to the client will only contain the data
2621 (fields) defined in the `response_model`. If you returned an object
2622 that contains an attribute `password` but the `response_model` does
2623 not include that field, the JSON sent to the client would not have
2624 that `password`.
2625 * Validation: whatever you return will be serialized with the
2626 `response_model`, converting any data as necessary to generate the
2627 corresponding JSON. But if the data in the object returned is not
2628 valid, that would mean a violation of the contract with the client,
2629 so it's an error from the API developer. So, FastAPI will raise an
2630 error and return a 500 error code (Internal Server Error).
2632 Read more about it in the
2633 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2634 """
2635 ),
2636 ] = Default(None),
2637 status_code: Annotated[
2638 Optional[int],
2639 Doc(
2640 """
2641 The default status code to be used for the response.
2643 You could override the status code by returning a response directly.
2645 Read more about it in the
2646 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2647 """
2648 ),
2649 ] = None,
2650 tags: Annotated[
2651 Optional[List[Union[str, Enum]]],
2652 Doc(
2653 """
2654 A list of tags to be applied to the *path operation*.
2656 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2658 Read more about it in the
2659 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2660 """
2661 ),
2662 ] = None,
2663 dependencies: Annotated[
2664 Optional[Sequence[Depends]],
2665 Doc(
2666 """
2667 A list of dependencies (using `Depends()`) to be applied to the
2668 *path operation*.
2670 Read more about it in the
2671 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2672 """
2673 ),
2674 ] = None,
2675 summary: Annotated[
2676 Optional[str],
2677 Doc(
2678 """
2679 A summary for the *path operation*.
2681 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2683 Read more about it in the
2684 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2685 """
2686 ),
2687 ] = None,
2688 description: Annotated[
2689 Optional[str],
2690 Doc(
2691 """
2692 A description for the *path operation*.
2694 If not provided, it will be extracted automatically from the docstring
2695 of the *path operation function*.
2697 It can contain Markdown.
2699 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2701 Read more about it in the
2702 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2703 """
2704 ),
2705 ] = None,
2706 response_description: Annotated[
2707 str,
2708 Doc(
2709 """
2710 The description for the default response.
2712 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2713 """
2714 ),
2715 ] = "Successful Response",
2716 responses: Annotated[
2717 Optional[Dict[Union[int, str], Dict[str, Any]]],
2718 Doc(
2719 """
2720 Additional responses that could be returned by this *path operation*.
2722 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2723 """
2724 ),
2725 ] = None,
2726 deprecated: Annotated[
2727 Optional[bool],
2728 Doc(
2729 """
2730 Mark this *path operation* as deprecated.
2732 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2733 """
2734 ),
2735 ] = None,
2736 operation_id: Annotated[
2737 Optional[str],
2738 Doc(
2739 """
2740 Custom operation ID to be used by this *path operation*.
2742 By default, it is generated automatically.
2744 If you provide a custom operation ID, you need to make sure it is
2745 unique for the whole API.
2747 You can customize the
2748 operation ID generation with the parameter
2749 `generate_unique_id_function` in the `FastAPI` class.
2751 Read more about it in the
2752 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2753 """
2754 ),
2755 ] = None,
2756 response_model_include: Annotated[
2757 Optional[IncEx],
2758 Doc(
2759 """
2760 Configuration passed to Pydantic to include only certain fields in the
2761 response data.
2763 Read more about it in the
2764 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2765 """
2766 ),
2767 ] = None,
2768 response_model_exclude: Annotated[
2769 Optional[IncEx],
2770 Doc(
2771 """
2772 Configuration passed to Pydantic to exclude certain fields in the
2773 response data.
2775 Read more about it in the
2776 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2777 """
2778 ),
2779 ] = None,
2780 response_model_by_alias: Annotated[
2781 bool,
2782 Doc(
2783 """
2784 Configuration passed to Pydantic to define if the response model
2785 should be serialized by alias when an alias is used.
2787 Read more about it in the
2788 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2789 """
2790 ),
2791 ] = True,
2792 response_model_exclude_unset: Annotated[
2793 bool,
2794 Doc(
2795 """
2796 Configuration passed to Pydantic to define if the response data
2797 should have all the fields, including the ones that were not set and
2798 have their default values. This is different from
2799 `response_model_exclude_defaults` in that if the fields are set,
2800 they will be included in the response, even if the value is the same
2801 as the default.
2803 When `True`, default values are omitted from the response.
2805 Read more about it in the
2806 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2807 """
2808 ),
2809 ] = False,
2810 response_model_exclude_defaults: Annotated[
2811 bool,
2812 Doc(
2813 """
2814 Configuration passed to Pydantic to define if the response data
2815 should have all the fields, including the ones that have the same value
2816 as the default. This is different from `response_model_exclude_unset`
2817 in that if the fields are set but contain the same default values,
2818 they will be excluded from the response.
2820 When `True`, default values are omitted from the response.
2822 Read more about it in the
2823 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2824 """
2825 ),
2826 ] = False,
2827 response_model_exclude_none: Annotated[
2828 bool,
2829 Doc(
2830 """
2831 Configuration passed to Pydantic to define if the response data should
2832 exclude fields set to `None`.
2834 This is much simpler (less smart) than `response_model_exclude_unset`
2835 and `response_model_exclude_defaults`. You probably want to use one of
2836 those two instead of this one, as those allow returning `None` values
2837 when it makes sense.
2839 Read more about it in the
2840 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2841 """
2842 ),
2843 ] = False,
2844 include_in_schema: Annotated[
2845 bool,
2846 Doc(
2847 """
2848 Include this *path operation* in the generated OpenAPI schema.
2850 This affects the generated OpenAPI (e.g. visible at `/docs`).
2852 Read more about it in the
2853 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
2854 """
2855 ),
2856 ] = True,
2857 response_class: Annotated[
2858 Type[Response],
2859 Doc(
2860 """
2861 Response class to be used for this *path operation*.
2863 This will not be used if you return a response directly.
2865 Read more about it in the
2866 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2867 """
2868 ),
2869 ] = Default(JSONResponse),
2870 name: Annotated[
2871 Optional[str],
2872 Doc(
2873 """
2874 Name for this *path operation*. Only used internally.
2875 """
2876 ),
2877 ] = None,
2878 callbacks: Annotated[
2879 Optional[List[BaseRoute]],
2880 Doc(
2881 """
2882 List of *path operations* that will be used as OpenAPI callbacks.
2884 This is only for OpenAPI documentation, the callbacks won't be used
2885 directly.
2887 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2889 Read more about it in the
2890 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2891 """
2892 ),
2893 ] = None,
2894 openapi_extra: Annotated[
2895 Optional[Dict[str, Any]],
2896 Doc(
2897 """
2898 Extra metadata to be included in the OpenAPI schema for this *path
2899 operation*.
2901 Read more about it in the
2902 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2903 """
2904 ),
2905 ] = None,
2906 generate_unique_id_function: Annotated[
2907 Callable[[routing.APIRoute], str],
2908 Doc(
2909 """
2910 Customize the function used to generate unique IDs for the *path
2911 operations* shown in the generated OpenAPI.
2913 This is particularly useful when automatically generating clients or
2914 SDKs for your API.
2916 Read more about it in the
2917 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2918 """
2919 ),
2920 ] = Default(generate_unique_id),
2921 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2922 """
2923 Add a *path operation* using an HTTP DELETE operation.
2925 ## Example
2927 ```python
2928 from fastapi import FastAPI
2930 app = FastAPI()
2932 @app.delete("/items/{item_id}")
2933 def delete_item(item_id: str):
2934 return {"message": "Item deleted"}
2935 ```
2936 """
2937 return self.router.delete( 1abcde
2938 path,
2939 response_model=response_model,
2940 status_code=status_code,
2941 tags=tags,
2942 dependencies=dependencies,
2943 summary=summary,
2944 description=description,
2945 response_description=response_description,
2946 responses=responses,
2947 deprecated=deprecated,
2948 operation_id=operation_id,
2949 response_model_include=response_model_include,
2950 response_model_exclude=response_model_exclude,
2951 response_model_by_alias=response_model_by_alias,
2952 response_model_exclude_unset=response_model_exclude_unset,
2953 response_model_exclude_defaults=response_model_exclude_defaults,
2954 response_model_exclude_none=response_model_exclude_none,
2955 include_in_schema=include_in_schema,
2956 response_class=response_class,
2957 name=name,
2958 callbacks=callbacks,
2959 openapi_extra=openapi_extra,
2960 generate_unique_id_function=generate_unique_id_function,
2961 )
2963 def options( 1abcde
2964 self,
2965 path: Annotated[
2966 str,
2967 Doc(
2968 """
2969 The URL path to be used for this *path operation*.
2971 For example, in `http://example.com/items`, the path is `/items`.
2972 """
2973 ),
2974 ],
2975 *,
2976 response_model: Annotated[
2977 Any,
2978 Doc(
2979 """
2980 The type to use for the response.
2982 It could be any valid Pydantic *field* type. So, it doesn't have to
2983 be a Pydantic model, it could be other things, like a `list`, `dict`,
2984 etc.
2986 It will be used for:
2988 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2989 show it as the response (JSON Schema).
2990 * Serialization: you could return an arbitrary object and the
2991 `response_model` would be used to serialize that object into the
2992 corresponding JSON.
2993 * Filtering: the JSON sent to the client will only contain the data
2994 (fields) defined in the `response_model`. If you returned an object
2995 that contains an attribute `password` but the `response_model` does
2996 not include that field, the JSON sent to the client would not have
2997 that `password`.
2998 * Validation: whatever you return will be serialized with the
2999 `response_model`, converting any data as necessary to generate the
3000 corresponding JSON. But if the data in the object returned is not
3001 valid, that would mean a violation of the contract with the client,
3002 so it's an error from the API developer. So, FastAPI will raise an
3003 error and return a 500 error code (Internal Server Error).
3005 Read more about it in the
3006 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3007 """
3008 ),
3009 ] = Default(None),
3010 status_code: Annotated[
3011 Optional[int],
3012 Doc(
3013 """
3014 The default status code to be used for the response.
3016 You could override the status code by returning a response directly.
3018 Read more about it in the
3019 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3020 """
3021 ),
3022 ] = None,
3023 tags: Annotated[
3024 Optional[List[Union[str, Enum]]],
3025 Doc(
3026 """
3027 A list of tags to be applied to the *path operation*.
3029 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3031 Read more about it in the
3032 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3033 """
3034 ),
3035 ] = None,
3036 dependencies: Annotated[
3037 Optional[Sequence[Depends]],
3038 Doc(
3039 """
3040 A list of dependencies (using `Depends()`) to be applied to the
3041 *path operation*.
3043 Read more about it in the
3044 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3045 """
3046 ),
3047 ] = None,
3048 summary: Annotated[
3049 Optional[str],
3050 Doc(
3051 """
3052 A summary for the *path operation*.
3054 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3056 Read more about it in the
3057 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3058 """
3059 ),
3060 ] = None,
3061 description: Annotated[
3062 Optional[str],
3063 Doc(
3064 """
3065 A description for the *path operation*.
3067 If not provided, it will be extracted automatically from the docstring
3068 of the *path operation function*.
3070 It can contain Markdown.
3072 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3074 Read more about it in the
3075 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3076 """
3077 ),
3078 ] = None,
3079 response_description: Annotated[
3080 str,
3081 Doc(
3082 """
3083 The description for the default response.
3085 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3086 """
3087 ),
3088 ] = "Successful Response",
3089 responses: Annotated[
3090 Optional[Dict[Union[int, str], Dict[str, Any]]],
3091 Doc(
3092 """
3093 Additional responses that could be returned by this *path operation*.
3095 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3096 """
3097 ),
3098 ] = None,
3099 deprecated: Annotated[
3100 Optional[bool],
3101 Doc(
3102 """
3103 Mark this *path operation* as deprecated.
3105 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3106 """
3107 ),
3108 ] = None,
3109 operation_id: Annotated[
3110 Optional[str],
3111 Doc(
3112 """
3113 Custom operation ID to be used by this *path operation*.
3115 By default, it is generated automatically.
3117 If you provide a custom operation ID, you need to make sure it is
3118 unique for the whole API.
3120 You can customize the
3121 operation ID generation with the parameter
3122 `generate_unique_id_function` in the `FastAPI` class.
3124 Read more about it in the
3125 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3126 """
3127 ),
3128 ] = None,
3129 response_model_include: Annotated[
3130 Optional[IncEx],
3131 Doc(
3132 """
3133 Configuration passed to Pydantic to include only certain fields in the
3134 response data.
3136 Read more about it in the
3137 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3138 """
3139 ),
3140 ] = None,
3141 response_model_exclude: Annotated[
3142 Optional[IncEx],
3143 Doc(
3144 """
3145 Configuration passed to Pydantic to exclude certain fields in the
3146 response data.
3148 Read more about it in the
3149 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3150 """
3151 ),
3152 ] = None,
3153 response_model_by_alias: Annotated[
3154 bool,
3155 Doc(
3156 """
3157 Configuration passed to Pydantic to define if the response model
3158 should be serialized by alias when an alias is used.
3160 Read more about it in the
3161 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3162 """
3163 ),
3164 ] = True,
3165 response_model_exclude_unset: Annotated[
3166 bool,
3167 Doc(
3168 """
3169 Configuration passed to Pydantic to define if the response data
3170 should have all the fields, including the ones that were not set and
3171 have their default values. This is different from
3172 `response_model_exclude_defaults` in that if the fields are set,
3173 they will be included in the response, even if the value is the same
3174 as the default.
3176 When `True`, default values are omitted from the response.
3178 Read more about it in the
3179 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3180 """
3181 ),
3182 ] = False,
3183 response_model_exclude_defaults: Annotated[
3184 bool,
3185 Doc(
3186 """
3187 Configuration passed to Pydantic to define if the response data
3188 should have all the fields, including the ones that have the same value
3189 as the default. This is different from `response_model_exclude_unset`
3190 in that if the fields are set but contain the same default values,
3191 they will be excluded from the response.
3193 When `True`, default values are omitted from the response.
3195 Read more about it in the
3196 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3197 """
3198 ),
3199 ] = False,
3200 response_model_exclude_none: Annotated[
3201 bool,
3202 Doc(
3203 """
3204 Configuration passed to Pydantic to define if the response data should
3205 exclude fields set to `None`.
3207 This is much simpler (less smart) than `response_model_exclude_unset`
3208 and `response_model_exclude_defaults`. You probably want to use one of
3209 those two instead of this one, as those allow returning `None` values
3210 when it makes sense.
3212 Read more about it in the
3213 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3214 """
3215 ),
3216 ] = False,
3217 include_in_schema: Annotated[
3218 bool,
3219 Doc(
3220 """
3221 Include this *path operation* in the generated OpenAPI schema.
3223 This affects the generated OpenAPI (e.g. visible at `/docs`).
3225 Read more about it in the
3226 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
3227 """
3228 ),
3229 ] = True,
3230 response_class: Annotated[
3231 Type[Response],
3232 Doc(
3233 """
3234 Response class to be used for this *path operation*.
3236 This will not be used if you return a response directly.
3238 Read more about it in the
3239 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3240 """
3241 ),
3242 ] = Default(JSONResponse),
3243 name: Annotated[
3244 Optional[str],
3245 Doc(
3246 """
3247 Name for this *path operation*. Only used internally.
3248 """
3249 ),
3250 ] = None,
3251 callbacks: Annotated[
3252 Optional[List[BaseRoute]],
3253 Doc(
3254 """
3255 List of *path operations* that will be used as OpenAPI callbacks.
3257 This is only for OpenAPI documentation, the callbacks won't be used
3258 directly.
3260 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3262 Read more about it in the
3263 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3264 """
3265 ),
3266 ] = None,
3267 openapi_extra: Annotated[
3268 Optional[Dict[str, Any]],
3269 Doc(
3270 """
3271 Extra metadata to be included in the OpenAPI schema for this *path
3272 operation*.
3274 Read more about it in the
3275 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3276 """
3277 ),
3278 ] = None,
3279 generate_unique_id_function: Annotated[
3280 Callable[[routing.APIRoute], str],
3281 Doc(
3282 """
3283 Customize the function used to generate unique IDs for the *path
3284 operations* shown in the generated OpenAPI.
3286 This is particularly useful when automatically generating clients or
3287 SDKs for your API.
3289 Read more about it in the
3290 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3291 """
3292 ),
3293 ] = Default(generate_unique_id),
3294 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3295 """
3296 Add a *path operation* using an HTTP OPTIONS operation.
3298 ## Example
3300 ```python
3301 from fastapi import FastAPI
3303 app = FastAPI()
3305 @app.options("/items/")
3306 def get_item_options():
3307 return {"additions": ["Aji", "Guacamole"]}
3308 ```
3309 """
3310 return self.router.options( 1abcde
3311 path,
3312 response_model=response_model,
3313 status_code=status_code,
3314 tags=tags,
3315 dependencies=dependencies,
3316 summary=summary,
3317 description=description,
3318 response_description=response_description,
3319 responses=responses,
3320 deprecated=deprecated,
3321 operation_id=operation_id,
3322 response_model_include=response_model_include,
3323 response_model_exclude=response_model_exclude,
3324 response_model_by_alias=response_model_by_alias,
3325 response_model_exclude_unset=response_model_exclude_unset,
3326 response_model_exclude_defaults=response_model_exclude_defaults,
3327 response_model_exclude_none=response_model_exclude_none,
3328 include_in_schema=include_in_schema,
3329 response_class=response_class,
3330 name=name,
3331 callbacks=callbacks,
3332 openapi_extra=openapi_extra,
3333 generate_unique_id_function=generate_unique_id_function,
3334 )
3336 def head( 1abcde
3337 self,
3338 path: Annotated[
3339 str,
3340 Doc(
3341 """
3342 The URL path to be used for this *path operation*.
3344 For example, in `http://example.com/items`, the path is `/items`.
3345 """
3346 ),
3347 ],
3348 *,
3349 response_model: Annotated[
3350 Any,
3351 Doc(
3352 """
3353 The type to use for the response.
3355 It could be any valid Pydantic *field* type. So, it doesn't have to
3356 be a Pydantic model, it could be other things, like a `list`, `dict`,
3357 etc.
3359 It will be used for:
3361 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3362 show it as the response (JSON Schema).
3363 * Serialization: you could return an arbitrary object and the
3364 `response_model` would be used to serialize that object into the
3365 corresponding JSON.
3366 * Filtering: the JSON sent to the client will only contain the data
3367 (fields) defined in the `response_model`. If you returned an object
3368 that contains an attribute `password` but the `response_model` does
3369 not include that field, the JSON sent to the client would not have
3370 that `password`.
3371 * Validation: whatever you return will be serialized with the
3372 `response_model`, converting any data as necessary to generate the
3373 corresponding JSON. But if the data in the object returned is not
3374 valid, that would mean a violation of the contract with the client,
3375 so it's an error from the API developer. So, FastAPI will raise an
3376 error and return a 500 error code (Internal Server Error).
3378 Read more about it in the
3379 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3380 """
3381 ),
3382 ] = Default(None),
3383 status_code: Annotated[
3384 Optional[int],
3385 Doc(
3386 """
3387 The default status code to be used for the response.
3389 You could override the status code by returning a response directly.
3391 Read more about it in the
3392 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3393 """
3394 ),
3395 ] = None,
3396 tags: Annotated[
3397 Optional[List[Union[str, Enum]]],
3398 Doc(
3399 """
3400 A list of tags to be applied to the *path operation*.
3402 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3404 Read more about it in the
3405 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3406 """
3407 ),
3408 ] = None,
3409 dependencies: Annotated[
3410 Optional[Sequence[Depends]],
3411 Doc(
3412 """
3413 A list of dependencies (using `Depends()`) to be applied to the
3414 *path operation*.
3416 Read more about it in the
3417 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3418 """
3419 ),
3420 ] = None,
3421 summary: Annotated[
3422 Optional[str],
3423 Doc(
3424 """
3425 A summary for the *path operation*.
3427 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3429 Read more about it in the
3430 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3431 """
3432 ),
3433 ] = None,
3434 description: Annotated[
3435 Optional[str],
3436 Doc(
3437 """
3438 A description for the *path operation*.
3440 If not provided, it will be extracted automatically from the docstring
3441 of the *path operation function*.
3443 It can contain Markdown.
3445 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3447 Read more about it in the
3448 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3449 """
3450 ),
3451 ] = None,
3452 response_description: Annotated[
3453 str,
3454 Doc(
3455 """
3456 The description for the default response.
3458 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3459 """
3460 ),
3461 ] = "Successful Response",
3462 responses: Annotated[
3463 Optional[Dict[Union[int, str], Dict[str, Any]]],
3464 Doc(
3465 """
3466 Additional responses that could be returned by this *path operation*.
3468 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3469 """
3470 ),
3471 ] = None,
3472 deprecated: Annotated[
3473 Optional[bool],
3474 Doc(
3475 """
3476 Mark this *path operation* as deprecated.
3478 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3479 """
3480 ),
3481 ] = None,
3482 operation_id: Annotated[
3483 Optional[str],
3484 Doc(
3485 """
3486 Custom operation ID to be used by this *path operation*.
3488 By default, it is generated automatically.
3490 If you provide a custom operation ID, you need to make sure it is
3491 unique for the whole API.
3493 You can customize the
3494 operation ID generation with the parameter
3495 `generate_unique_id_function` in the `FastAPI` class.
3497 Read more about it in the
3498 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3499 """
3500 ),
3501 ] = None,
3502 response_model_include: Annotated[
3503 Optional[IncEx],
3504 Doc(
3505 """
3506 Configuration passed to Pydantic to include only certain fields in the
3507 response data.
3509 Read more about it in the
3510 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3511 """
3512 ),
3513 ] = None,
3514 response_model_exclude: Annotated[
3515 Optional[IncEx],
3516 Doc(
3517 """
3518 Configuration passed to Pydantic to exclude certain fields in the
3519 response data.
3521 Read more about it in the
3522 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3523 """
3524 ),
3525 ] = None,
3526 response_model_by_alias: Annotated[
3527 bool,
3528 Doc(
3529 """
3530 Configuration passed to Pydantic to define if the response model
3531 should be serialized by alias when an alias is used.
3533 Read more about it in the
3534 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3535 """
3536 ),
3537 ] = True,
3538 response_model_exclude_unset: Annotated[
3539 bool,
3540 Doc(
3541 """
3542 Configuration passed to Pydantic to define if the response data
3543 should have all the fields, including the ones that were not set and
3544 have their default values. This is different from
3545 `response_model_exclude_defaults` in that if the fields are set,
3546 they will be included in the response, even if the value is the same
3547 as the default.
3549 When `True`, default values are omitted from the response.
3551 Read more about it in the
3552 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3553 """
3554 ),
3555 ] = False,
3556 response_model_exclude_defaults: Annotated[
3557 bool,
3558 Doc(
3559 """
3560 Configuration passed to Pydantic to define if the response data
3561 should have all the fields, including the ones that have the same value
3562 as the default. This is different from `response_model_exclude_unset`
3563 in that if the fields are set but contain the same default values,
3564 they will be excluded from the response.
3566 When `True`, default values are omitted from the response.
3568 Read more about it in the
3569 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3570 """
3571 ),
3572 ] = False,
3573 response_model_exclude_none: Annotated[
3574 bool,
3575 Doc(
3576 """
3577 Configuration passed to Pydantic to define if the response data should
3578 exclude fields set to `None`.
3580 This is much simpler (less smart) than `response_model_exclude_unset`
3581 and `response_model_exclude_defaults`. You probably want to use one of
3582 those two instead of this one, as those allow returning `None` values
3583 when it makes sense.
3585 Read more about it in the
3586 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3587 """
3588 ),
3589 ] = False,
3590 include_in_schema: Annotated[
3591 bool,
3592 Doc(
3593 """
3594 Include this *path operation* in the generated OpenAPI schema.
3596 This affects the generated OpenAPI (e.g. visible at `/docs`).
3598 Read more about it in the
3599 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
3600 """
3601 ),
3602 ] = True,
3603 response_class: Annotated[
3604 Type[Response],
3605 Doc(
3606 """
3607 Response class to be used for this *path operation*.
3609 This will not be used if you return a response directly.
3611 Read more about it in the
3612 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3613 """
3614 ),
3615 ] = Default(JSONResponse),
3616 name: Annotated[
3617 Optional[str],
3618 Doc(
3619 """
3620 Name for this *path operation*. Only used internally.
3621 """
3622 ),
3623 ] = None,
3624 callbacks: Annotated[
3625 Optional[List[BaseRoute]],
3626 Doc(
3627 """
3628 List of *path operations* that will be used as OpenAPI callbacks.
3630 This is only for OpenAPI documentation, the callbacks won't be used
3631 directly.
3633 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3635 Read more about it in the
3636 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3637 """
3638 ),
3639 ] = None,
3640 openapi_extra: Annotated[
3641 Optional[Dict[str, Any]],
3642 Doc(
3643 """
3644 Extra metadata to be included in the OpenAPI schema for this *path
3645 operation*.
3647 Read more about it in the
3648 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3649 """
3650 ),
3651 ] = None,
3652 generate_unique_id_function: Annotated[
3653 Callable[[routing.APIRoute], str],
3654 Doc(
3655 """
3656 Customize the function used to generate unique IDs for the *path
3657 operations* shown in the generated OpenAPI.
3659 This is particularly useful when automatically generating clients or
3660 SDKs for your API.
3662 Read more about it in the
3663 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3664 """
3665 ),
3666 ] = Default(generate_unique_id),
3667 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3668 """
3669 Add a *path operation* using an HTTP HEAD operation.
3671 ## Example
3673 ```python
3674 from fastapi import FastAPI, Response
3676 app = FastAPI()
3678 @app.head("/items/", status_code=204)
3679 def get_items_headers(response: Response):
3680 response.headers["X-Cat-Dog"] = "Alone in the world"
3681 ```
3682 """
3683 return self.router.head( 1abcde
3684 path,
3685 response_model=response_model,
3686 status_code=status_code,
3687 tags=tags,
3688 dependencies=dependencies,
3689 summary=summary,
3690 description=description,
3691 response_description=response_description,
3692 responses=responses,
3693 deprecated=deprecated,
3694 operation_id=operation_id,
3695 response_model_include=response_model_include,
3696 response_model_exclude=response_model_exclude,
3697 response_model_by_alias=response_model_by_alias,
3698 response_model_exclude_unset=response_model_exclude_unset,
3699 response_model_exclude_defaults=response_model_exclude_defaults,
3700 response_model_exclude_none=response_model_exclude_none,
3701 include_in_schema=include_in_schema,
3702 response_class=response_class,
3703 name=name,
3704 callbacks=callbacks,
3705 openapi_extra=openapi_extra,
3706 generate_unique_id_function=generate_unique_id_function,
3707 )
3709 def patch( 1abcde
3710 self,
3711 path: Annotated[
3712 str,
3713 Doc(
3714 """
3715 The URL path to be used for this *path operation*.
3717 For example, in `http://example.com/items`, the path is `/items`.
3718 """
3719 ),
3720 ],
3721 *,
3722 response_model: Annotated[
3723 Any,
3724 Doc(
3725 """
3726 The type to use for the response.
3728 It could be any valid Pydantic *field* type. So, it doesn't have to
3729 be a Pydantic model, it could be other things, like a `list`, `dict`,
3730 etc.
3732 It will be used for:
3734 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3735 show it as the response (JSON Schema).
3736 * Serialization: you could return an arbitrary object and the
3737 `response_model` would be used to serialize that object into the
3738 corresponding JSON.
3739 * Filtering: the JSON sent to the client will only contain the data
3740 (fields) defined in the `response_model`. If you returned an object
3741 that contains an attribute `password` but the `response_model` does
3742 not include that field, the JSON sent to the client would not have
3743 that `password`.
3744 * Validation: whatever you return will be serialized with the
3745 `response_model`, converting any data as necessary to generate the
3746 corresponding JSON. But if the data in the object returned is not
3747 valid, that would mean a violation of the contract with the client,
3748 so it's an error from the API developer. So, FastAPI will raise an
3749 error and return a 500 error code (Internal Server Error).
3751 Read more about it in the
3752 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3753 """
3754 ),
3755 ] = Default(None),
3756 status_code: Annotated[
3757 Optional[int],
3758 Doc(
3759 """
3760 The default status code to be used for the response.
3762 You could override the status code by returning a response directly.
3764 Read more about it in the
3765 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3766 """
3767 ),
3768 ] = None,
3769 tags: Annotated[
3770 Optional[List[Union[str, Enum]]],
3771 Doc(
3772 """
3773 A list of tags to be applied to the *path operation*.
3775 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3777 Read more about it in the
3778 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3779 """
3780 ),
3781 ] = None,
3782 dependencies: Annotated[
3783 Optional[Sequence[Depends]],
3784 Doc(
3785 """
3786 A list of dependencies (using `Depends()`) to be applied to the
3787 *path operation*.
3789 Read more about it in the
3790 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3791 """
3792 ),
3793 ] = None,
3794 summary: Annotated[
3795 Optional[str],
3796 Doc(
3797 """
3798 A summary for the *path operation*.
3800 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3802 Read more about it in the
3803 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3804 """
3805 ),
3806 ] = None,
3807 description: Annotated[
3808 Optional[str],
3809 Doc(
3810 """
3811 A description for the *path operation*.
3813 If not provided, it will be extracted automatically from the docstring
3814 of the *path operation function*.
3816 It can contain Markdown.
3818 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3820 Read more about it in the
3821 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3822 """
3823 ),
3824 ] = None,
3825 response_description: Annotated[
3826 str,
3827 Doc(
3828 """
3829 The description for the default response.
3831 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3832 """
3833 ),
3834 ] = "Successful Response",
3835 responses: Annotated[
3836 Optional[Dict[Union[int, str], Dict[str, Any]]],
3837 Doc(
3838 """
3839 Additional responses that could be returned by this *path operation*.
3841 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3842 """
3843 ),
3844 ] = None,
3845 deprecated: Annotated[
3846 Optional[bool],
3847 Doc(
3848 """
3849 Mark this *path operation* as deprecated.
3851 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3852 """
3853 ),
3854 ] = None,
3855 operation_id: Annotated[
3856 Optional[str],
3857 Doc(
3858 """
3859 Custom operation ID to be used by this *path operation*.
3861 By default, it is generated automatically.
3863 If you provide a custom operation ID, you need to make sure it is
3864 unique for the whole API.
3866 You can customize the
3867 operation ID generation with the parameter
3868 `generate_unique_id_function` in the `FastAPI` class.
3870 Read more about it in the
3871 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3872 """
3873 ),
3874 ] = None,
3875 response_model_include: Annotated[
3876 Optional[IncEx],
3877 Doc(
3878 """
3879 Configuration passed to Pydantic to include only certain fields in the
3880 response data.
3882 Read more about it in the
3883 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3884 """
3885 ),
3886 ] = None,
3887 response_model_exclude: Annotated[
3888 Optional[IncEx],
3889 Doc(
3890 """
3891 Configuration passed to Pydantic to exclude certain fields in the
3892 response data.
3894 Read more about it in the
3895 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3896 """
3897 ),
3898 ] = None,
3899 response_model_by_alias: Annotated[
3900 bool,
3901 Doc(
3902 """
3903 Configuration passed to Pydantic to define if the response model
3904 should be serialized by alias when an alias is used.
3906 Read more about it in the
3907 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3908 """
3909 ),
3910 ] = True,
3911 response_model_exclude_unset: Annotated[
3912 bool,
3913 Doc(
3914 """
3915 Configuration passed to Pydantic to define if the response data
3916 should have all the fields, including the ones that were not set and
3917 have their default values. This is different from
3918 `response_model_exclude_defaults` in that if the fields are set,
3919 they will be included in the response, even if the value is the same
3920 as the default.
3922 When `True`, default values are omitted from the response.
3924 Read more about it in the
3925 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3926 """
3927 ),
3928 ] = False,
3929 response_model_exclude_defaults: Annotated[
3930 bool,
3931 Doc(
3932 """
3933 Configuration passed to Pydantic to define if the response data
3934 should have all the fields, including the ones that have the same value
3935 as the default. This is different from `response_model_exclude_unset`
3936 in that if the fields are set but contain the same default values,
3937 they will be excluded from the response.
3939 When `True`, default values are omitted from the response.
3941 Read more about it in the
3942 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3943 """
3944 ),
3945 ] = False,
3946 response_model_exclude_none: Annotated[
3947 bool,
3948 Doc(
3949 """
3950 Configuration passed to Pydantic to define if the response data should
3951 exclude fields set to `None`.
3953 This is much simpler (less smart) than `response_model_exclude_unset`
3954 and `response_model_exclude_defaults`. You probably want to use one of
3955 those two instead of this one, as those allow returning `None` values
3956 when it makes sense.
3958 Read more about it in the
3959 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3960 """
3961 ),
3962 ] = False,
3963 include_in_schema: Annotated[
3964 bool,
3965 Doc(
3966 """
3967 Include this *path operation* in the generated OpenAPI schema.
3969 This affects the generated OpenAPI (e.g. visible at `/docs`).
3971 Read more about it in the
3972 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
3973 """
3974 ),
3975 ] = True,
3976 response_class: Annotated[
3977 Type[Response],
3978 Doc(
3979 """
3980 Response class to be used for this *path operation*.
3982 This will not be used if you return a response directly.
3984 Read more about it in the
3985 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3986 """
3987 ),
3988 ] = Default(JSONResponse),
3989 name: Annotated[
3990 Optional[str],
3991 Doc(
3992 """
3993 Name for this *path operation*. Only used internally.
3994 """
3995 ),
3996 ] = None,
3997 callbacks: Annotated[
3998 Optional[List[BaseRoute]],
3999 Doc(
4000 """
4001 List of *path operations* that will be used as OpenAPI callbacks.
4003 This is only for OpenAPI documentation, the callbacks won't be used
4004 directly.
4006 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4008 Read more about it in the
4009 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4010 """
4011 ),
4012 ] = None,
4013 openapi_extra: Annotated[
4014 Optional[Dict[str, Any]],
4015 Doc(
4016 """
4017 Extra metadata to be included in the OpenAPI schema for this *path
4018 operation*.
4020 Read more about it in the
4021 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4022 """
4023 ),
4024 ] = None,
4025 generate_unique_id_function: Annotated[
4026 Callable[[routing.APIRoute], str],
4027 Doc(
4028 """
4029 Customize the function used to generate unique IDs for the *path
4030 operations* shown in the generated OpenAPI.
4032 This is particularly useful when automatically generating clients or
4033 SDKs for your API.
4035 Read more about it in the
4036 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4037 """
4038 ),
4039 ] = Default(generate_unique_id),
4040 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4041 """
4042 Add a *path operation* using an HTTP PATCH operation.
4044 ## Example
4046 ```python
4047 from fastapi import FastAPI
4048 from pydantic import BaseModel
4050 class Item(BaseModel):
4051 name: str
4052 description: str | None = None
4054 app = FastAPI()
4056 @app.patch("/items/")
4057 def update_item(item: Item):
4058 return {"message": "Item updated in place"}
4059 ```
4060 """
4061 return self.router.patch( 1abcde
4062 path,
4063 response_model=response_model,
4064 status_code=status_code,
4065 tags=tags,
4066 dependencies=dependencies,
4067 summary=summary,
4068 description=description,
4069 response_description=response_description,
4070 responses=responses,
4071 deprecated=deprecated,
4072 operation_id=operation_id,
4073 response_model_include=response_model_include,
4074 response_model_exclude=response_model_exclude,
4075 response_model_by_alias=response_model_by_alias,
4076 response_model_exclude_unset=response_model_exclude_unset,
4077 response_model_exclude_defaults=response_model_exclude_defaults,
4078 response_model_exclude_none=response_model_exclude_none,
4079 include_in_schema=include_in_schema,
4080 response_class=response_class,
4081 name=name,
4082 callbacks=callbacks,
4083 openapi_extra=openapi_extra,
4084 generate_unique_id_function=generate_unique_id_function,
4085 )
4087 def trace( 1abcde
4088 self,
4089 path: Annotated[
4090 str,
4091 Doc(
4092 """
4093 The URL path to be used for this *path operation*.
4095 For example, in `http://example.com/items`, the path is `/items`.
4096 """
4097 ),
4098 ],
4099 *,
4100 response_model: Annotated[
4101 Any,
4102 Doc(
4103 """
4104 The type to use for the response.
4106 It could be any valid Pydantic *field* type. So, it doesn't have to
4107 be a Pydantic model, it could be other things, like a `list`, `dict`,
4108 etc.
4110 It will be used for:
4112 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
4113 show it as the response (JSON Schema).
4114 * Serialization: you could return an arbitrary object and the
4115 `response_model` would be used to serialize that object into the
4116 corresponding JSON.
4117 * Filtering: the JSON sent to the client will only contain the data
4118 (fields) defined in the `response_model`. If you returned an object
4119 that contains an attribute `password` but the `response_model` does
4120 not include that field, the JSON sent to the client would not have
4121 that `password`.
4122 * Validation: whatever you return will be serialized with the
4123 `response_model`, converting any data as necessary to generate the
4124 corresponding JSON. But if the data in the object returned is not
4125 valid, that would mean a violation of the contract with the client,
4126 so it's an error from the API developer. So, FastAPI will raise an
4127 error and return a 500 error code (Internal Server Error).
4129 Read more about it in the
4130 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
4131 """
4132 ),
4133 ] = Default(None),
4134 status_code: Annotated[
4135 Optional[int],
4136 Doc(
4137 """
4138 The default status code to be used for the response.
4140 You could override the status code by returning a response directly.
4142 Read more about it in the
4143 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
4144 """
4145 ),
4146 ] = None,
4147 tags: Annotated[
4148 Optional[List[Union[str, Enum]]],
4149 Doc(
4150 """
4151 A list of tags to be applied to the *path operation*.
4153 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4155 Read more about it in the
4156 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
4157 """
4158 ),
4159 ] = None,
4160 dependencies: Annotated[
4161 Optional[Sequence[Depends]],
4162 Doc(
4163 """
4164 A list of dependencies (using `Depends()`) to be applied to the
4165 *path operation*.
4167 Read more about it in the
4168 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
4169 """
4170 ),
4171 ] = None,
4172 summary: Annotated[
4173 Optional[str],
4174 Doc(
4175 """
4176 A summary for the *path operation*.
4178 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4180 Read more about it in the
4181 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4182 """
4183 ),
4184 ] = None,
4185 description: Annotated[
4186 Optional[str],
4187 Doc(
4188 """
4189 A description for the *path operation*.
4191 If not provided, it will be extracted automatically from the docstring
4192 of the *path operation function*.
4194 It can contain Markdown.
4196 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4198 Read more about it in the
4199 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4200 """
4201 ),
4202 ] = None,
4203 response_description: Annotated[
4204 str,
4205 Doc(
4206 """
4207 The description for the default response.
4209 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4210 """
4211 ),
4212 ] = "Successful Response",
4213 responses: Annotated[
4214 Optional[Dict[Union[int, str], Dict[str, Any]]],
4215 Doc(
4216 """
4217 Additional responses that could be returned by this *path operation*.
4219 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4220 """
4221 ),
4222 ] = None,
4223 deprecated: Annotated[
4224 Optional[bool],
4225 Doc(
4226 """
4227 Mark this *path operation* as deprecated.
4229 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4230 """
4231 ),
4232 ] = None,
4233 operation_id: Annotated[
4234 Optional[str],
4235 Doc(
4236 """
4237 Custom operation ID to be used by this *path operation*.
4239 By default, it is generated automatically.
4241 If you provide a custom operation ID, you need to make sure it is
4242 unique for the whole API.
4244 You can customize the
4245 operation ID generation with the parameter
4246 `generate_unique_id_function` in the `FastAPI` class.
4248 Read more about it in the
4249 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4250 """
4251 ),
4252 ] = None,
4253 response_model_include: Annotated[
4254 Optional[IncEx],
4255 Doc(
4256 """
4257 Configuration passed to Pydantic to include only certain fields in the
4258 response data.
4260 Read more about it in the
4261 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4262 """
4263 ),
4264 ] = None,
4265 response_model_exclude: Annotated[
4266 Optional[IncEx],
4267 Doc(
4268 """
4269 Configuration passed to Pydantic to exclude certain fields in the
4270 response data.
4272 Read more about it in the
4273 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4274 """
4275 ),
4276 ] = None,
4277 response_model_by_alias: Annotated[
4278 bool,
4279 Doc(
4280 """
4281 Configuration passed to Pydantic to define if the response model
4282 should be serialized by alias when an alias is used.
4284 Read more about it in the
4285 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4286 """
4287 ),
4288 ] = True,
4289 response_model_exclude_unset: Annotated[
4290 bool,
4291 Doc(
4292 """
4293 Configuration passed to Pydantic to define if the response data
4294 should have all the fields, including the ones that were not set and
4295 have their default values. This is different from
4296 `response_model_exclude_defaults` in that if the fields are set,
4297 they will be included in the response, even if the value is the same
4298 as the default.
4300 When `True`, default values are omitted from the response.
4302 Read more about it in the
4303 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4304 """
4305 ),
4306 ] = False,
4307 response_model_exclude_defaults: Annotated[
4308 bool,
4309 Doc(
4310 """
4311 Configuration passed to Pydantic to define if the response data
4312 should have all the fields, including the ones that have the same value
4313 as the default. This is different from `response_model_exclude_unset`
4314 in that if the fields are set but contain the same default values,
4315 they will be excluded from the response.
4317 When `True`, default values are omitted from the response.
4319 Read more about it in the
4320 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4321 """
4322 ),
4323 ] = False,
4324 response_model_exclude_none: Annotated[
4325 bool,
4326 Doc(
4327 """
4328 Configuration passed to Pydantic to define if the response data should
4329 exclude fields set to `None`.
4331 This is much simpler (less smart) than `response_model_exclude_unset`
4332 and `response_model_exclude_defaults`. You probably want to use one of
4333 those two instead of this one, as those allow returning `None` values
4334 when it makes sense.
4336 Read more about it in the
4337 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
4338 """
4339 ),
4340 ] = False,
4341 include_in_schema: Annotated[
4342 bool,
4343 Doc(
4344 """
4345 Include this *path operation* in the generated OpenAPI schema.
4347 This affects the generated OpenAPI (e.g. visible at `/docs`).
4349 Read more about it in the
4350 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
4351 """
4352 ),
4353 ] = True,
4354 response_class: Annotated[
4355 Type[Response],
4356 Doc(
4357 """
4358 Response class to be used for this *path operation*.
4360 This will not be used if you return a response directly.
4362 Read more about it in the
4363 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
4364 """
4365 ),
4366 ] = Default(JSONResponse),
4367 name: Annotated[
4368 Optional[str],
4369 Doc(
4370 """
4371 Name for this *path operation*. Only used internally.
4372 """
4373 ),
4374 ] = None,
4375 callbacks: Annotated[
4376 Optional[List[BaseRoute]],
4377 Doc(
4378 """
4379 List of *path operations* that will be used as OpenAPI callbacks.
4381 This is only for OpenAPI documentation, the callbacks won't be used
4382 directly.
4384 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4386 Read more about it in the
4387 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4388 """
4389 ),
4390 ] = None,
4391 openapi_extra: Annotated[
4392 Optional[Dict[str, Any]],
4393 Doc(
4394 """
4395 Extra metadata to be included in the OpenAPI schema for this *path
4396 operation*.
4398 Read more about it in the
4399 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4400 """
4401 ),
4402 ] = None,
4403 generate_unique_id_function: Annotated[
4404 Callable[[routing.APIRoute], str],
4405 Doc(
4406 """
4407 Customize the function used to generate unique IDs for the *path
4408 operations* shown in the generated OpenAPI.
4410 This is particularly useful when automatically generating clients or
4411 SDKs for your API.
4413 Read more about it in the
4414 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4415 """
4416 ),
4417 ] = Default(generate_unique_id),
4418 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4419 """
4420 Add a *path operation* using an HTTP TRACE operation.
4422 ## Example
4424 ```python
4425 from fastapi import FastAPI
4427 app = FastAPI()
4429 @app.put("/items/{item_id}")
4430 def trace_item(item_id: str):
4431 return None
4432 ```
4433 """
4434 return self.router.trace( 1abcde
4435 path,
4436 response_model=response_model,
4437 status_code=status_code,
4438 tags=tags,
4439 dependencies=dependencies,
4440 summary=summary,
4441 description=description,
4442 response_description=response_description,
4443 responses=responses,
4444 deprecated=deprecated,
4445 operation_id=operation_id,
4446 response_model_include=response_model_include,
4447 response_model_exclude=response_model_exclude,
4448 response_model_by_alias=response_model_by_alias,
4449 response_model_exclude_unset=response_model_exclude_unset,
4450 response_model_exclude_defaults=response_model_exclude_defaults,
4451 response_model_exclude_none=response_model_exclude_none,
4452 include_in_schema=include_in_schema,
4453 response_class=response_class,
4454 name=name,
4455 callbacks=callbacks,
4456 openapi_extra=openapi_extra,
4457 generate_unique_id_function=generate_unique_id_function,
4458 )
4460 def websocket_route( 1abcde
4461 self, path: str, name: Union[str, None] = None
4462 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4463 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde
4464 self.router.add_websocket_route(path, func, name=name) 1abcde
4465 return func 1abcde
4467 return decorator 1abcde
4469 @deprecated( 1abcde
4470 """
4471 on_event is deprecated, use lifespan event handlers instead.
4473 Read more about it in the
4474 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
4475 """
4476 )
4477 def on_event( 1abcde
4478 self,
4479 event_type: Annotated[
4480 str,
4481 Doc(
4482 """
4483 The type of event. `startup` or `shutdown`.
4484 """
4485 ),
4486 ],
4487 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4488 """
4489 Add an event handler for the application.
4491 `on_event` is deprecated, use `lifespan` event handlers instead.
4493 Read more about it in the
4494 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated).
4495 """
4496 return self.router.on_event(event_type) 2a , ^ b - bbc . lbd / vbe : Fb
4498 def middleware( 1abcde
4499 self,
4500 middleware_type: Annotated[
4501 str,
4502 Doc(
4503 """
4504 The type of middleware. Currently only supports `http`.
4505 """
4506 ),
4507 ],
4508 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4509 """
4510 Add a middleware to the application.
4512 Read more about it in the
4513 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/).
4515 ## Example
4517 ```python
4518 import time
4520 from fastapi import FastAPI, Request
4522 app = FastAPI()
4525 @app.middleware("http")
4526 async def add_process_time_header(request: Request, call_next):
4527 start_time = time.time()
4528 response = await call_next(request)
4529 process_time = time.time() - start_time
4530 response.headers["X-Process-Time"] = str(process_time)
4531 return response
4532 ```
4533 """
4535 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde
4536 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcde
4537 return func 1abcde
4539 return decorator 1abcde
4541 def exception_handler( 1abcde
4542 self,
4543 exc_class_or_status_code: Annotated[
4544 Union[int, Type[Exception]],
4545 Doc(
4546 """
4547 The Exception class this would handle, or a status code.
4548 """
4549 ),
4550 ],
4551 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4552 """
4553 Add an exception handler to the app.
4555 Read more about it in the
4556 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).
4558 ## Example
4560 ```python
4561 from fastapi import FastAPI, Request
4562 from fastapi.responses import JSONResponse
4565 class UnicornException(Exception):
4566 def __init__(self, name: str):
4567 self.name = name
4570 app = FastAPI()
4573 @app.exception_handler(UnicornException)
4574 async def unicorn_exception_handler(request: Request, exc: UnicornException):
4575 return JSONResponse(
4576 status_code=418,
4577 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."},
4578 )
4579 ```
4580 """
4582 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde
4583 self.add_exception_handler(exc_class_or_status_code, func) 1abcde
4584 return func 1abcde
4586 return decorator 1abcde