Coverage for fastapi/applications.py: 100%

153 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-09-22 00:03 +0000

1from enum import Enum 1abcdef

2from typing import ( 1abcdef

3 Any, 

4 Awaitable, 

5 Callable, 

6 Coroutine, 

7 Dict, 

8 List, 

9 Optional, 

10 Sequence, 

11 Type, 

12 TypeVar, 

13 Union, 

14) 

15 

16from fastapi import routing 1abcdef

17from fastapi.datastructures import Default, DefaultPlaceholder 1abcdef

18from fastapi.exception_handlers import ( 1abcdef

19 http_exception_handler, 

20 request_validation_exception_handler, 

21 websocket_request_validation_exception_handler, 

22) 

23from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcdef

24from fastapi.logger import logger 1abcdef

25from fastapi.openapi.docs import ( 1abcdef

26 get_redoc_html, 

27 get_swagger_ui_html, 

28 get_swagger_ui_oauth2_redirect_html, 

29) 

30from fastapi.openapi.utils import get_openapi 1abcdef

31from fastapi.params import Depends 1abcdef

32from fastapi.types import DecoratedCallable, IncEx 1abcdef

33from fastapi.utils import generate_unique_id 1abcdef

34from starlette.applications import Starlette 1abcdef

35from starlette.datastructures import State 1abcdef

36from starlette.exceptions import HTTPException 1abcdef

37from starlette.middleware import Middleware 1abcdef

38from starlette.middleware.base import BaseHTTPMiddleware 1abcdef

39from starlette.requests import Request 1abcdef

40from starlette.responses import HTMLResponse, JSONResponse, Response 1abcdef

41from starlette.routing import BaseRoute 1abcdef

42from starlette.types import ASGIApp, Lifespan, Receive, Scope, Send 1abcdef

43from typing_extensions import Annotated, Doc, deprecated 1abcdef

44 

45AppType = TypeVar("AppType", bound="FastAPI") 1abcdef

46 

47 

48class FastAPI(Starlette): 1abcdef

49 """ 

50 `FastAPI` app class, the main entrypoint to use FastAPI. 

51 

52 Read more in the 

53 [FastAPI docs for First Steps](https://fastapi.tiangolo.com/tutorial/first-steps/). 

54 

55 ## Example 

56 

57 ```python 

58 from fastapi import FastAPI 

59 

60 app = FastAPI() 

61 ``` 

62 """ 

63 

64 def __init__( 1abcdef

65 self: AppType, 

66 *, 

67 debug: Annotated[ 

68 bool, 

69 Doc( 

70 """ 

71 Boolean indicating if debug tracebacks should be returned on server 

72 errors. 

73 

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. 

85 

86 --- 

87 

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. 

95 

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. 

106 

107 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

108 

109 Read more in the 

110 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

111 

112 **Example** 

113 

114 ```python 

115 from fastapi import FastAPI 

116 

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. 

127 

128 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

129 

130 Read more in the 

131 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

132 

133 **Example** 

134 

135 ```python 

136 from fastapi import FastAPI 

137 

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/)). 

149 

150 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

151 

152 Read more in the 

153 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

154 

155 **Example** 

156 

157 ```python 

158 from fastapi import FastAPI 

159 

160 app = FastAPI( 

161 description=""" 

162 ChimichangApp API helps you do awesome stuff. 🚀 

163 

164 ## Items 

165 

166 You can **read items**. 

167 

168 ## Users 

169 

170 You will be able to: 

171 

172 * **Create users** (_not implemented_). 

173 * **Read users** (_not implemented_). 

174 

175 """ 

176 ) 

177 ``` 

178 ''' 

179 ), 

180 ] = "", 

181 version: Annotated[ 

182 str, 

183 Doc( 

184 """ 

185 The version of the API. 

186 

187 **Note** This is the version of your application, not the version of 

188 the OpenAPI specification nor the version of FastAPI being used. 

189 

190 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

191 

192 Read more in the 

193 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

194 

195 **Example** 

196 

197 ```python 

198 from fastapi import FastAPI 

199 

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. 

210 

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. 

214 

215 Read more in the 

216 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#openapi-url). 

217 

218 **Example** 

219 

220 ```python 

221 from fastapi import FastAPI 

222 

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: 

234 

235 * `@app.get("/users/", tags=["users"])` 

236 * `@app.get("/items/", tags=["items"])` 

237 

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`. 

240 

241 It's not required to specify all the tags used. 

242 

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. 

245 

246 The value of each item is a `dict` containing: 

247 

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. 

259 

260 Read more in the 

261 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-tags). 

262 

263 **Example** 

264 

265 ```python 

266 from fastapi import FastAPI 

267 

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 ] 

282 

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. 

293 

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. 

298 

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 `/`. 

301 

302 Each item in the `list` is a `dict` containing: 

303 

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. 

313 

314 Read more in the 

315 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#additional-servers). 

316 

317 **Example** 

318 

319 ```python 

320 from fastapi import FastAPI 

321 

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. 

338 

339 Read more about it in the 

340 [FastAPI docs for Global Dependencies](https://fastapi.tiangolo.com/tutorial/dependencies/global-dependencies/). 

341 

342 **Example** 

343 

344 ```python 

345 from fastapi import Depends, FastAPI 

346 

347 from .dependencies import func_dep_1, func_dep_2 

348 

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. 

359 

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). 

362 

363 **Example** 

364 

365 ```python 

366 from fastapi import FastAPI 

367 from fastapi.responses import ORJSONResponse 

368 

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. 

380 

381 **Example** 

382 

383 ```python 

384 from fastapi import FastAPI 

385 

386 app = FastAPI(redirect_slashes=True) # the default 

387 

388 @app.get("/items/") 

389 async def read_items(): 

390 return [{"item_id": "Foo"}] 

391 ``` 

392 

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. 

405 

406 The default URL is `/docs`. You can disable it by setting it to `None`. 

407 

408 If `openapi_url` is set to `None`, this will be automatically disabled. 

409 

410 Read more in the 

411 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls). 

412 

413 **Example** 

414 

415 ```python 

416 from fastapi import FastAPI 

417 

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. 

429 

430 The default URL is `/redoc`. You can disable it by setting it to `None`. 

431 

432 If `openapi_url` is set to `None`, this will be automatically disabled. 

433 

434 Read more in the 

435 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls). 

436 

437 **Example** 

438 

439 ```python 

440 from fastapi import FastAPI 

441 

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. 

452 

453 By default it is `/docs/oauth2-redirect`. 

454 

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`. 

465 

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. 

476 

477 In FastAPI you would normally do this with `app.add_middleware()` 

478 instead. 

479 

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. 

495 

496 In FastAPI, you would normally use the decorator 

497 `@app.exception_handler()`. 

498 

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. 

509 

510 You should instead use the `lifespan` handlers. 

511 

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. 

521 

522 You should instead use the `lifespan` handlers. 

523 

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. 

535 

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. 

546 

547 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

548 

549 Read more at the 

550 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

551 

552 **Example** 

553 

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. 

565 

566 It can contain several fields. 

567 

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. 

573 

574 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

575 

576 Read more at the 

577 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

578 

579 **Example** 

580 

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. 

598 

599 It can contain several fields. 

600 

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. 

608 

609 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

610 

611 Read more at the 

612 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

613 

614 **Example** 

615 

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. 

648 

649 Read more about it at the 

650 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/). 

651 

652 **Example** 

653 

654 ```python 

655 from fastapi import FastAPI 

656 

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`. 

668 

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). 

671 

672 **Example** 

673 

674 ```python 

675 from fastapi import FastAPI 

676 

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. 

687 

688 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

689 

690 Read more about it in the 

691 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/). 

692 

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*. 

703 

704 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

705 

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*. 

717 

718 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

719 

720 **Note**: This is available since OpenAPI 3.1.0, FastAPI 0.99.0. 

721 

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. 

733 

734 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

735 

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. 

747 

748 This affects the generated OpenAPI (e.g. visible at `/docs`). 

749 

750 Read more about it in the 

751 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

752 """ 

753 ), 

754 ] = True, 

755 swagger_ui_parameters: Annotated[ 

756 Optional[Dict[str, Any]], 

757 Doc( 

758 """ 

759 Parameters to configure Swagger UI, the autogenerated interactive API 

760 documentation (by default at `/docs`). 

761 

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. 

773 

774 This is particularly useful when automatically generating clients or 

775 SDKs for your API. 

776 

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. 

788 

789 This is particularly useful when automatically generating clients. 

790 

791 For example, if you have a model like: 

792 

793 ```python 

794 from pydantic import BaseModel 

795 

796 class Item(BaseModel): 

797 name: str 

798 tags: list[str] = [] 

799 ``` 

800 

801 When `Item` is used for input, a request body, `tags` is not required, 

802 the client doesn't have to provide it. 

803 

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. 

807 

808 In this case, there would be two different schemas, one for input and 

809 another one for output. 

810 """ 

811 ), 

812 ] = True, 

813 openapi_external_docs: Annotated[ 

814 Optional[Dict[str, Any]], 

815 Doc( 

816 """ 

817 This field allows you to provide additional external documentation links. 

818 If provided, it must be a dictionary containing: 

819 

820 * `description`: A brief description of the external documentation. 

821 * `url`: The URL pointing to the external documentation. The value **MUST** 

822 be a valid URL format. 

823 

824 **Example**: 

825 

826 ```python 

827 from fastapi import FastAPI 

828 

829 external_docs = { 

830 "description": "Detailed API Reference", 

831 "url": "https://example.com/api-docs", 

832 } 

833 

834 app = FastAPI(openapi_external_docs=external_docs) 

835 ``` 

836 """ 

837 ), 

838 ] = None, 

839 **extra: Annotated[ 

840 Any, 

841 Doc( 

842 """ 

843 Extra keyword arguments to be stored in the app, not used by FastAPI 

844 anywhere. 

845 """ 

846 ), 

847 ], 

848 ) -> None: 

849 self.debug = debug 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

850 self.title = title 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

851 self.summary = summary 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

852 self.description = description 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

853 self.version = version 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

854 self.terms_of_service = terms_of_service 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

855 self.contact = contact 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

856 self.license_info = license_info 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

857 self.openapi_url = openapi_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

858 self.openapi_tags = openapi_tags 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

859 self.root_path_in_servers = root_path_in_servers 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

860 self.docs_url = docs_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

861 self.redoc_url = redoc_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

862 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

863 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

864 self.swagger_ui_parameters = swagger_ui_parameters 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

865 self.servers = servers or [] 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

866 self.separate_input_output_schemas = separate_input_output_schemas 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

867 self.openapi_external_docs = openapi_external_docs 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

868 self.extra = extra 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

869 self.openapi_version: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

870 str, 

871 Doc( 

872 """ 

873 The version string of OpenAPI. 

874 

875 FastAPI will generate OpenAPI version 3.1.0, and will output that as 

876 the OpenAPI version. But some tools, even though they might be 

877 compatible with OpenAPI 3.1.0, might not recognize it as a valid. 

878 

879 So you could override this value to trick those tools into using 

880 the generated OpenAPI. Have in mind that this is a hack. But if you 

881 avoid using features added in OpenAPI 3.1.0, it might work for your 

882 use case. 

883 

884 This is not passed as a parameter to the `FastAPI` class to avoid 

885 giving the false idea that FastAPI would generate a different OpenAPI 

886 schema. It is only available as an attribute. 

887 

888 **Example** 

889 

890 ```python 

891 from fastapi import FastAPI 

892 

893 app = FastAPI() 

894 

895 app.openapi_version = "3.0.2" 

896 ``` 

897 """ 

898 ), 

899 ] = "3.1.0" 

900 self.openapi_schema: Optional[Dict[str, Any]] = None 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

901 if self.openapi_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

902 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

903 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

904 # TODO: remove when discarding the openapi_prefix parameter 

905 if openapi_prefix: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

906 logger.warning( 1abcdef

907 '"openapi_prefix" has been deprecated in favor of "root_path", which ' 

908 "follows more closely the ASGI standard, is simpler, and more " 

909 "automatic. Check the docs at " 

910 "https://fastapi.tiangolo.com/advanced/sub-applications/" 

911 ) 

912 self.webhooks: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

913 routing.APIRouter, 

914 Doc( 

915 """ 

916 The `app.webhooks` attribute is an `APIRouter` with the *path 

917 operations* that will be used just for documentation of webhooks. 

918 

919 Read more about it in the 

920 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/). 

921 """ 

922 ), 

923 ] = webhooks or routing.APIRouter() 

924 self.root_path = root_path or openapi_prefix 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

925 self.state: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

926 State, 

927 Doc( 

928 """ 

929 A state object for the application. This is the same object for the 

930 entire application, it doesn't change from request to request. 

931 

932 You normally wouldn't use this in FastAPI, for most of the cases you 

933 would instead use FastAPI dependencies. 

934 

935 This is simply inherited from Starlette. 

936 

937 Read more about it in the 

938 [Starlette docs for Applications](https://www.starlette.io/applications/#storing-state-on-the-app-instance). 

939 """ 

940 ), 

941 ] = State() 

942 self.dependency_overrides: Annotated[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

943 Dict[Callable[..., Any], Callable[..., Any]], 

944 Doc( 

945 """ 

946 A dictionary with overrides for the dependencies. 

947 

948 Each key is the original dependency callable, and the value is the 

949 actual dependency that should be called. 

950 

951 This is for testing, to replace expensive dependencies with testing 

952 versions. 

953 

954 Read more about it in the 

955 [FastAPI docs for Testing Dependencies with Overrides](https://fastapi.tiangolo.com/advanced/testing-dependencies/). 

956 """ 

957 ), 

958 ] = {} 

959 self.router: routing.APIRouter = routing.APIRouter( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

960 routes=routes, 

961 redirect_slashes=redirect_slashes, 

962 dependency_overrides_provider=self, 

963 on_startup=on_startup, 

964 on_shutdown=on_shutdown, 

965 lifespan=lifespan, 

966 default_response_class=default_response_class, 

967 dependencies=dependencies, 

968 callbacks=callbacks, 

969 deprecated=deprecated, 

970 include_in_schema=include_in_schema, 

971 responses=responses, 

972 generate_unique_id_function=generate_unique_id_function, 

973 ) 

974 self.exception_handlers: Dict[ 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

975 Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]] 

976 ] = {} if exception_handlers is None else dict(exception_handlers) 

977 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

978 self.exception_handlers.setdefault( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

979 RequestValidationError, request_validation_exception_handler 

980 ) 

981 self.exception_handlers.setdefault( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

982 WebSocketRequestValidationError, 

983 # Starlette still has incorrect type specification for the handlers 

984 websocket_request_validation_exception_handler, # type: ignore 

985 ) 

986 

987 self.user_middleware: List[Middleware] = ( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

988 [] if middleware is None else list(middleware) 

989 ) 

990 self.middleware_stack: Union[ASGIApp, None] = None 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

991 self.setup() 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

992 

993 def openapi(self) -> Dict[str, Any]: 1abcdef

994 """ 

995 Generate the OpenAPI schema of the application. This is called by FastAPI 

996 internally. 

997 

998 The first time it is called it stores the result in the attribute 

999 `app.openapi_schema`, and next times it is called, it just returns that same 

1000 result. To avoid the cost of generating the schema every time. 

1001 

1002 If you need to modify the generated OpenAPI schema, you could modify it. 

1003 

1004 Read more in the 

1005 [FastAPI docs for OpenAPI](https://fastapi.tiangolo.com/how-to/extending-openapi/). 

1006 """ 

1007 if not self.openapi_schema: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1008 self.openapi_schema = get_openapi( 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1009 title=self.title, 

1010 version=self.version, 

1011 openapi_version=self.openapi_version, 

1012 summary=self.summary, 

1013 description=self.description, 

1014 terms_of_service=self.terms_of_service, 

1015 contact=self.contact, 

1016 license_info=self.license_info, 

1017 routes=self.routes, 

1018 webhooks=self.webhooks.routes, 

1019 tags=self.openapi_tags, 

1020 servers=self.servers, 

1021 separate_input_output_schemas=self.separate_input_output_schemas, 

1022 external_docs=self.openapi_external_docs, 

1023 ) 

1024 return self.openapi_schema 2,f-f.f/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidieifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1025 

1026 def setup(self) -> None: 1abcdef

1027 if self.openapi_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

1028 urls = (server_data.get("url") for server_data in self.servers) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1029 server_urls = {url for url in urls if url} 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1030 

1031 async def openapi(req: Request) -> JSONResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1032 root_path = req.scope.get("root_path", "").rstrip("/") 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1033 if root_path not in server_urls: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1034 if root_path and self.root_path_in_servers: 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1035 self.servers.insert(0, {"url": root_path}) 2Jf1fKfLf2fMf3fNfOf4fPf5fQfRf6fSf7fTfUf8fVf9fWfXf!fYf#fZf0f$f

1036 server_urls.add(root_path) 2Jf1fKfLf2fMf3fNfOf4fPf5fQfRf6fSf7fTfUf8fVf9fWfXf!fYf#fZf0f$f

1037 return JSONResponse(self.openapi()) 2,f-f.fht/f:f;f=f?f@f[f]f^f_f`fJf{f|f}f~fagbgm ' n o p q r ( cgdgegfggghgigjgkglgmgngs t ogpgqgrgsgtgugvgwgxgygzgAgu BgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g1fKfLf%f%g'g(g)g*g+g,g-gg .g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh3tfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h2f`h{h|h}h~haibicidiiteifigihiiijikiliminioiMfpiqirisitiuiv ) w x y z A * viwixiyiziAiBiCiDiEiFiGiB C HiIiJiKiLiMiNiOiPiQiRiSiTiD UiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3fNfOf'f`i{i|i}i~iajbjcjh djejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxj4tyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknk4fokpkqkrksktkukvkwkjtxkykzkAkBkCkDkEkFkGkHkPfIkJkKkLkMkNkE + F G H I J , OkPkQkRkSkTkUkVkWkXkYkZkK L 0k1k2k3k- . 4k5k6k7k8k9k!k#k$kM %k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnl5fQfRf(folplqlrlsltlulvli wlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQl5tRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGm6fHmImJmKmLmMmNmOmPmktQmRmSmTmUmVmWmXmYmZm0mSf1m2m3m4m5m6mN / O P Q R S : 7m8m9m!m#m$m%m'm(m)m*m+mT U ,m-m.m/m; = :m;m=m?m@m[m]m^m_mV `m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGn7fTfUf)fHnInJnKnLnMnNnOnj PnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n6t!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo8f0o1o2o3o4o5o6o7o8olt9o!o#o$o%o'o(o)o*o+o,oVf-o.o/o:o;o=oW ? X Y Z 0 1 @ ?o@o[o]o^o_o`o{o|o}o~oap2 3 bpcpdpep[ ] fpgphpipjpkplpmpnp4 opppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp9fWfXf*f0p1p2p3p4p5p6p7pk 8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p7t]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q!f,q-q.q/q:q;q=q?q@qmt[q]q^q_q`q{q|q}q~qarbrYfcrdrerfrgrhr5 ^ 6 7 8 9 ! _ irjrkrlrmrnrorprqrrrsrtr# $ urvrwrxr` { yrzrArBrCrDrErFrGr% HrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r#fZf0f+f,r-r.r/r:r;r=r?rl @r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjsks8tlsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~sat$fbtctdtetftgt

1038 

1039 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1040 if self.openapi_url and self.docs_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

1041 

1042 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1043 root_path = req.scope.get("root_path", "").rstrip("/") 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt

1044 openapi_url = root_path + self.openapi_url 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt

1045 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt

1046 if oauth2_redirect_url: 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt

1047 oauth2_redirect_url = root_path + oauth2_redirect_url 2ntotptg qtrtstttutvth wtxtytztAtBti CtDtEtFtGtHtj ItJtKtLtMtNtk OtPtQtRtStTtl UtVtWt

1048 return get_swagger_ui_html( 2ntotXtptg qtrtstttutYtvth wtxtytztAtZtBti CtDtEtFtGt0tHtj ItJtKtLtMt1tNtk OtPtQtRtSt2tTtl UtVtWt

1049 openapi_url=openapi_url, 

1050 title=f"{self.title} - Swagger UI", 

1051 oauth2_redirect_url=oauth2_redirect_url, 

1052 init_oauth=self.swagger_ui_init_oauth, 

1053 swagger_ui_parameters=self.swagger_ui_parameters, 

1054 ) 

1055 

1056 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1057 

1058 if self.swagger_ui_oauth2_redirect_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1059 

1060 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1061 return get_swagger_ui_oauth2_redirect_html() 2(t)t*t+t,t-t.t/t:t;t=t?t

1062 

1063 self.add_route( 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1064 self.swagger_ui_oauth2_redirect_url, 

1065 swagger_ui_redirect, 

1066 include_in_schema=False, 

1067 ) 

1068 if self.openapi_url and self.redoc_url: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g Df#b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h Ef|baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i FfAcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j Gf4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k Hf|c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l IfBdBfCfCdSbDdEdFdGd

1069 

1070 async def redoc_html(req: Request) -> HTMLResponse: 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1071 root_path = req.scope.get("root_path", "").rstrip("/") 29tg !th #ti $tj %tk 'tl

1072 openapi_url = root_path + self.openapi_url 29tg !th #ti $tj %tk 'tl

1073 return get_redoc_html( 29tg !th #ti $tj %tk 'tl

1074 openapi_url=openapi_url, title=f"{self.title} - ReDoc" 

1075 ) 

1076 

1077 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a TbUbVbWbXbYbZbm ' n o p q r ( 0b1bHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3b3d4d5d6d7d4b5b6b7b| hb8b9b!bibu g #b8d9d$bjb%b'b(bb )b*b+b,b-b.b/bv ) w x y z A * :b;b!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?b`d{d|d}d~d@b[b]b^b} ob_b`b{bpbD h |baebe}bqb~bacbcc ccdcecfcgchcicE + F G H I J , jckccedeeefegeheiejekelemeneoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpc. qcrcscyezeAeBeCetcucvcwc~ vbxcyczcwbM i AcDeEeBcxbCcDcEcFcd GcHcIcJcKcLcMcN / O P Q R S : NcOcFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTc= UcVcWc1e2e3e4e5eXcYcZc0cabCb1c2c3cDbV j 4c6e7e5cEb6c7c8c9ce !c#c$c%c'c(c)cW ? X Y Z 0 1 @ *c+c8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:c] ;c=c?c^e_e`e{e|e@c[c]c^cbbJb_c`c{cKb4 k |c}e~e}cLb~cadbdcdf ddedfdgdhdidjd5 ^ 6 7 8 9 ! _ kdldafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqd{ rdsdtdwfxfyfzfAfudvdwdxdcbQbydzdAdRb% l BdBfCfCdSbDdEdFdGd

1078 

1079 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 1abcdef

1080 if self.root_path: 2a uuvuwuxuyuzuAu,fBuCu-f.fDuht/f:f;f=fEuFuGuHu?fIuJuKuLu@tMuTbUb@fNuOu[f9tnt(tPuVbWbQu]fRuSuTu^f_fUuVuot)tXbYbZbWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrv`fsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWv[tJfXv{fYvZv0v|f1v2v3v4v5v6v7v8v9v}f!v#v$v%v'v(v~f)v*vag+v,v-v.v/v:v;v=vbg?vm ' n o p q r ( @vcgdg[veg]v^v_v`v{vfg|v}v~vawbwcwdwewfwgwgg0b1bhghwiwjwigkwlwmwnwjgowXtpwqwkglgrwmgswngdbebfbs t gbtwoguwvwwwpgxwywzwAwBwqgCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxrgoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSx2b3bTxUxsgVxtgWxugvgXxYxZx0x1x2x3xwg4x5x6x7x8x9x!x#x$x%xxg'xyg(x)x*x+x,x-x.x/x:x;x=x?x@x[xzg]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByAgCy4bDyEyFyGyHy5b6b7b| hb8bIy9b!bibu BgJyKyCgLyMyDgNyOyEgPyQyFgRySyGgTyUyHgVyWyIgXyYyJgZy0yKg1y2yLg3y4yMg5y6yNg7y8y9y!yOg#y$y%y'yPg(y)y*y+yQg,y-y.yRg/y:y;ySg=y?y@yTg[y]y^yUg_y`y{yVg|y}y~yWgazbzczdzezfzgzhzizXgjzkzlzYgmzZgnzozpzqzrzsztz0guzvzwzxzyzzzAzBzCz1gDzEzFz2gGz3gHzIzJz4gKzLzMz5gNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z6g,z-z.z/z:z7g;zpt=z?z8g@z[z]z^z9g_z`z!g{z|z#g}z~z$gaAbAcAdAeAfAgAhAiAjAkA1flAmA]tKf^tLf_t%fnAoApAqArAsAtAuAvAwAxA%gyAzAAABACADAEAFAGAHAIAJAKALAMANAOA'gPAQARASATAUAVAWAXAYAZA0A1A2A(g)g3A4A5A6A*g7A8A9A+g!A#A$A,g-g%Ag Df#b'Aqt(Art)Ast*A+A,A-A.g.A/A:A;A/g=A:g?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeB;gfB=ggB?ghB@giB[g]gjB^gkBlBmBnBoBpB_gqBrBsB`gtB{g|guBvB}gwB~gxByBzBABahBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBbhUBchVBdhWBehXB3tYBfhZB0Bgh1Bhh2Bih3Bjh4Bkh5B6B7B8Blh9B!Bmh#B$Bnh%B'B(Bohph)B*B+B,B-Bqh.B/B:B;Brh=B?B@B[Bsh]B^B_B`B{Bth|Buh}Bvh~BwhaCxhbCyhzhcCdCAheCBhfCChgCDhhCEhFhGhiCjCHhIhkCJhlCmCnCKhoCpCqCrCsCLhMhNhtCOhuCvCPhwCxCyCzCACQhRhBCCCDCECShFCGCHCICJCKCThLCMCUhVhNCOCPCQCRCWhSCTCUCXhVCYhWCXCYCZhZC0C1C2C0h1h3C4C5C6C7C2h8C9C!C#C3h$C%C'C4h(C)C*C+C,C5h-C.C6h/C:C;C=C?C7h@C[C]C^C_C`C8h{C|C}C~CaDbD9hcDdDeDfDgD!hhDiDjDkDlDmDnDoDpDqD#hrD$hsDtDuD%hvD'hwDxD(hyD)h*hzDAD+hBDCD,hDD-hED.hFD/hGDHDID:hJDKDLDMDNDODPDQD;hRDSDTDUDVDWDXD=hYDZD0D1D2D3D4D5D6D?h7D8D9D!D#D@h$D%D[h'D(D)D*D]h+D^h,D_h2f-D$b.D`h/D:D{h;D=Djb?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiE|hjEkElEmE}hnEoE~hpEqErEsEtEuEvEwExEyEzEAEaiBECEDEEE%b'b(bFEGEHEIEJEKELEMEb NEOEPEQERESETEbiUEVEcidiWEiteifigihiXEYEZE0Eii1E2E3E4E`t5E)b*bji6E7Eki!ttt*t8E+b,b9Eli!E#E$Emini%E'Eut+t-b.b/b(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFoiLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F{tMf)Fpi*F+F,Fqi-F.F/F:F;F=F?F@F[Fri]F^F_F`F{F|Fsi}F~FtiaGbGcGdGeGfGgGhGuiiGv ) w x y z A * jGviwikGxilGmGnGoGpGyiqGrGsGtGuGvGwGxGyGzGzi:b;bAiAGBGCGBiDGEGFGGGCiHGYtIGJGDiEiKGFiLGGikblbmbB C nbMGHiNGOGPGIiQGRGSGTGUGJiVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHKiHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H=b?b$H%HLi'HMi(HNiOi)H*H+H,H-H.H/HPi:H;H=H?H@H[H]H^H_H`HQi{HRi|H}H~HaIbIcIdIeIfIgIhIiIjIkISilImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUITiVI@bWIXIYIZI0I[b]b^b} ob_b1I`b{bpbD Ui2I3IVi4I5IWi6I7IXi8I9IYi!I#IZi$I%I0i'I(I1i)I*I2i+I,I3i-I.I4i/I:I5i;I=I6i?I@I[I]I7i^I_I`I{I8i|I}I~IaJ9ibJcJdJ!ieJfJgJ#ihJiJjJ$ikJlJmJ%inJoJpJ'iqJrJsJ(itJuJvJwJxJyJzJAJBJ)iCJDJEJ*iFJ+iGJHJIJJJKJLJMJ,iNJOJPJQJRJSJTJUJVJ-iWJXJYJ.iZJ/i0J1J2J:i3J4J5J;i6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaK=ibKcKdKeKfK?igKvthKiK@ijKkKlKmK[inKoK]ipKqK^irKsK_itKuKvKwKxKyKzKAKBKCKDK3fEKFK|tNf}tOf~t'fGKHKIKJKKKLKMKNKOKPKQK`iRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K{i8K9K!K#K$K%K'K(K)K*K+K,K-K.K|i}i/K:K;K=K~i?K@K[Kaj]K^K_Kbjcj`Kh Ef|b{Kwt|Kxt}Kyt~KaLbLcLdjdLeLfLgLejhLfjiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLgjyLhjzLijALjjBLkjljCLmjDLELFLGLHLILnjJLKLLLojMLpjqjNLOLrjPLsjQLRLSLTLtjULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$Luj%Lvj'Lwj(Lxj)L4t*Lyj+L,Lzj-LAj.LBj/LCj:LDj;L=L?L@LEj[L]LFj^L_LGj`L{L|LHjIj}L~LaMbMcMJjdMeMfMgMKjhMiMjMkMLjlMmMnMoMpMMjqMNjrMOjsMPjtMQjuMRjSjvMwMTjxMUjyMVjzMWjAMXjYjZjBMCM0j1jDM2jEMFMGM3jHMIMJMKMLM4j5j6jMM7jNMOM8jPMQMRMSMTM9j!jUMVMWMXM#jYMZM0M1M2M3M$j4M5M%j'j6M7M8M9M!M(j#M$M%M)j'M*j(M)M*M+j+M,M-M.M,j-j/M:M;M=M?M.j@M[M]M^M/j_M`M{M:j|M}M~MaNbN;jcNdN=jeNfNgNhNiN?jjNkNlNmNnNoN@jpNqNrNsNtNuN[jvNwNxNyNzN]jANBNCNDNENFNGNHNINJN^jKN_jLNMNNN`jON{jPNQN|jRN}j~jSNTNakUNVNbkWNckXNdkYNekZN0N1Nfk2N3N4N5N6N7N8N9Ngk!N#N$N%N'N(N)Nhk*N+N,N-N.N/N:N;N=Nik?N@N[N]N^Njk_N`Nkk{N|N}N~NlkaOmkbOnk4fcO}bdOokeOfOpkgOhOqbiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOqkEOFOGOHOrkIOJOskKOLOMONOOOPOQOROSOTOUOVOtkWOXOYOZO~bacbc0O1O2O3O4O5O6O7Oc 8O9O!O#O$O%O'Ouk(O)Ovkwk*OjtxkykzkAk+O,O-O.OBk/O:O;O=Oau?OccdcCk@O[ODk#tzt,t]Oecfc^OEk_O`O{OFkGk|O}OAt-tgchcic~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5PHk6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PbuPfaQIkbQcQdQJkeQfQgQhQiQjQkQlQmQKknQoQpQqQrQsQLktQuQMkvQwQxQyQzQAQBQCQNkDQE + F G H I J , EQOkPkFQQkGQHQIQJQKQRkLQMQNQOQPQQQRQSQTQUQSkjckcTkVQWQXQUkYQZQ0Q1QVk2QZt3Q4QWkXk5QYk6QZkrbsbtbK L ub7Q0k8Q9Q!Q1k#Q$Q%Q'Q(Q2k)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R3k2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`Rlcmcnc- ocpc. qcrcsc{R|R4k}R5k~R6k7kaSbScSdSeSfSgS8khSiSjSkSlSmSnSoSpSqS9krS!ksStSuSvSwSxSySzSASBSCSDSESFS#kGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S$k)Stc*S+S,S-S.Sucvcwc~ vbxc/SyczcwbM %k:S;S'k=S?S(k@S[S)k]S^S*k_S`S+k{S|S,k}S~S-kaTbT.kcTdT/keTfT:kgThT;kiTjT=kkTlTmTnT?koTpTqTrT@ksTtTuTvT[kwTxTyT]kzTATBT^kCTDTET_kFTGTHT`kITJTKT{kLTMTNT|kOTPTQTRTSTTTUTVTWT}kXTYTZT~k0Tal1T2T3T4T5T6T7Tbl8T9T!T#T$T%T'T(T)Tcl*T+T,Tdl-Tel.T/T:Tfl;T=T?Tgl@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUhlwUxUyUzUAUilBUBtCUDUjlEUFUGUHUklIUJUllKULUmlMUNUnlOUPUQURUSUTUUUVUWUXUYU5fZU0UcuQfduRfeu(f1U2U3U4U5U6U7U8U9U!U#Uol$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[Upl]U^U_U`U{U|U}U~UaVbVcVdVeVfVqlrlgVhViVjVslkVlVmVtlnVoVpVulvlqVi FfAcrVCtsVDttVEtuVvVwVxVwlyVzVAVBVxlCVylDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVzlTVAlUVBlVVClWVDlElXVFlYVZV0V1V2V3VGl4V5V6VHl7VIlJl8V9VKl!VLl#V$V%V'VMl(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{VNl|VOl}VPl~VQlaW5tbWRlcWdWSleWTlfWUlgWVlhWWliWjWkWlWXlmWnWYloWpWZlqWrWsW0l1ltWuWvWwWxW2lyWzWAWBW3lCWDWEWFW4lGWHWIWJWKW5lLW6lMW7lNW8lOW9lPW!l#lQWRW$lSW%lTW'lUW(lVW)l*l+lWWXW,l-lYW.lZW0W1W/l2W3W4W5W6W:l;l=l7W?l8W9W@l!W#W$W%W'W[l]l(W)W*W+W^l,W-W.W/W:W;W_l=W?W`l{l@W[W]W^W_W|l`W{W|W}l}W~l~WaXbXamcXdXeXfXbmcmgXhXiXjXkXdmlXmXnXoXempXqXrXfmsXtXuXvXwXgmxXyXhmzXAXBXCXDXimEXFXGXHXIXJXjmKXLXMXNXOXPXkmQXRXSXTXUXlmVXWXXXYXZX0X1X2X3X4Xmm5Xnm6X7X8Xom9Xpm!X#Xqm$Xrmsm%X'Xtm(X)Xum*Xvm+Xwm,Xxm-X.X/Xym:X;X=X?X@X[X]X^Xzm_X`X{X|X}X~XaYAmbYcYdYeYfYgYhYiYjYBmkYlYmYnYoYCmpYqYDmrYsYtYuYEmvYFmwYGm6fxYBcyYHmzYAYImBYCYxbDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYCcJmZY0Y1Y2YKm3Y4YLm5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)YMm*Y+Y,Y-YDcEcFc.Y/Y:Y;Y=Y?Y@Y[Yd ]Y^Y_Y`Y{Y|Y}YNm~YaZOmPmbZktQmRmSmTmcZdZeZfZUmgZhZiZjZfukZGcHcVmlZmZWm$tFt.tnZIcJcoZXmpZqZrZYmZmsZtZGt/tKcLcMcuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z0m@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0guSfv01mw0x0y02mz0A0B0C0D0E0F0G0H03mI0J0K0L0M0N04mO0P05mQ0R0S0T0U0V0W0X06mY0N / O P Q R S : Z07m8m009m1020304050!m60708090!0#0$0%0'0(0#mNcOc$m)0*0+0%m,0-0.0/0'm:00t;0=0(m)m?0*m@0+mybzbAbT U Bb[0,m]0^0_0-m`0{0|0}0~0.ma1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1/m:1;1=1?1@1[1]1^1_1`1{1|1}1~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2PcQcRc; ScTc= UcVcWcr2s2:mt2;mu2=m?mv2w2x2y2z2A2B2@mC2D2E2F2G2H2I2J2K2L2[mM2]mN2O2P2Q2R2S2T2U2V2W2X2Y2Z202^m122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2_ma3Xcb3c3d3e3f3YcZc0cabCb1cg32c3cDbV `mh3i3{mj3k3|ml3m3}mn3o3~mp3q3anr3s3bnt3u3cnv3w3dnx3y3enz3A3fnB3C3gnD3E3hnF3G3H3I3inJ3K3L3M3jnN3O3P3Q3knR3S3T3lnU3V3W3mnX3Y3Z3nn031323on334353pn637383qn93!3#3$3%3'3(3)3*3rn+3,3-3sn.3tn/3:3;3=3?3@3[3un]3^3_3`3{3|3}3~3a4vnb4c4d4wne4xnf4g4h4yni4j4k4znl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4AnR4S4T4U4V4BnW4HtX4Y4CnZ4041424Dn3444En5464Fn7484Gn94!4#4$4%4'4(4)4*4+4,47f-4.4huTfiuUfju)f/4:4;4=4?4@4[4]4^4_4`4Hn{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5Inn5o5p5q5r5s5t5u5v5w5x5y5z5A5JnKnB5C5D5E5LnF5G5H5MnI5J5K5NnOnL5j Gf4cM5ItN5JtO5KtP5Q5R5S5PnT5U5V5W5QnX5RnY5Z505152535455565758595!5#5$5%5Sn'5Tn(5Un)5Vn*5WnXn+5Yn,5-5.5/5:5;5Zn=5?5@50n[51n2n]5^53n_54n`5{5|5}55n~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r66ns67nt68nu69nv66tw6!nx6y6#nz6$nA6%nB6'nC6(nD6E6F6G6)nH6I6*nJ6K6+nL6M6N6,n-nO6P6Q6R6S6.nT6U6V6W6/nX6Y6Z606:n1626364656;n66=n76?n86@n96[n!6]n^n#6$6_n%6`n'6{n(6|n)6}n~nao*6+6boco,6do-6.6/6eo:6;6=6?6@6fogoho[6io]6^6jo_6`6{6|6}6kolo~6a7b7c7mod7e7f7g7h7i7noj7k7oopol7m7n7o7p7qoq7r7s7rot7sou7v7w7tox7y7z7A7uovoB7C7D7E7F7woG7H7I7J7xoK7L7M7yoN7O7P7Q7R7zoS7T7AoU7V7W7X7Y7BoZ70717273747Co5767778797!7Do#7$7%7'7(7Eo)7*7+7,7-7.7/7:7;7=7Fo?7Go@7[7]7Ho^7Io_7`7Jo{7KoLo|7}7Mo~7a8Nob8Ooc8Pod8Qoe8f8g8Roh8i8j8k8l8m8n8o8Sop8q8r8s8t8u8v8Tow8x8y8z8A8B8C8D8E8UoF8G8H8I8J8VoK8L8WoM8N8O8P8XoQ8YoR8Zo8fS85cT80oU8V81oW8X8EbY8Z808182838485868788898!8#8$8%8'8(8)8*8+8,86c2o-8.8/8:83o;8=84o?8@8[8]8^8_8`8{8|8}8~8a95ob9c9d9e97c8c9cf9g9h9i9j9k9l9m9e n9o9p9q9r9s9t96ou9v97o8ow9lt9o!o#o$ox9y9z9A9%oB9C9D9E9kuF9!c#c'oG9H9(o%tLt:tI9$c%cJ9)oK9L9M9*o+oN9O9Mt;t'c(c)cP9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!,ol!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!luVfQ!-oR!S!T!.oU!V!W!X!Y!Z!0!1!2!/o3!4!5!6!7!8!:o9!!!;o#!$!%!'!(!)!*!+!=o,!W ? X Y Z 0 1 @ -!?o@o.![o/!:!;!=!?!]o@![!]!^!_!`!{!|!}!~!^o*c+c_oa#b#c#`od#e#f#g#{oh#1ti#j#|o}ok#~ol#apFbGbHb2 3 Ibm#bpn#o#p#cpq#r#s#t#u#dpv#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$eph$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$,c-c.c[ /c:c] ;c=c?cM$N$fpO$gpP$hpipQ$R$S$T$U$V$W$jpX$Y$Z$0$1$2$3$4$5$6$kp7$lp8$9$!$#$$$%$'$($)$*$+$,$-$.$mp/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%npv%@cw%x%y%z%A%[c]c^cbbJb_cB%`c{cKb4 opC%D%ppE%F%qpG%H%rpI%J%spK%L%tpM%N%upO%P%vpQ%R%wpS%T%xpU%V%ypW%X%zpY%Z%Ap0%1%2%3%Bp4%5%6%7%Cp8%9%!%#%Dp$%%%'%Ep(%)%*%Fp+%,%-%Gp.%/%:%Hp;%=%?%Ip@%[%]%Jp^%_%`%{%|%}%~%a'b'Kpc'd'e'Lpf'Mpg'h'i'j'k'l'm'Npn'o'p'q'r's't'u'v'Opw'x'y'Ppz'QpA'B'C'RpD'E'F'SpG'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'Tp$'%'''(')'Up*'Nt+','Vp-'.'/':'Wp;'='Xp?'@'Yp[']'Zp^'_'`'{'|'}'~'a(b(c(d(9fe(f(muWfnuXfou*fg(h(i(j(k(l(m(n(o(p(q(0pr(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(1pI(J(K(L(M(N(O(P(Q(R(S(T(U(V(2p3pW(X(Y(Z(4p0(1(2(5p3(4(5(6p7p6(k Hf|c7(Ot8(Pt9(Qt!(#($(%(8p'((()(*(9p+(!p,(-(.(/(:(;(=(?(@([(](^(_(`({(|(#p}($p~(%pa)'pb)(p)pc)*pd)e)f)g)h)i)+pj)k)l),pm)-p.pn)o)/pp):pq)r)s)t);pu)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)=pN)?pO)@pP)[pQ)7tR)]pS)T)^pU)_pV)`pW){pX)|pY)Z)0)1)}p2)3)~p4)5)aq6)7)8)bqcq9)!)#)$)%)dq')()))*)eq+),)-).)fq/):);)=)?)gq@)hq[)iq])jq^)kq_)lqmq`){)nq|)oq})pq~)qqa*rqsqtqb*c*uqvqd*wqe*f*g*xqh*i*j*k*l*yqzqAqm*Bqn*o*Cqp*q*r*s*t*DqEqu*v*w*x*Fqy*z*A*B*C*D*GqE*F*HqIqG*H*I*J*K*JqL*M*N*KqO*LqP*Q*R*MqS*T*U*V*NqOqW*X*Y*Z*0*Pq1*2*3*4*Qq5*6*7*Rq8*9*!*#*$*Sq%*'*Tq(*)***+*,*Uq-*.*/*:*;*=*Vq?*@*[*]*^*_*Wq`*{*|*}*~*Xqa+b+c+d+e+f+g+h+i+j+Yqk+Zql+m+n+0qo+1qp+q+2qr+3q4qs+t+5qu+v+6qw+7qx+8qy+9qz+A+B+!qC+D+E+F+G+H+I+J+#qK+L+M+N+O+P+Q+$qR+S+T+U+V+W+X+Y+Z+%q0+1+2+3+4+'q5+6+(q7+8+9+!+)q#+*q$++q!f%+}c'+,q(+)+-q*+++Lb,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,~c.qe,f,g,h,/qi,j,:qk,l,m,n,o,p,q,r,s,t,u,v,;qw,x,y,z,adbdcdA,B,C,D,E,F,G,H,f I,J,K,L,M,N,O,=qP,Q,?q@qR,mt[q]q^q_qS,T,U,V,`qW,X,Y,Z,pu0,dded{q1,2,|q'tRt=t3,fdgd4,}q5,6,7,~qar8,9,St?thdidjd!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-brG-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-quYf#-cr$-%-'-dr(-)-*-+-,---.-/-:-er;-=-?-@-[-]-fr^-_-gr`-{-|-}-~-a.b.c.hrd.5 ^ 6 7 8 9 ! _ e.irjrf.krg.h.i.j.k.lrl.m.n.o.p.q.r.s.t.u.mrkdldnrv.w.x.ory.z.A.B.prC.2tD.E.qrrrF.srG.trMbNbOb# $ PbH.urI.J.K.vrL.M.N.O.P.wrQ.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/xrC/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/mdndod` pdqd{ rdsdtd7/8/yr9/zr!/ArBr#/$/%/'/(/)/*/Cr+/,/-/.///:/;/=/?/@/Dr[/Er]/^/_/`/{/|/}/~/a:b:c:d:e:f:Frg:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:GrQ:udR:S:T:U:V:vdwdxdcbQbydW:zdAdRb% HrX:Y:IrZ:0:Jr1:2:Kr3:4:Lr5:6:Mr7:8:Nr9:!:Or#:$:Pr%:':Qr(:):Rr*:+:Sr,:-:Tr.:/:::;:Ur=:?:@:[:Vr]:^:_:`:Wr{:|:}:Xr~:a;b;Yrc;d;e;Zrf;g;h;0ri;j;k;1rl;m;n;2ro;p;q;r;s;t;u;v;w;3rx;y;z;4rA;5rB;C;D;E;F;G;H;6rI;J;K;L;M;N;O;P;Q;7rR;S;T;8rU;9rV;W;X;!rY;Z;0;#r1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;$r{;|;};~;a=%rb=Ttc=d='re=f=g=h=(ri=j=)rk=l=*rm=n=+ro=p=q=r=s=t=u=v=w=x=y=#fz=A=ruZfsu0ftu+fB=C=D=E=F=G=H=I=J=K=L=,rM=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=-r3=4=5=6=7=8=9=!=#=$=%='=(=)=.r/r*=+=,=-=:r.=/=:=;r;===?==r?r@=l IfBd[=Ut]=Vt^=Wt_=`={=|=@r}=~=a?b?[rc?]rd?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?^rt?_ru?`rv?{rw?|r}rx?~ry?z?A?B?C?D?asE?F?G?bsH?csdsI?J?esK?fsL?M?N?O?gsP?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?hs8?is9?js!?ks#?8t$?ls%?'?ms(?ns)?os*?ps+?qs,?-?.?/?rs:?;?ss=???ts@?[?]?usvs^?_?`?{?|?ws}?~?a@b@xsc@d@e@f@ysg@h@i@j@k@zsl@Asm@Bsn@Cso@Dsp@EsFsq@r@Gss@Hst@Isu@Jsv@KsLsMsw@x@NsOsy@Psz@A@B@QsC@D@E@F@G@RsSsTsH@UsI@J@VsK@L@M@N@O@WsXsP@Q@R@S@YsT@U@V@W@X@Y@ZsZ@0@0s1s1@2@3@4@5@2s6@7@8@3s9@4s!@#@$@5s%@'@(@)@6s7s*@+@,@-@.@8s/@:@;@=@9s?@@@[@!s]@^@_@`@{@#s|@}@$s~@a[b[c[d[%se[f[g[h[i[j['sk[l[m[n[o[p[(sq[r[s[t[u[)sv[w[x[y[z[A[B[C[D[E[*sF[+sG[H[I[,sJ[-sK[L[.sM[/s:sN[O[;sP[Q[=sR[?sS[@sT[[sU[V[W[]sX[Y[Z[0[1[2[3[4[^s5[6[7[8[9[![#[_s$[%['[([)[*[+[,[-[`s.[/[:[;[=[{s?[@[|s[[][^[_[}s`[~s{[at$f|[Cd}[bt~[a]ctb]c]Sbd]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]Dddtz]A]B]C]etD]E]ftF]G]H]I]J]K]L]M]N]O]P]Q]gtR]S]T]U]EdFdGdV]W]X]Y]Z]0]1]2]

1081 scope["root_path"] = self.root_path 2[tJf]tKf^tLf_t%f{tMf|tNf}tOf~t'fbuPfcuQfduRfeu(fguSfhuTfiuUfju)fluVfmuWfnuXfou*fquYfruZfsu0ftu+f

1082 await super().__call__(scope, receive, send) 2a uuvuwuxuyuzuAu,fBuCu-f.fDuht/f:f;f=fEuFuGuHu?fIuJuKuLu@tMuTbUb@fNuOu[f9tnt(tPuVbWbQu]fRuSuTu^f_fUuVuot)tXbYbZbWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrv`fsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWv[tJfXv{fYvZv0v|f1v2v3v4v5v6v7v8v9v}f!v#v$v%v'v(v~f)v*vag+v,v-v.v/v:v;v=vbg?vm ' n o p q r ( @vcgdg[veg]v^v_v`v{vfg|v}v~vawbwcwdwewfwgwgg0b1bhghwiwjwigkwlwmwnwjgowXtpwqwkglgrwmgswngdbebfbs t gbtwoguwvwwwpgxwywzwAwBwqgCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxrgoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSx2b3bTxUxsgVxtgWxugvgXxYxZx0x1x2x3xwg4x5x6x7x8x9x!x#x$x%xxg'xyg(x)x*x+x,x-x.x/x:x;x=x?x@x[xzg]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByAgCy4bDyEyFyGyHy5b6b7b| hb8bIy9b!bibu BgJyKyCgLyMyDgNyOyEgPyQyFgRySyGgTyUyHgVyWyIgXyYyJgZy0yKg1y2yLg3y4yMg5y6yNg7y8y9y!yOg#y$y%y'yPg(y)y*y+yQg,y-y.yRg/y:y;ySg=y?y@yTg[y]y^yUg_y`y{yVg|y}y~yWgazbzczdzezfzgzhzizXgjzkzlzYgmzZgnzozpzqzrzsztz0guzvzwzxzyzzzAzBzCz1gDzEzFz2gGz3gHzIzJz4gKzLzMz5gNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z6g,z-z.z/z:z7g;zpt=z?z8g@z[z]z^z9g_z`z!g{z|z#g}z~z$gaAbAcAdAeAfAgAhAiAjAkA1flAmA]tKf^tLf_t%fnAoApAqArAsAtAuAvAwAxA%gyAzAAABACADAEAFAGAHAIAJAKALAMANAOA'gPAQARASATAUAVAWAXAYAZA0A1A2A(g)g3A4A5A6A*g7A8A9A+g!A#A$A,g-g%Ag Df#b'Aqt(Art)Ast*A+A,A-A.g.A/A:A;A/g=A:g?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeB;gfB=ggB?ghB@giB[g]gjB^gkBlBmBnBoBpB_gqBrBsB`gtB{g|guBvB}gwB~gxByBzBABahBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBbhUBchVBdhWBehXB3tYBfhZB0Bgh1Bhh2Bih3Bjh4Bkh5B6B7B8Blh9B!Bmh#B$Bnh%B'B(Bohph)B*B+B,B-Bqh.B/B:B;Brh=B?B@B[Bsh]B^B_B`B{Bth|Buh}Bvh~BwhaCxhbCyhzhcCdCAheCBhfCChgCDhhCEhFhGhiCjCHhIhkCJhlCmCnCKhoCpCqCrCsCLhMhNhtCOhuCvCPhwCxCyCzCACQhRhBCCCDCECShFCGCHCICJCKCThLCMCUhVhNCOCPCQCRCWhSCTCUCXhVCYhWCXCYCZhZC0C1C2C0h1h3C4C5C6C7C2h8C9C!C#C3h$C%C'C4h(C)C*C+C,C5h-C.C6h/C:C;C=C?C7h@C[C]C^C_C`C8h{C|C}C~CaDbD9hcDdDeDfDgD!hhDiDjDkDlDmDnDoDpDqD#hrD$hsDtDuD%hvD'hwDxD(hyD)h*hzDAD+hBDCD,hDD-hED.hFD/hGDHDID:hJDKDLDMDNDODPDQD;hRDSDTDUDVDWDXD=hYDZD0D1D2D3D4D5D6D?h7D8D9D!D#D@h$D%D[h'D(D)D*D]h+D^h,D_h2f-D$b.D`h/D:D{h;D=Djb?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiE|hjEkElEmE}hnEoE~hpEqErEsEtEuEvEwExEyEzEAEaiBECEDEEE%b'b(bFEGEHEIEJEKELEMEb NEOEPEQERESETEbiUEVEcidiWEiteifigihiXEYEZE0Eii1E2E3E4E`t5E)b*bji6E7Eki!ttt*t8E+b,b9Eli!E#E$Emini%E'Eut+t-b.b/b(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFoiLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F{tMf)Fpi*F+F,Fqi-F.F/F:F;F=F?F@F[Fri]F^F_F`F{F|Fsi}F~FtiaGbGcGdGeGfGgGhGuiiGv ) w x y z A * jGviwikGxilGmGnGoGpGyiqGrGsGtGuGvGwGxGyGzGzi:b;bAiAGBGCGBiDGEGFGGGCiHGYtIGJGDiEiKGFiLGGikblbmbB C nbMGHiNGOGPGIiQGRGSGTGUGJiVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHKiHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H=b?b$H%HLi'HMi(HNiOi)H*H+H,H-H.H/HPi:H;H=H?H@H[H]H^H_H`HQi{HRi|H}H~HaIbIcIdIeIfIgIhIiIjIkISilImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUITiVI@bWIXIYIZI0I[b]b^b} ob_b1I`b{bpbD Ui2I3IVi4I5IWi6I7IXi8I9IYi!I#IZi$I%I0i'I(I1i)I*I2i+I,I3i-I.I4i/I:I5i;I=I6i?I@I[I]I7i^I_I`I{I8i|I}I~IaJ9ibJcJdJ!ieJfJgJ#ihJiJjJ$ikJlJmJ%inJoJpJ'iqJrJsJ(itJuJvJwJxJyJzJAJBJ)iCJDJEJ*iFJ+iGJHJIJJJKJLJMJ,iNJOJPJQJRJSJTJUJVJ-iWJXJYJ.iZJ/i0J1J2J:i3J4J5J;i6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaK=ibKcKdKeKfK?igKvthKiK@ijKkKlKmK[inKoK]ipKqK^irKsK_itKuKvKwKxKyKzKAKBKCKDK3fEKFK|tNf}tOf~t'fGKHKIKJKKKLKMKNKOKPKQK`iRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K{i8K9K!K#K$K%K'K(K)K*K+K,K-K.K|i}i/K:K;K=K~i?K@K[Kaj]K^K_Kbjcj`Kh Ef|b{Kwt|Kxt}Kyt~KaLbLcLdjdLeLfLgLejhLfjiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLgjyLhjzLijALjjBLkjljCLmjDLELFLGLHLILnjJLKLLLojMLpjqjNLOLrjPLsjQLRLSLTLtjULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$Luj%Lvj'Lwj(Lxj)L4t*Lyj+L,Lzj-LAj.LBj/LCj:LDj;L=L?L@LEj[L]LFj^L_LGj`L{L|LHjIj}L~LaMbMcMJjdMeMfMgMKjhMiMjMkMLjlMmMnMoMpMMjqMNjrMOjsMPjtMQjuMRjSjvMwMTjxMUjyMVjzMWjAMXjYjZjBMCM0j1jDM2jEMFMGM3jHMIMJMKMLM4j5j6jMM7jNMOM8jPMQMRMSMTM9j!jUMVMWMXM#jYMZM0M1M2M3M$j4M5M%j'j6M7M8M9M!M(j#M$M%M)j'M*j(M)M*M+j+M,M-M.M,j-j/M:M;M=M?M.j@M[M]M^M/j_M`M{M:j|M}M~MaNbN;jcNdN=jeNfNgNhNiN?jjNkNlNmNnNoN@jpNqNrNsNtNuN[jvNwNxNyNzN]jANBNCNDNENFNGNHNINJN^jKN_jLNMNNN`jON{jPNQN|jRN}j~jSNTNakUNVNbkWNckXNdkYNekZN0N1Nfk2N3N4N5N6N7N8N9Ngk!N#N$N%N'N(N)Nhk*N+N,N-N.N/N:N;N=Nik?N@N[N]N^Njk_N`Nkk{N|N}N~NlkaOmkbOnk4fcO}bdOokeOfOpkgOhOqbiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOqkEOFOGOHOrkIOJOskKOLOMONOOOPOQOROSOTOUOVOtkWOXOYOZO~bacbc0O1O2O3O4O5O6O7Oc 8O9O!O#O$O%O'Ouk(O)Ovkwk*OjtxkykzkAk+O,O-O.OBk/O:O;O=Oau?OccdcCk@O[ODk#tzt,t]Oecfc^OEk_O`O{OFkGk|O}OAt-tgchcic~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5PHk6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PbuPfaQIkbQcQdQJkeQfQgQhQiQjQkQlQmQKknQoQpQqQrQsQLktQuQMkvQwQxQyQzQAQBQCQNkDQE + F G H I J , EQOkPkFQQkGQHQIQJQKQRkLQMQNQOQPQQQRQSQTQUQSkjckcTkVQWQXQUkYQZQ0Q1QVk2QZt3Q4QWkXk5QYk6QZkrbsbtbK L ub7Q0k8Q9Q!Q1k#Q$Q%Q'Q(Q2k)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R3k2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`Rlcmcnc- ocpc. qcrcsc{R|R4k}R5k~R6k7kaSbScSdSeSfSgS8khSiSjSkSlSmSnSoSpSqS9krS!ksStSuSvSwSxSySzSASBSCSDSESFS#kGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S$k)Stc*S+S,S-S.Sucvcwc~ vbxc/SyczcwbM %k:S;S'k=S?S(k@S[S)k]S^S*k_S`S+k{S|S,k}S~S-kaTbT.kcTdT/keTfT:kgThT;kiTjT=kkTlTmTnT?koTpTqTrT@ksTtTuTvT[kwTxTyT]kzTATBT^kCTDTET_kFTGTHT`kITJTKT{kLTMTNT|kOTPTQTRTSTTTUTVTWT}kXTYTZT~k0Tal1T2T3T4T5T6T7Tbl8T9T!T#T$T%T'T(T)Tcl*T+T,Tdl-Tel.T/T:Tfl;T=T?Tgl@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUhlwUxUyUzUAUilBUBtCUDUjlEUFUGUHUklIUJUllKULUmlMUNUnlOUPUQURUSUTUUUVUWUXUYU5fZU0UcuQfduRfeu(f1U2U3U4U5U6U7U8U9U!U#Uol$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[Upl]U^U_U`U{U|U}U~UaVbVcVdVeVfVqlrlgVhViVjVslkVlVmVtlnVoVpVulvlqVi FfAcrVCtsVDttVEtuVvVwVxVwlyVzVAVBVxlCVylDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVzlTVAlUVBlVVClWVDlElXVFlYVZV0V1V2V3VGl4V5V6VHl7VIlJl8V9VKl!VLl#V$V%V'VMl(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{VNl|VOl}VPl~VQlaW5tbWRlcWdWSleWTlfWUlgWVlhWWliWjWkWlWXlmWnWYloWpWZlqWrWsW0l1ltWuWvWwWxW2lyWzWAWBW3lCWDWEWFW4lGWHWIWJWKW5lLW6lMW7lNW8lOW9lPW!l#lQWRW$lSW%lTW'lUW(lVW)l*l+lWWXW,l-lYW.lZW0W1W/l2W3W4W5W6W:l;l=l7W?l8W9W@l!W#W$W%W'W[l]l(W)W*W+W^l,W-W.W/W:W;W_l=W?W`l{l@W[W]W^W_W|l`W{W|W}l}W~l~WaXbXamcXdXeXfXbmcmgXhXiXjXkXdmlXmXnXoXempXqXrXfmsXtXuXvXwXgmxXyXhmzXAXBXCXDXimEXFXGXHXIXJXjmKXLXMXNXOXPXkmQXRXSXTXUXlmVXWXXXYXZX0X1X2X3X4Xmm5Xnm6X7X8Xom9Xpm!X#Xqm$Xrmsm%X'Xtm(X)Xum*Xvm+Xwm,Xxm-X.X/Xym:X;X=X?X@X[X]X^Xzm_X`X{X|X}X~XaYAmbYcYdYeYfYgYhYiYjYBmkYlYmYnYoYCmpYqYDmrYsYtYuYEmvYFmwYGm6fxYBcyYHmzYAYImBYCYxbDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYCcJmZY0Y1Y2YKm3Y4YLm5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)YMm*Y+Y,Y-YDcEcFc.Y/Y:Y;Y=Y?Y@Y[Yd ]Y^Y_Y`Y{Y|Y}YNm~YaZOmPmbZktQmRmSmTmcZdZeZfZUmgZhZiZjZfukZGcHcVmlZmZWm$tFt.tnZIcJcoZXmpZqZrZYmZmsZtZGt/tKcLcMcuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z0m@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0guSfv01mw0x0y02mz0A0B0C0D0E0F0G0H03mI0J0K0L0M0N04mO0P05mQ0R0S0T0U0V0W0X06mY0N / O P Q R S : Z07m8m009m1020304050!m60708090!0#0$0%0'0(0#mNcOc$m)0*0+0%m,0-0.0/0'm:00t;0=0(m)m?0*m@0+mybzbAbT U Bb[0,m]0^0_0-m`0{0|0}0~0.ma1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1/m:1;1=1?1@1[1]1^1_1`1{1|1}1~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2PcQcRc; ScTc= UcVcWcr2s2:mt2;mu2=m?mv2w2x2y2z2A2B2@mC2D2E2F2G2H2I2J2K2L2[mM2]mN2O2P2Q2R2S2T2U2V2W2X2Y2Z202^m122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2_ma3Xcb3c3d3e3f3YcZc0cabCb1cg32c3cDbV `mh3i3{mj3k3|ml3m3}mn3o3~mp3q3anr3s3bnt3u3cnv3w3dnx3y3enz3A3fnB3C3gnD3E3hnF3G3H3I3inJ3K3L3M3jnN3O3P3Q3knR3S3T3lnU3V3W3mnX3Y3Z3nn031323on334353pn637383qn93!3#3$3%3'3(3)3*3rn+3,3-3sn.3tn/3:3;3=3?3@3[3un]3^3_3`3{3|3}3~3a4vnb4c4d4wne4xnf4g4h4yni4j4k4znl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4AnR4S4T4U4V4BnW4HtX4Y4CnZ4041424Dn3444En5464Fn7484Gn94!4#4$4%4'4(4)4*4+4,47f-4.4huTfiuUfju)f/4:4;4=4?4@4[4]4^4_4`4Hn{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5Inn5o5p5q5r5s5t5u5v5w5x5y5z5A5JnKnB5C5D5E5LnF5G5H5MnI5J5K5NnOnL5j Gf4cM5ItN5JtO5KtP5Q5R5S5PnT5U5V5W5QnX5RnY5Z505152535455565758595!5#5$5%5Sn'5Tn(5Un)5Vn*5WnXn+5Yn,5-5.5/5:5;5Zn=5?5@50n[51n2n]5^53n_54n`5{5|5}55n~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r66ns67nt68nu69nv66tw6!nx6y6#nz6$nA6%nB6'nC6(nD6E6F6G6)nH6I6*nJ6K6+nL6M6N6,n-nO6P6Q6R6S6.nT6U6V6W6/nX6Y6Z606:n1626364656;n66=n76?n86@n96[n!6]n^n#6$6_n%6`n'6{n(6|n)6}n~nao*6+6boco,6do-6.6/6eo:6;6=6?6@6fogoho[6io]6^6jo_6`6{6|6}6kolo~6a7b7c7mod7e7f7g7h7i7noj7k7oopol7m7n7o7p7qoq7r7s7rot7sou7v7w7tox7y7z7A7uovoB7C7D7E7F7woG7H7I7J7xoK7L7M7yoN7O7P7Q7R7zoS7T7AoU7V7W7X7Y7BoZ70717273747Co5767778797!7Do#7$7%7'7(7Eo)7*7+7,7-7.7/7:7;7=7Fo?7Go@7[7]7Ho^7Io_7`7Jo{7KoLo|7}7Mo~7a8Nob8Ooc8Pod8Qoe8f8g8Roh8i8j8k8l8m8n8o8Sop8q8r8s8t8u8v8Tow8x8y8z8A8B8C8D8E8UoF8G8H8I8J8VoK8L8WoM8N8O8P8XoQ8YoR8Zo8fS85cT80oU8V81oW8X8EbY8Z808182838485868788898!8#8$8%8'8(8)8*8+8,86c2o-8.8/8:83o;8=84o?8@8[8]8^8_8`8{8|8}8~8a95ob9c9d9e97c8c9cf9g9h9i9j9k9l9m9e n9o9p9q9r9s9t96ou9v97o8ow9lt9o!o#o$ox9y9z9A9%oB9C9D9E9kuF9!c#c'oG9H9(o%tLt:tI9$c%cJ9)oK9L9M9*o+oN9O9Mt;t'c(c)cP9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!,ol!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!luVfQ!-oR!S!T!.oU!V!W!X!Y!Z!0!1!2!/o3!4!5!6!7!8!:o9!!!;o#!$!%!'!(!)!*!+!=o,!W ? X Y Z 0 1 @ -!?o@o.![o/!:!;!=!?!]o@![!]!^!_!`!{!|!}!~!^o*c+c_oa#b#c#`od#e#f#g#{oh#1ti#j#|o}ok#~ol#apFbGbHb2 3 Ibm#bpn#o#p#cpq#r#s#t#u#dpv#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$eph$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$,c-c.c[ /c:c] ;c=c?cM$N$fpO$gpP$hpipQ$R$S$T$U$V$W$jpX$Y$Z$0$1$2$3$4$5$6$kp7$lp8$9$!$#$$$%$'$($)$*$+$,$-$.$mp/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%npv%@cw%x%y%z%A%[c]c^cbbJb_cB%`c{cKb4 opC%D%ppE%F%qpG%H%rpI%J%spK%L%tpM%N%upO%P%vpQ%R%wpS%T%xpU%V%ypW%X%zpY%Z%Ap0%1%2%3%Bp4%5%6%7%Cp8%9%!%#%Dp$%%%'%Ep(%)%*%Fp+%,%-%Gp.%/%:%Hp;%=%?%Ip@%[%]%Jp^%_%`%{%|%}%~%a'b'Kpc'd'e'Lpf'Mpg'h'i'j'k'l'm'Npn'o'p'q'r's't'u'v'Opw'x'y'Ppz'QpA'B'C'RpD'E'F'SpG'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'Tp$'%'''(')'Up*'Nt+','Vp-'.'/':'Wp;'='Xp?'@'Yp[']'Zp^'_'`'{'|'}'~'a(b(c(d(9fe(f(muWfnuXfou*fg(h(i(j(k(l(m(n(o(p(q(0pr(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(1pI(J(K(L(M(N(O(P(Q(R(S(T(U(V(2p3pW(X(Y(Z(4p0(1(2(5p3(4(5(6p7p6(k Hf|c7(Ot8(Pt9(Qt!(#($(%(8p'((()(*(9p+(!p,(-(.(/(:(;(=(?(@([(](^(_(`({(|(#p}($p~(%pa)'pb)(p)pc)*pd)e)f)g)h)i)+pj)k)l),pm)-p.pn)o)/pp):pq)r)s)t);pu)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)=pN)?pO)@pP)[pQ)7tR)]pS)T)^pU)_pV)`pW){pX)|pY)Z)0)1)}p2)3)~p4)5)aq6)7)8)bqcq9)!)#)$)%)dq')()))*)eq+),)-).)fq/):);)=)?)gq@)hq[)iq])jq^)kq_)lqmq`){)nq|)oq})pq~)qqa*rqsqtqb*c*uqvqd*wqe*f*g*xqh*i*j*k*l*yqzqAqm*Bqn*o*Cqp*q*r*s*t*DqEqu*v*w*x*Fqy*z*A*B*C*D*GqE*F*HqIqG*H*I*J*K*JqL*M*N*KqO*LqP*Q*R*MqS*T*U*V*NqOqW*X*Y*Z*0*Pq1*2*3*4*Qq5*6*7*Rq8*9*!*#*$*Sq%*'*Tq(*)***+*,*Uq-*.*/*:*;*=*Vq?*@*[*]*^*_*Wq`*{*|*}*~*Xqa+b+c+d+e+f+g+h+i+j+Yqk+Zql+m+n+0qo+1qp+q+2qr+3q4qs+t+5qu+v+6qw+7qx+8qy+9qz+A+B+!qC+D+E+F+G+H+I+J+#qK+L+M+N+O+P+Q+$qR+S+T+U+V+W+X+Y+Z+%q0+1+2+3+4+'q5+6+(q7+8+9+!+)q#+*q$++q!f%+}c'+,q(+)+-q*+++Lb,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,~c.qe,f,g,h,/qi,j,:qk,l,m,n,o,p,q,r,s,t,u,v,;qw,x,y,z,adbdcdA,B,C,D,E,F,G,H,f I,J,K,L,M,N,O,=qP,Q,?q@qR,mt[q]q^q_qS,T,U,V,`qW,X,Y,Z,pu0,dded{q1,2,|q'tRt=t3,fdgd4,}q5,6,7,~qar8,9,St?thdidjd!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-brG-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-quYf#-cr$-%-'-dr(-)-*-+-,---.-/-:-er;-=-?-@-[-]-fr^-_-gr`-{-|-}-~-a.b.c.hrd.5 ^ 6 7 8 9 ! _ e.irjrf.krg.h.i.j.k.lrl.m.n.o.p.q.r.s.t.u.mrkdldnrv.w.x.ory.z.A.B.prC.2tD.E.qrrrF.srG.trMbNbOb# $ PbH.urI.J.K.vrL.M.N.O.P.wrQ.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/xrC/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/mdndod` pdqd{ rdsdtd7/8/yr9/zr!/ArBr#/$/%/'/(/)/*/Cr+/,/-/.///:/;/=/?/@/Dr[/Er]/^/_/`/{/|/}/~/a:b:c:d:e:f:Frg:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:GrQ:udR:S:T:U:V:vdwdxdcbQbydW:zdAdRb% HrX:Y:IrZ:0:Jr1:2:Kr3:4:Lr5:6:Mr7:8:Nr9:!:Or#:$:Pr%:':Qr(:):Rr*:+:Sr,:-:Tr.:/:::;:Ur=:?:@:[:Vr]:^:_:`:Wr{:|:}:Xr~:a;b;Yrc;d;e;Zrf;g;h;0ri;j;k;1rl;m;n;2ro;p;q;r;s;t;u;v;w;3rx;y;z;4rA;5rB;C;D;E;F;G;H;6rI;J;K;L;M;N;O;P;Q;7rR;S;T;8rU;9rV;W;X;!rY;Z;0;#r1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;$r{;|;};~;a=%rb=Ttc=d='re=f=g=h=(ri=j=)rk=l=*rm=n=+ro=p=q=r=s=t=u=v=w=x=y=#fz=A=ruZfsu0ftu+fB=C=D=E=F=G=H=I=J=K=L=,rM=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=-r3=4=5=6=7=8=9=!=#=$=%='=(=)=.r/r*=+=,=-=:r.=/=:=;r;===?==r?r@=l IfBd[=Ut]=Vt^=Wt_=`={=|=@r}=~=a?b?[rc?]rd?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?^rt?_ru?`rv?{rw?|r}rx?~ry?z?A?B?C?D?asE?F?G?bsH?csdsI?J?esK?fsL?M?N?O?gsP?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?hs8?is9?js!?ks#?8t$?ls%?'?ms(?ns)?os*?ps+?qs,?-?.?/?rs:?;?ss=???ts@?[?]?usvs^?_?`?{?|?ws}?~?a@b@xsc@d@e@f@ysg@h@i@j@k@zsl@Asm@Bsn@Cso@Dsp@EsFsq@r@Gss@Hst@Isu@Jsv@KsLsMsw@x@NsOsy@Psz@A@B@QsC@D@E@F@G@RsSsTsH@UsI@J@VsK@L@M@N@O@WsXsP@Q@R@S@YsT@U@V@W@X@Y@ZsZ@0@0s1s1@2@3@4@5@2s6@7@8@3s9@4s!@#@$@5s%@'@(@)@6s7s*@+@,@-@.@8s/@:@;@=@9s?@@@[@!s]@^@_@`@{@#s|@}@$s~@a[b[c[d[%se[f[g[h[i[j['sk[l[m[n[o[p[(sq[r[s[t[u[)sv[w[x[y[z[A[B[C[D[E[*sF[+sG[H[I[,sJ[-sK[L[.sM[/s:sN[O[;sP[Q[=sR[?sS[@sT[[sU[V[W[]sX[Y[Z[0[1[2[3[4[^s5[6[7[8[9[![#[_s$[%['[([)[*[+[,[-[`s.[/[:[;[=[{s?[@[|s[[][^[_[}s`[~s{[at$f|[Cd}[bt~[a]ctb]c]Sbd]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]Dddtz]A]B]C]etD]E]ftF]G]H]I]J]K]L]M]N]O]P]Q]gtR]S]T]U]EdFdGdV]W]X]Y]Z]0]1]2]

1083 

1084 def add_api_route( 1abcdef

1085 self, 

1086 path: str, 

1087 endpoint: Callable[..., Any], 

1088 *, 

1089 response_model: Any = Default(None), 

1090 status_code: Optional[int] = None, 

1091 tags: Optional[List[Union[str, Enum]]] = None, 

1092 dependencies: Optional[Sequence[Depends]] = None, 

1093 summary: Optional[str] = None, 

1094 description: Optional[str] = None, 

1095 response_description: str = "Successful Response", 

1096 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, 

1097 deprecated: Optional[bool] = None, 

1098 methods: Optional[List[str]] = None, 

1099 operation_id: Optional[str] = None, 

1100 response_model_include: Optional[IncEx] = None, 

1101 response_model_exclude: Optional[IncEx] = None, 

1102 response_model_by_alias: bool = True, 

1103 response_model_exclude_unset: bool = False, 

1104 response_model_exclude_defaults: bool = False, 

1105 response_model_exclude_none: bool = False, 

1106 include_in_schema: bool = True, 

1107 response_class: Union[Type[Response], DefaultPlaceholder] = Default( 

1108 JSONResponse 

1109 ), 

1110 name: Optional[str] = None, 

1111 openapi_extra: Optional[Dict[str, Any]] = None, 

1112 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( 

1113 generate_unique_id 

1114 ), 

1115 ) -> None: 

1116 self.router.add_api_route( 1abcdef

1117 path, 

1118 endpoint=endpoint, 

1119 response_model=response_model, 

1120 status_code=status_code, 

1121 tags=tags, 

1122 dependencies=dependencies, 

1123 summary=summary, 

1124 description=description, 

1125 response_description=response_description, 

1126 responses=responses, 

1127 deprecated=deprecated, 

1128 methods=methods, 

1129 operation_id=operation_id, 

1130 response_model_include=response_model_include, 

1131 response_model_exclude=response_model_exclude, 

1132 response_model_by_alias=response_model_by_alias, 

1133 response_model_exclude_unset=response_model_exclude_unset, 

1134 response_model_exclude_defaults=response_model_exclude_defaults, 

1135 response_model_exclude_none=response_model_exclude_none, 

1136 include_in_schema=include_in_schema, 

1137 response_class=response_class, 

1138 name=name, 

1139 openapi_extra=openapi_extra, 

1140 generate_unique_id_function=generate_unique_id_function, 

1141 ) 

1142 

1143 def api_route( 1abcdef

1144 self, 

1145 path: str, 

1146 *, 

1147 response_model: Any = Default(None), 

1148 status_code: Optional[int] = None, 

1149 tags: Optional[List[Union[str, Enum]]] = None, 

1150 dependencies: Optional[Sequence[Depends]] = None, 

1151 summary: Optional[str] = None, 

1152 description: Optional[str] = None, 

1153 response_description: str = "Successful Response", 

1154 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, 

1155 deprecated: Optional[bool] = None, 

1156 methods: Optional[List[str]] = None, 

1157 operation_id: Optional[str] = None, 

1158 response_model_include: Optional[IncEx] = None, 

1159 response_model_exclude: Optional[IncEx] = None, 

1160 response_model_by_alias: bool = True, 

1161 response_model_exclude_unset: bool = False, 

1162 response_model_exclude_defaults: bool = False, 

1163 response_model_exclude_none: bool = False, 

1164 include_in_schema: bool = True, 

1165 response_class: Type[Response] = Default(JSONResponse), 

1166 name: Optional[str] = None, 

1167 openapi_extra: Optional[Dict[str, Any]] = None, 

1168 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( 

1169 generate_unique_id 

1170 ), 

1171 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1172 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef

1173 self.router.add_api_route( 1abcdef

1174 path, 

1175 func, 

1176 response_model=response_model, 

1177 status_code=status_code, 

1178 tags=tags, 

1179 dependencies=dependencies, 

1180 summary=summary, 

1181 description=description, 

1182 response_description=response_description, 

1183 responses=responses, 

1184 deprecated=deprecated, 

1185 methods=methods, 

1186 operation_id=operation_id, 

1187 response_model_include=response_model_include, 

1188 response_model_exclude=response_model_exclude, 

1189 response_model_by_alias=response_model_by_alias, 

1190 response_model_exclude_unset=response_model_exclude_unset, 

1191 response_model_exclude_defaults=response_model_exclude_defaults, 

1192 response_model_exclude_none=response_model_exclude_none, 

1193 include_in_schema=include_in_schema, 

1194 response_class=response_class, 

1195 name=name, 

1196 openapi_extra=openapi_extra, 

1197 generate_unique_id_function=generate_unique_id_function, 

1198 ) 

1199 return func 1abcdef

1200 

1201 return decorator 1abcdef

1202 

1203 def add_api_websocket_route( 1abcdef

1204 self, 

1205 path: str, 

1206 endpoint: Callable[..., Any], 

1207 name: Optional[str] = None, 

1208 *, 

1209 dependencies: Optional[Sequence[Depends]] = None, 

1210 ) -> None: 

1211 self.router.add_api_websocket_route( 1abcdef

1212 path, 

1213 endpoint, 

1214 name=name, 

1215 dependencies=dependencies, 

1216 ) 

1217 

1218 def websocket( 1abcdef

1219 self, 

1220 path: Annotated[ 

1221 str, 

1222 Doc( 

1223 """ 

1224 WebSocket path. 

1225 """ 

1226 ), 

1227 ], 

1228 name: Annotated[ 

1229 Optional[str], 

1230 Doc( 

1231 """ 

1232 A name for the WebSocket. Only used internally. 

1233 """ 

1234 ), 

1235 ] = None, 

1236 *, 

1237 dependencies: Annotated[ 

1238 Optional[Sequence[Depends]], 

1239 Doc( 

1240 """ 

1241 A list of dependencies (using `Depends()`) to be used for this 

1242 WebSocket. 

1243 

1244 Read more about it in the 

1245 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/). 

1246 """ 

1247 ), 

1248 ] = None, 

1249 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1250 """ 

1251 Decorate a WebSocket function. 

1252 

1253 Read more about it in the 

1254 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/). 

1255 

1256 **Example** 

1257 

1258 ```python 

1259 from fastapi import FastAPI, WebSocket 

1260 

1261 app = FastAPI() 

1262 

1263 @app.websocket("/ws") 

1264 async def websocket_endpoint(websocket: WebSocket): 

1265 await websocket.accept() 

1266 while True: 

1267 data = await websocket.receive_text() 

1268 await websocket.send_text(f"Message text was: {data}") 

1269 ``` 

1270 """ 

1271 

1272 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef

1273 self.add_api_websocket_route( 1abcdef

1274 path, 

1275 func, 

1276 name=name, 

1277 dependencies=dependencies, 

1278 ) 

1279 return func 1abcdef

1280 

1281 return decorator 1abcdef

1282 

1283 def include_router( 1abcdef

1284 self, 

1285 router: Annotated[routing.APIRouter, Doc("The `APIRouter` to include.")], 

1286 *, 

1287 prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "", 

1288 tags: Annotated[ 

1289 Optional[List[Union[str, Enum]]], 

1290 Doc( 

1291 """ 

1292 A list of tags to be applied to all the *path operations* in this 

1293 router. 

1294 

1295 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1296 

1297 Read more about it in the 

1298 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1299 """ 

1300 ), 

1301 ] = None, 

1302 dependencies: Annotated[ 

1303 Optional[Sequence[Depends]], 

1304 Doc( 

1305 """ 

1306 A list of dependencies (using `Depends()`) to be applied to all the 

1307 *path operations* in this router. 

1308 

1309 Read more about it in the 

1310 [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies). 

1311 

1312 **Example** 

1313 

1314 ```python 

1315 from fastapi import Depends, FastAPI 

1316 

1317 from .dependencies import get_token_header 

1318 from .internal import admin 

1319 

1320 app = FastAPI() 

1321 

1322 app.include_router( 

1323 admin.router, 

1324 dependencies=[Depends(get_token_header)], 

1325 ) 

1326 ``` 

1327 """ 

1328 ), 

1329 ] = None, 

1330 responses: Annotated[ 

1331 Optional[Dict[Union[int, str], Dict[str, Any]]], 

1332 Doc( 

1333 """ 

1334 Additional responses to be shown in OpenAPI. 

1335 

1336 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1337 

1338 Read more about it in the 

1339 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/). 

1340 

1341 And in the 

1342 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies). 

1343 """ 

1344 ), 

1345 ] = None, 

1346 deprecated: Annotated[ 

1347 Optional[bool], 

1348 Doc( 

1349 """ 

1350 Mark all the *path operations* in this router as deprecated. 

1351 

1352 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1353 

1354 **Example** 

1355 

1356 ```python 

1357 from fastapi import FastAPI 

1358 

1359 from .internal import old_api 

1360 

1361 app = FastAPI() 

1362 

1363 app.include_router( 

1364 old_api.router, 

1365 deprecated=True, 

1366 ) 

1367 ``` 

1368 """ 

1369 ), 

1370 ] = None, 

1371 include_in_schema: Annotated[ 

1372 bool, 

1373 Doc( 

1374 """ 

1375 Include (or not) all the *path operations* in this router in the 

1376 generated OpenAPI schema. 

1377 

1378 This affects the generated OpenAPI (e.g. visible at `/docs`). 

1379 

1380 **Example** 

1381 

1382 ```python 

1383 from fastapi import FastAPI 

1384 

1385 from .internal import old_api 

1386 

1387 app = FastAPI() 

1388 

1389 app.include_router( 

1390 old_api.router, 

1391 include_in_schema=False, 

1392 ) 

1393 ``` 

1394 """ 

1395 ), 

1396 ] = True, 

1397 default_response_class: Annotated[ 

1398 Type[Response], 

1399 Doc( 

1400 """ 

1401 Default response class to be used for the *path operations* in this 

1402 router. 

1403 

1404 Read more in the 

1405 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class). 

1406 

1407 **Example** 

1408 

1409 ```python 

1410 from fastapi import FastAPI 

1411 from fastapi.responses import ORJSONResponse 

1412 

1413 from .internal import old_api 

1414 

1415 app = FastAPI() 

1416 

1417 app.include_router( 

1418 old_api.router, 

1419 default_response_class=ORJSONResponse, 

1420 ) 

1421 ``` 

1422 """ 

1423 ), 

1424 ] = Default(JSONResponse), 

1425 callbacks: Annotated[ 

1426 Optional[List[BaseRoute]], 

1427 Doc( 

1428 """ 

1429 List of *path operations* that will be used as OpenAPI callbacks. 

1430 

1431 This is only for OpenAPI documentation, the callbacks won't be used 

1432 directly. 

1433 

1434 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1435 

1436 Read more about it in the 

1437 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

1438 """ 

1439 ), 

1440 ] = None, 

1441 generate_unique_id_function: Annotated[ 

1442 Callable[[routing.APIRoute], str], 

1443 Doc( 

1444 """ 

1445 Customize the function used to generate unique IDs for the *path 

1446 operations* shown in the generated OpenAPI. 

1447 

1448 This is particularly useful when automatically generating clients or 

1449 SDKs for your API. 

1450 

1451 Read more about it in the 

1452 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1453 """ 

1454 ), 

1455 ] = Default(generate_unique_id), 

1456 ) -> None: 

1457 """ 

1458 Include an `APIRouter` in the same app. 

1459 

1460 Read more about it in the 

1461 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/). 

1462 

1463 ## Example 

1464 

1465 ```python 

1466 from fastapi import FastAPI 

1467 

1468 from .users import users_router 

1469 

1470 app = FastAPI() 

1471 

1472 app.include_router(users_router) 

1473 ``` 

1474 """ 

1475 self.router.include_router( 2a Ub3]m n o p q r 6b7b| hb8b9b!b%b'b(bb *b4]v w x y z A ]b^b} ob_b`b{b~bacbcc dc5]E F G H I J vcwc~ vbxcyczcDcEcFcd Hc6]N O P Q R S Zc0cabCb1c2c3c7c8c9ce #c7]W X Y Z 0 1 ]c^cbbJb_c`c{cadbdcdf ed8]5 6 7 8 9 ! wdxdcbQbydzdAdEdFdGd

1476 router, 

1477 prefix=prefix, 

1478 tags=tags, 

1479 dependencies=dependencies, 

1480 responses=responses, 

1481 deprecated=deprecated, 

1482 include_in_schema=include_in_schema, 

1483 default_response_class=default_response_class, 

1484 callbacks=callbacks, 

1485 generate_unique_id_function=generate_unique_id_function, 

1486 ) 

1487 

1488 def get( 1abcdef

1489 self, 

1490 path: Annotated[ 

1491 str, 

1492 Doc( 

1493 """ 

1494 The URL path to be used for this *path operation*. 

1495 

1496 For example, in `http://example.com/items`, the path is `/items`. 

1497 """ 

1498 ), 

1499 ], 

1500 *, 

1501 response_model: Annotated[ 

1502 Any, 

1503 Doc( 

1504 """ 

1505 The type to use for the response. 

1506 

1507 It could be any valid Pydantic *field* type. So, it doesn't have to 

1508 be a Pydantic model, it could be other things, like a `list`, `dict`, 

1509 etc. 

1510 

1511 It will be used for: 

1512 

1513 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

1514 show it as the response (JSON Schema). 

1515 * Serialization: you could return an arbitrary object and the 

1516 `response_model` would be used to serialize that object into the 

1517 corresponding JSON. 

1518 * Filtering: the JSON sent to the client will only contain the data 

1519 (fields) defined in the `response_model`. If you returned an object 

1520 that contains an attribute `password` but the `response_model` does 

1521 not include that field, the JSON sent to the client would not have 

1522 that `password`. 

1523 * Validation: whatever you return will be serialized with the 

1524 `response_model`, converting any data as necessary to generate the 

1525 corresponding JSON. But if the data in the object returned is not 

1526 valid, that would mean a violation of the contract with the client, 

1527 so it's an error from the API developer. So, FastAPI will raise an 

1528 error and return a 500 error code (Internal Server Error). 

1529 

1530 Read more about it in the 

1531 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

1532 """ 

1533 ), 

1534 ] = Default(None), 

1535 status_code: Annotated[ 

1536 Optional[int], 

1537 Doc( 

1538 """ 

1539 The default status code to be used for the response. 

1540 

1541 You could override the status code by returning a response directly. 

1542 

1543 Read more about it in the 

1544 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

1545 """ 

1546 ), 

1547 ] = None, 

1548 tags: Annotated[ 

1549 Optional[List[Union[str, Enum]]], 

1550 Doc( 

1551 """ 

1552 A list of tags to be applied to the *path operation*. 

1553 

1554 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1555 

1556 Read more about it in the 

1557 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

1558 """ 

1559 ), 

1560 ] = None, 

1561 dependencies: Annotated[ 

1562 Optional[Sequence[Depends]], 

1563 Doc( 

1564 """ 

1565 A list of dependencies (using `Depends()`) to be applied to the 

1566 *path operation*. 

1567 

1568 Read more about it in the 

1569 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

1570 """ 

1571 ), 

1572 ] = None, 

1573 summary: Annotated[ 

1574 Optional[str], 

1575 Doc( 

1576 """ 

1577 A summary for the *path operation*. 

1578 

1579 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1580 

1581 Read more about it in the 

1582 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1583 """ 

1584 ), 

1585 ] = None, 

1586 description: Annotated[ 

1587 Optional[str], 

1588 Doc( 

1589 """ 

1590 A description for the *path operation*. 

1591 

1592 If not provided, it will be extracted automatically from the docstring 

1593 of the *path operation function*. 

1594 

1595 It can contain Markdown. 

1596 

1597 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1598 

1599 Read more about it in the 

1600 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1601 """ 

1602 ), 

1603 ] = None, 

1604 response_description: Annotated[ 

1605 str, 

1606 Doc( 

1607 """ 

1608 The description for the default response. 

1609 

1610 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1611 """ 

1612 ), 

1613 ] = "Successful Response", 

1614 responses: Annotated[ 

1615 Optional[Dict[Union[int, str], Dict[str, Any]]], 

1616 Doc( 

1617 """ 

1618 Additional responses that could be returned by this *path operation*. 

1619 

1620 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1621 """ 

1622 ), 

1623 ] = None, 

1624 deprecated: Annotated[ 

1625 Optional[bool], 

1626 Doc( 

1627 """ 

1628 Mark this *path operation* as deprecated. 

1629 

1630 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1631 """ 

1632 ), 

1633 ] = None, 

1634 operation_id: Annotated[ 

1635 Optional[str], 

1636 Doc( 

1637 """ 

1638 Custom operation ID to be used by this *path operation*. 

1639 

1640 By default, it is generated automatically. 

1641 

1642 If you provide a custom operation ID, you need to make sure it is 

1643 unique for the whole API. 

1644 

1645 You can customize the 

1646 operation ID generation with the parameter 

1647 `generate_unique_id_function` in the `FastAPI` class. 

1648 

1649 Read more about it in the 

1650 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1651 """ 

1652 ), 

1653 ] = None, 

1654 response_model_include: Annotated[ 

1655 Optional[IncEx], 

1656 Doc( 

1657 """ 

1658 Configuration passed to Pydantic to include only certain fields in the 

1659 response data. 

1660 

1661 Read more about it in the 

1662 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1663 """ 

1664 ), 

1665 ] = None, 

1666 response_model_exclude: Annotated[ 

1667 Optional[IncEx], 

1668 Doc( 

1669 """ 

1670 Configuration passed to Pydantic to exclude certain fields in the 

1671 response data. 

1672 

1673 Read more about it in the 

1674 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1675 """ 

1676 ), 

1677 ] = None, 

1678 response_model_by_alias: Annotated[ 

1679 bool, 

1680 Doc( 

1681 """ 

1682 Configuration passed to Pydantic to define if the response model 

1683 should be serialized by alias when an alias is used. 

1684 

1685 Read more about it in the 

1686 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1687 """ 

1688 ), 

1689 ] = True, 

1690 response_model_exclude_unset: Annotated[ 

1691 bool, 

1692 Doc( 

1693 """ 

1694 Configuration passed to Pydantic to define if the response data 

1695 should have all the fields, including the ones that were not set and 

1696 have their default values. This is different from 

1697 `response_model_exclude_defaults` in that if the fields are set, 

1698 they will be included in the response, even if the value is the same 

1699 as the default. 

1700 

1701 When `True`, default values are omitted from the response. 

1702 

1703 Read more about it in the 

1704 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

1705 """ 

1706 ), 

1707 ] = False, 

1708 response_model_exclude_defaults: Annotated[ 

1709 bool, 

1710 Doc( 

1711 """ 

1712 Configuration passed to Pydantic to define if the response data 

1713 should have all the fields, including the ones that have the same value 

1714 as the default. This is different from `response_model_exclude_unset` 

1715 in that if the fields are set but contain the same default values, 

1716 they will be excluded from the response. 

1717 

1718 When `True`, default values are omitted from the response. 

1719 

1720 Read more about it in the 

1721 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

1722 """ 

1723 ), 

1724 ] = False, 

1725 response_model_exclude_none: Annotated[ 

1726 bool, 

1727 Doc( 

1728 """ 

1729 Configuration passed to Pydantic to define if the response data should 

1730 exclude fields set to `None`. 

1731 

1732 This is much simpler (less smart) than `response_model_exclude_unset` 

1733 and `response_model_exclude_defaults`. You probably want to use one of 

1734 those two instead of this one, as those allow returning `None` values 

1735 when it makes sense. 

1736 

1737 Read more about it in the 

1738 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

1739 """ 

1740 ), 

1741 ] = False, 

1742 include_in_schema: Annotated[ 

1743 bool, 

1744 Doc( 

1745 """ 

1746 Include this *path operation* in the generated OpenAPI schema. 

1747 

1748 This affects the generated OpenAPI (e.g. visible at `/docs`). 

1749 

1750 Read more about it in the 

1751 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

1752 """ 

1753 ), 

1754 ] = True, 

1755 response_class: Annotated[ 

1756 Type[Response], 

1757 Doc( 

1758 """ 

1759 Response class to be used for this *path operation*. 

1760 

1761 This will not be used if you return a response directly. 

1762 

1763 Read more about it in the 

1764 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

1765 """ 

1766 ), 

1767 ] = Default(JSONResponse), 

1768 name: Annotated[ 

1769 Optional[str], 

1770 Doc( 

1771 """ 

1772 Name for this *path operation*. Only used internally. 

1773 """ 

1774 ), 

1775 ] = None, 

1776 callbacks: Annotated[ 

1777 Optional[List[BaseRoute]], 

1778 Doc( 

1779 """ 

1780 List of *path operations* that will be used as OpenAPI callbacks. 

1781 

1782 This is only for OpenAPI documentation, the callbacks won't be used 

1783 directly. 

1784 

1785 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1786 

1787 Read more about it in the 

1788 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

1789 """ 

1790 ), 

1791 ] = None, 

1792 openapi_extra: Annotated[ 

1793 Optional[Dict[str, Any]], 

1794 Doc( 

1795 """ 

1796 Extra metadata to be included in the OpenAPI schema for this *path 

1797 operation*. 

1798 

1799 Read more about it in the 

1800 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

1801 """ 

1802 ), 

1803 ] = None, 

1804 generate_unique_id_function: Annotated[ 

1805 Callable[[routing.APIRoute], str], 

1806 Doc( 

1807 """ 

1808 Customize the function used to generate unique IDs for the *path 

1809 operations* shown in the generated OpenAPI. 

1810 

1811 This is particularly useful when automatically generating clients or 

1812 SDKs for your API. 

1813 

1814 Read more about it in the 

1815 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1816 """ 

1817 ), 

1818 ] = Default(generate_unique_id), 

1819 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1820 """ 

1821 Add a *path operation* using an HTTP GET operation. 

1822 

1823 ## Example 

1824 

1825 ```python 

1826 from fastapi import FastAPI 

1827 

1828 app = FastAPI() 

1829 

1830 @app.get("/items/") 

1831 def read_items(): 

1832 return [{"name": "Empanada"}, {"name": "Arepa"}] 

1833 ``` 

1834 """ 

1835 return self.router.get( 2a @t9]TbYbZb0b1bHdIdJdKdLdMdNdOdPdQdRddbebfbs t gb3d4d5d6d7d4b5b| hbibu g Df#b8d9d$bjbb `t!])b.b/b:b;b!d#d$d%d'd(d)d*d+d,d-dkblbmbB C nb`d{d|d}d~d@b[b} obpbD h Ef|baebe}bqbc au#]cchcicjckccedeeefegeheiejekelemerbsbtbK L ub. qcrcscyezeAeBeCetcuc~ vbwbM i FfAcDeEeBcxbd fu$]GcLcMcNcOcFeGeHeIeJeKeLeMeNeOePeybzbAbT U Bb= UcVcWc1e2e3e4e5eXcYcabCbDbV j Gf4c6e7e5cEbe ku%]!c(c)c*c+c8e9e!e#e$e%e'e(e)e*e+eFbGbHb2 3 Ib] ;c=c?c^e_e`e{e|e@c[cbbJbKb4 k Hf|c}e~e}cLbf pu']ddidjdkdldafbfcfdfefffgfhfifjfkfMbNbOb# $ Pb{ rdsdtdwfxfyfzfAfudvdcbQbRb% l IfBdBfCfCdSb

1836 path, 

1837 response_model=response_model, 

1838 status_code=status_code, 

1839 tags=tags, 

1840 dependencies=dependencies, 

1841 summary=summary, 

1842 description=description, 

1843 response_description=response_description, 

1844 responses=responses, 

1845 deprecated=deprecated, 

1846 operation_id=operation_id, 

1847 response_model_include=response_model_include, 

1848 response_model_exclude=response_model_exclude, 

1849 response_model_by_alias=response_model_by_alias, 

1850 response_model_exclude_unset=response_model_exclude_unset, 

1851 response_model_exclude_defaults=response_model_exclude_defaults, 

1852 response_model_exclude_none=response_model_exclude_none, 

1853 include_in_schema=include_in_schema, 

1854 response_class=response_class, 

1855 name=name, 

1856 callbacks=callbacks, 

1857 openapi_extra=openapi_extra, 

1858 generate_unique_id_function=generate_unique_id_function, 

1859 ) 

1860 

1861 def put( 1abcdef

1862 self, 

1863 path: Annotated[ 

1864 str, 

1865 Doc( 

1866 """ 

1867 The URL path to be used for this *path operation*. 

1868 

1869 For example, in `http://example.com/items`, the path is `/items`. 

1870 """ 

1871 ), 

1872 ], 

1873 *, 

1874 response_model: Annotated[ 

1875 Any, 

1876 Doc( 

1877 """ 

1878 The type to use for the response. 

1879 

1880 It could be any valid Pydantic *field* type. So, it doesn't have to 

1881 be a Pydantic model, it could be other things, like a `list`, `dict`, 

1882 etc. 

1883 

1884 It will be used for: 

1885 

1886 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

1887 show it as the response (JSON Schema). 

1888 * Serialization: you could return an arbitrary object and the 

1889 `response_model` would be used to serialize that object into the 

1890 corresponding JSON. 

1891 * Filtering: the JSON sent to the client will only contain the data 

1892 (fields) defined in the `response_model`. If you returned an object 

1893 that contains an attribute `password` but the `response_model` does 

1894 not include that field, the JSON sent to the client would not have 

1895 that `password`. 

1896 * Validation: whatever you return will be serialized with the 

1897 `response_model`, converting any data as necessary to generate the 

1898 corresponding JSON. But if the data in the object returned is not 

1899 valid, that would mean a violation of the contract with the client, 

1900 so it's an error from the API developer. So, FastAPI will raise an 

1901 error and return a 500 error code (Internal Server Error). 

1902 

1903 Read more about it in the 

1904 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

1905 """ 

1906 ), 

1907 ] = Default(None), 

1908 status_code: Annotated[ 

1909 Optional[int], 

1910 Doc( 

1911 """ 

1912 The default status code to be used for the response. 

1913 

1914 You could override the status code by returning a response directly. 

1915 

1916 Read more about it in the 

1917 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

1918 """ 

1919 ), 

1920 ] = None, 

1921 tags: Annotated[ 

1922 Optional[List[Union[str, Enum]]], 

1923 Doc( 

1924 """ 

1925 A list of tags to be applied to the *path operation*. 

1926 

1927 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1928 

1929 Read more about it in the 

1930 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

1931 """ 

1932 ), 

1933 ] = None, 

1934 dependencies: Annotated[ 

1935 Optional[Sequence[Depends]], 

1936 Doc( 

1937 """ 

1938 A list of dependencies (using `Depends()`) to be applied to the 

1939 *path operation*. 

1940 

1941 Read more about it in the 

1942 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

1943 """ 

1944 ), 

1945 ] = None, 

1946 summary: Annotated[ 

1947 Optional[str], 

1948 Doc( 

1949 """ 

1950 A summary for the *path operation*. 

1951 

1952 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1953 

1954 Read more about it in the 

1955 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1956 """ 

1957 ), 

1958 ] = None, 

1959 description: Annotated[ 

1960 Optional[str], 

1961 Doc( 

1962 """ 

1963 A description for the *path operation*. 

1964 

1965 If not provided, it will be extracted automatically from the docstring 

1966 of the *path operation function*. 

1967 

1968 It can contain Markdown. 

1969 

1970 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1971 

1972 Read more about it in the 

1973 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1974 """ 

1975 ), 

1976 ] = None, 

1977 response_description: Annotated[ 

1978 str, 

1979 Doc( 

1980 """ 

1981 The description for the default response. 

1982 

1983 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1984 """ 

1985 ), 

1986 ] = "Successful Response", 

1987 responses: Annotated[ 

1988 Optional[Dict[Union[int, str], Dict[str, Any]]], 

1989 Doc( 

1990 """ 

1991 Additional responses that could be returned by this *path operation*. 

1992 

1993 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1994 """ 

1995 ), 

1996 ] = None, 

1997 deprecated: Annotated[ 

1998 Optional[bool], 

1999 Doc( 

2000 """ 

2001 Mark this *path operation* as deprecated. 

2002 

2003 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2004 """ 

2005 ), 

2006 ] = None, 

2007 operation_id: Annotated[ 

2008 Optional[str], 

2009 Doc( 

2010 """ 

2011 Custom operation ID to be used by this *path operation*. 

2012 

2013 By default, it is generated automatically. 

2014 

2015 If you provide a custom operation ID, you need to make sure it is 

2016 unique for the whole API. 

2017 

2018 You can customize the 

2019 operation ID generation with the parameter 

2020 `generate_unique_id_function` in the `FastAPI` class. 

2021 

2022 Read more about it in the 

2023 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2024 """ 

2025 ), 

2026 ] = None, 

2027 response_model_include: Annotated[ 

2028 Optional[IncEx], 

2029 Doc( 

2030 """ 

2031 Configuration passed to Pydantic to include only certain fields in the 

2032 response data. 

2033 

2034 Read more about it in the 

2035 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2036 """ 

2037 ), 

2038 ] = None, 

2039 response_model_exclude: Annotated[ 

2040 Optional[IncEx], 

2041 Doc( 

2042 """ 

2043 Configuration passed to Pydantic to exclude certain fields in the 

2044 response data. 

2045 

2046 Read more about it in the 

2047 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2048 """ 

2049 ), 

2050 ] = None, 

2051 response_model_by_alias: Annotated[ 

2052 bool, 

2053 Doc( 

2054 """ 

2055 Configuration passed to Pydantic to define if the response model 

2056 should be serialized by alias when an alias is used. 

2057 

2058 Read more about it in the 

2059 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2060 """ 

2061 ), 

2062 ] = True, 

2063 response_model_exclude_unset: Annotated[ 

2064 bool, 

2065 Doc( 

2066 """ 

2067 Configuration passed to Pydantic to define if the response data 

2068 should have all the fields, including the ones that were not set and 

2069 have their default values. This is different from 

2070 `response_model_exclude_defaults` in that if the fields are set, 

2071 they will be included in the response, even if the value is the same 

2072 as the default. 

2073 

2074 When `True`, default values are omitted from the response. 

2075 

2076 Read more about it in the 

2077 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2078 """ 

2079 ), 

2080 ] = False, 

2081 response_model_exclude_defaults: Annotated[ 

2082 bool, 

2083 Doc( 

2084 """ 

2085 Configuration passed to Pydantic to define if the response data 

2086 should have all the fields, including the ones that have the same value 

2087 as the default. This is different from `response_model_exclude_unset` 

2088 in that if the fields are set but contain the same default values, 

2089 they will be excluded from the response. 

2090 

2091 When `True`, default values are omitted from the response. 

2092 

2093 Read more about it in the 

2094 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2095 """ 

2096 ), 

2097 ] = False, 

2098 response_model_exclude_none: Annotated[ 

2099 bool, 

2100 Doc( 

2101 """ 

2102 Configuration passed to Pydantic to define if the response data should 

2103 exclude fields set to `None`. 

2104 

2105 This is much simpler (less smart) than `response_model_exclude_unset` 

2106 and `response_model_exclude_defaults`. You probably want to use one of 

2107 those two instead of this one, as those allow returning `None` values 

2108 when it makes sense. 

2109 

2110 Read more about it in the 

2111 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2112 """ 

2113 ), 

2114 ] = False, 

2115 include_in_schema: Annotated[ 

2116 bool, 

2117 Doc( 

2118 """ 

2119 Include this *path operation* in the generated OpenAPI schema. 

2120 

2121 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2122 

2123 Read more about it in the 

2124 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2125 """ 

2126 ), 

2127 ] = True, 

2128 response_class: Annotated[ 

2129 Type[Response], 

2130 Doc( 

2131 """ 

2132 Response class to be used for this *path operation*. 

2133 

2134 This will not be used if you return a response directly. 

2135 

2136 Read more about it in the 

2137 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2138 """ 

2139 ), 

2140 ] = Default(JSONResponse), 

2141 name: Annotated[ 

2142 Optional[str], 

2143 Doc( 

2144 """ 

2145 Name for this *path operation*. Only used internally. 

2146 """ 

2147 ), 

2148 ] = None, 

2149 callbacks: Annotated[ 

2150 Optional[List[BaseRoute]], 

2151 Doc( 

2152 """ 

2153 List of *path operations* that will be used as OpenAPI callbacks. 

2154 

2155 This is only for OpenAPI documentation, the callbacks won't be used 

2156 directly. 

2157 

2158 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2159 

2160 Read more about it in the 

2161 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2162 """ 

2163 ), 

2164 ] = None, 

2165 openapi_extra: Annotated[ 

2166 Optional[Dict[str, Any]], 

2167 Doc( 

2168 """ 

2169 Extra metadata to be included in the OpenAPI schema for this *path 

2170 operation*. 

2171 

2172 Read more about it in the 

2173 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2174 """ 

2175 ), 

2176 ] = None, 

2177 generate_unique_id_function: Annotated[ 

2178 Callable[[routing.APIRoute], str], 

2179 Doc( 

2180 """ 

2181 Customize the function used to generate unique IDs for the *path 

2182 operations* shown in the generated OpenAPI. 

2183 

2184 This is particularly useful when automatically generating clients or 

2185 SDKs for your API. 

2186 

2187 Read more about it in the 

2188 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2189 """ 

2190 ), 

2191 ] = Default(generate_unique_id), 

2192 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

2193 """ 

2194 Add a *path operation* using an HTTP PUT operation. 

2195 

2196 ## Example 

2197 

2198 ```python 

2199 from fastapi import FastAPI 

2200 from pydantic import BaseModel 

2201 

2202 class Item(BaseModel): 

2203 name: str 

2204 description: str | None = None 

2205 

2206 app = FastAPI() 

2207 

2208 @app.put("/items/{item_id}") 

2209 def replace_item(item_id: str, item: Item): 

2210 return {"message": "Item replaced", "id": item_id} 

2211 ``` 

2212 """ 

2213 return self.router.put( 1abcdef

2214 path, 

2215 response_model=response_model, 

2216 status_code=status_code, 

2217 tags=tags, 

2218 dependencies=dependencies, 

2219 summary=summary, 

2220 description=description, 

2221 response_description=response_description, 

2222 responses=responses, 

2223 deprecated=deprecated, 

2224 operation_id=operation_id, 

2225 response_model_include=response_model_include, 

2226 response_model_exclude=response_model_exclude, 

2227 response_model_by_alias=response_model_by_alias, 

2228 response_model_exclude_unset=response_model_exclude_unset, 

2229 response_model_exclude_defaults=response_model_exclude_defaults, 

2230 response_model_exclude_none=response_model_exclude_none, 

2231 include_in_schema=include_in_schema, 

2232 response_class=response_class, 

2233 name=name, 

2234 callbacks=callbacks, 

2235 openapi_extra=openapi_extra, 

2236 generate_unique_id_function=generate_unique_id_function, 

2237 ) 

2238 

2239 def post( 1abcdef

2240 self, 

2241 path: Annotated[ 

2242 str, 

2243 Doc( 

2244 """ 

2245 The URL path to be used for this *path operation*. 

2246 

2247 For example, in `http://example.com/items`, the path is `/items`. 

2248 """ 

2249 ), 

2250 ], 

2251 *, 

2252 response_model: Annotated[ 

2253 Any, 

2254 Doc( 

2255 """ 

2256 The type to use for the response. 

2257 

2258 It could be any valid Pydantic *field* type. So, it doesn't have to 

2259 be a Pydantic model, it could be other things, like a `list`, `dict`, 

2260 etc. 

2261 

2262 It will be used for: 

2263 

2264 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

2265 show it as the response (JSON Schema). 

2266 * Serialization: you could return an arbitrary object and the 

2267 `response_model` would be used to serialize that object into the 

2268 corresponding JSON. 

2269 * Filtering: the JSON sent to the client will only contain the data 

2270 (fields) defined in the `response_model`. If you returned an object 

2271 that contains an attribute `password` but the `response_model` does 

2272 not include that field, the JSON sent to the client would not have 

2273 that `password`. 

2274 * Validation: whatever you return will be serialized with the 

2275 `response_model`, converting any data as necessary to generate the 

2276 corresponding JSON. But if the data in the object returned is not 

2277 valid, that would mean a violation of the contract with the client, 

2278 so it's an error from the API developer. So, FastAPI will raise an 

2279 error and return a 500 error code (Internal Server Error). 

2280 

2281 Read more about it in the 

2282 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

2283 """ 

2284 ), 

2285 ] = Default(None), 

2286 status_code: Annotated[ 

2287 Optional[int], 

2288 Doc( 

2289 """ 

2290 The default status code to be used for the response. 

2291 

2292 You could override the status code by returning a response directly. 

2293 

2294 Read more about it in the 

2295 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

2296 """ 

2297 ), 

2298 ] = None, 

2299 tags: Annotated[ 

2300 Optional[List[Union[str, Enum]]], 

2301 Doc( 

2302 """ 

2303 A list of tags to be applied to the *path operation*. 

2304 

2305 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2306 

2307 Read more about it in the 

2308 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

2309 """ 

2310 ), 

2311 ] = None, 

2312 dependencies: Annotated[ 

2313 Optional[Sequence[Depends]], 

2314 Doc( 

2315 """ 

2316 A list of dependencies (using `Depends()`) to be applied to the 

2317 *path operation*. 

2318 

2319 Read more about it in the 

2320 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

2321 """ 

2322 ), 

2323 ] = None, 

2324 summary: Annotated[ 

2325 Optional[str], 

2326 Doc( 

2327 """ 

2328 A summary for the *path operation*. 

2329 

2330 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2331 

2332 Read more about it in the 

2333 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2334 """ 

2335 ), 

2336 ] = None, 

2337 description: Annotated[ 

2338 Optional[str], 

2339 Doc( 

2340 """ 

2341 A description for the *path operation*. 

2342 

2343 If not provided, it will be extracted automatically from the docstring 

2344 of the *path operation function*. 

2345 

2346 It can contain Markdown. 

2347 

2348 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2349 

2350 Read more about it in the 

2351 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2352 """ 

2353 ), 

2354 ] = None, 

2355 response_description: Annotated[ 

2356 str, 

2357 Doc( 

2358 """ 

2359 The description for the default response. 

2360 

2361 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2362 """ 

2363 ), 

2364 ] = "Successful Response", 

2365 responses: Annotated[ 

2366 Optional[Dict[Union[int, str], Dict[str, Any]]], 

2367 Doc( 

2368 """ 

2369 Additional responses that could be returned by this *path operation*. 

2370 

2371 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2372 """ 

2373 ), 

2374 ] = None, 

2375 deprecated: Annotated[ 

2376 Optional[bool], 

2377 Doc( 

2378 """ 

2379 Mark this *path operation* as deprecated. 

2380 

2381 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2382 """ 

2383 ), 

2384 ] = None, 

2385 operation_id: Annotated[ 

2386 Optional[str], 

2387 Doc( 

2388 """ 

2389 Custom operation ID to be used by this *path operation*. 

2390 

2391 By default, it is generated automatically. 

2392 

2393 If you provide a custom operation ID, you need to make sure it is 

2394 unique for the whole API. 

2395 

2396 You can customize the 

2397 operation ID generation with the parameter 

2398 `generate_unique_id_function` in the `FastAPI` class. 

2399 

2400 Read more about it in the 

2401 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2402 """ 

2403 ), 

2404 ] = None, 

2405 response_model_include: Annotated[ 

2406 Optional[IncEx], 

2407 Doc( 

2408 """ 

2409 Configuration passed to Pydantic to include only certain fields in the 

2410 response data. 

2411 

2412 Read more about it in the 

2413 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2414 """ 

2415 ), 

2416 ] = None, 

2417 response_model_exclude: Annotated[ 

2418 Optional[IncEx], 

2419 Doc( 

2420 """ 

2421 Configuration passed to Pydantic to exclude certain fields in the 

2422 response data. 

2423 

2424 Read more about it in the 

2425 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2426 """ 

2427 ), 

2428 ] = None, 

2429 response_model_by_alias: Annotated[ 

2430 bool, 

2431 Doc( 

2432 """ 

2433 Configuration passed to Pydantic to define if the response model 

2434 should be serialized by alias when an alias is used. 

2435 

2436 Read more about it in the 

2437 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2438 """ 

2439 ), 

2440 ] = True, 

2441 response_model_exclude_unset: Annotated[ 

2442 bool, 

2443 Doc( 

2444 """ 

2445 Configuration passed to Pydantic to define if the response data 

2446 should have all the fields, including the ones that were not set and 

2447 have their default values. This is different from 

2448 `response_model_exclude_defaults` in that if the fields are set, 

2449 they will be included in the response, even if the value is the same 

2450 as the default. 

2451 

2452 When `True`, default values are omitted from the response. 

2453 

2454 Read more about it in the 

2455 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2456 """ 

2457 ), 

2458 ] = False, 

2459 response_model_exclude_defaults: Annotated[ 

2460 bool, 

2461 Doc( 

2462 """ 

2463 Configuration passed to Pydantic to define if the response data 

2464 should have all the fields, including the ones that have the same value 

2465 as the default. This is different from `response_model_exclude_unset` 

2466 in that if the fields are set but contain the same default values, 

2467 they will be excluded from the response. 

2468 

2469 When `True`, default values are omitted from the response. 

2470 

2471 Read more about it in the 

2472 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2473 """ 

2474 ), 

2475 ] = False, 

2476 response_model_exclude_none: Annotated[ 

2477 bool, 

2478 Doc( 

2479 """ 

2480 Configuration passed to Pydantic to define if the response data should 

2481 exclude fields set to `None`. 

2482 

2483 This is much simpler (less smart) than `response_model_exclude_unset` 

2484 and `response_model_exclude_defaults`. You probably want to use one of 

2485 those two instead of this one, as those allow returning `None` values 

2486 when it makes sense. 

2487 

2488 Read more about it in the 

2489 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2490 """ 

2491 ), 

2492 ] = False, 

2493 include_in_schema: Annotated[ 

2494 bool, 

2495 Doc( 

2496 """ 

2497 Include this *path operation* in the generated OpenAPI schema. 

2498 

2499 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2500 

2501 Read more about it in the 

2502 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2503 """ 

2504 ), 

2505 ] = True, 

2506 response_class: Annotated[ 

2507 Type[Response], 

2508 Doc( 

2509 """ 

2510 Response class to be used for this *path operation*. 

2511 

2512 This will not be used if you return a response directly. 

2513 

2514 Read more about it in the 

2515 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2516 """ 

2517 ), 

2518 ] = Default(JSONResponse), 

2519 name: Annotated[ 

2520 Optional[str], 

2521 Doc( 

2522 """ 

2523 Name for this *path operation*. Only used internally. 

2524 """ 

2525 ), 

2526 ] = None, 

2527 callbacks: Annotated[ 

2528 Optional[List[BaseRoute]], 

2529 Doc( 

2530 """ 

2531 List of *path operations* that will be used as OpenAPI callbacks. 

2532 

2533 This is only for OpenAPI documentation, the callbacks won't be used 

2534 directly. 

2535 

2536 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2537 

2538 Read more about it in the 

2539 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2540 """ 

2541 ), 

2542 ] = None, 

2543 openapi_extra: Annotated[ 

2544 Optional[Dict[str, Any]], 

2545 Doc( 

2546 """ 

2547 Extra metadata to be included in the OpenAPI schema for this *path 

2548 operation*. 

2549 

2550 Read more about it in the 

2551 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2552 """ 

2553 ), 

2554 ] = None, 

2555 generate_unique_id_function: Annotated[ 

2556 Callable[[routing.APIRoute], str], 

2557 Doc( 

2558 """ 

2559 Customize the function used to generate unique IDs for the *path 

2560 operations* shown in the generated OpenAPI. 

2561 

2562 This is particularly useful when automatically generating clients or 

2563 SDKs for your API. 

2564 

2565 Read more about it in the 

2566 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2567 """ 

2568 ), 

2569 ] = Default(generate_unique_id), 

2570 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

2571 """ 

2572 Add a *path operation* using an HTTP POST operation. 

2573 

2574 ## Example 

2575 

2576 ```python 

2577 from fastapi import FastAPI 

2578 from pydantic import BaseModel 

2579 

2580 class Item(BaseModel): 

2581 name: str 

2582 description: str | None = None 

2583 

2584 app = FastAPI() 

2585 

2586 @app.post("/items/") 

2587 def create_item(item: Item): 

2588 return {"message": "Item created"} 

2589 ``` 

2590 """ 

2591 return self.router.post( 2a VbWbXbm ' n o p q r ( SdTdUdVdWdXdYdZd0d1d2ddbebfbs t gb2b3bibu b +b,b-bv ) w x y z A * .d/d:d;d=d?d@d[d]d^d_dkblbmbB C nb=b?bpbD c ecfcgcE + F G H I J , neoepeqereseteuevewexerbsbtbK L ublcmcnc- ocpcwbM Ccd IcJcKcN / O P Q R S : QeReSeTeUeVeWeXeYeZe0eybzbAbT U BbPcQcRc; ScTcDbV 6ce $c%c'cW ? X Y Z 0 1 @ ,e-e.e/e:e;e=e?e@e[e]eFbGbHb2 3 Ib,c-c.c[ /c:cKb4 ~cf fdgdhd5 ^ 6 7 8 9 ! _ lfmfnfofpfqfrfsftfufvfMbNbOb# $ Pbmdndod` pdqdRb% Dd

2592 path, 

2593 response_model=response_model, 

2594 status_code=status_code, 

2595 tags=tags, 

2596 dependencies=dependencies, 

2597 summary=summary, 

2598 description=description, 

2599 response_description=response_description, 

2600 responses=responses, 

2601 deprecated=deprecated, 

2602 operation_id=operation_id, 

2603 response_model_include=response_model_include, 

2604 response_model_exclude=response_model_exclude, 

2605 response_model_by_alias=response_model_by_alias, 

2606 response_model_exclude_unset=response_model_exclude_unset, 

2607 response_model_exclude_defaults=response_model_exclude_defaults, 

2608 response_model_exclude_none=response_model_exclude_none, 

2609 include_in_schema=include_in_schema, 

2610 response_class=response_class, 

2611 name=name, 

2612 callbacks=callbacks, 

2613 openapi_extra=openapi_extra, 

2614 generate_unique_id_function=generate_unique_id_function, 

2615 ) 

2616 

2617 def delete( 1abcdef

2618 self, 

2619 path: Annotated[ 

2620 str, 

2621 Doc( 

2622 """ 

2623 The URL path to be used for this *path operation*. 

2624 

2625 For example, in `http://example.com/items`, the path is `/items`. 

2626 """ 

2627 ), 

2628 ], 

2629 *, 

2630 response_model: Annotated[ 

2631 Any, 

2632 Doc( 

2633 """ 

2634 The type to use for the response. 

2635 

2636 It could be any valid Pydantic *field* type. So, it doesn't have to 

2637 be a Pydantic model, it could be other things, like a `list`, `dict`, 

2638 etc. 

2639 

2640 It will be used for: 

2641 

2642 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

2643 show it as the response (JSON Schema). 

2644 * Serialization: you could return an arbitrary object and the 

2645 `response_model` would be used to serialize that object into the 

2646 corresponding JSON. 

2647 * Filtering: the JSON sent to the client will only contain the data 

2648 (fields) defined in the `response_model`. If you returned an object 

2649 that contains an attribute `password` but the `response_model` does 

2650 not include that field, the JSON sent to the client would not have 

2651 that `password`. 

2652 * Validation: whatever you return will be serialized with the 

2653 `response_model`, converting any data as necessary to generate the 

2654 corresponding JSON. But if the data in the object returned is not 

2655 valid, that would mean a violation of the contract with the client, 

2656 so it's an error from the API developer. So, FastAPI will raise an 

2657 error and return a 500 error code (Internal Server Error). 

2658 

2659 Read more about it in the 

2660 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

2661 """ 

2662 ), 

2663 ] = Default(None), 

2664 status_code: Annotated[ 

2665 Optional[int], 

2666 Doc( 

2667 """ 

2668 The default status code to be used for the response. 

2669 

2670 You could override the status code by returning a response directly. 

2671 

2672 Read more about it in the 

2673 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

2674 """ 

2675 ), 

2676 ] = None, 

2677 tags: Annotated[ 

2678 Optional[List[Union[str, Enum]]], 

2679 Doc( 

2680 """ 

2681 A list of tags to be applied to the *path operation*. 

2682 

2683 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2684 

2685 Read more about it in the 

2686 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

2687 """ 

2688 ), 

2689 ] = None, 

2690 dependencies: Annotated[ 

2691 Optional[Sequence[Depends]], 

2692 Doc( 

2693 """ 

2694 A list of dependencies (using `Depends()`) to be applied to the 

2695 *path operation*. 

2696 

2697 Read more about it in the 

2698 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

2699 """ 

2700 ), 

2701 ] = None, 

2702 summary: Annotated[ 

2703 Optional[str], 

2704 Doc( 

2705 """ 

2706 A summary for the *path operation*. 

2707 

2708 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2709 

2710 Read more about it in the 

2711 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2712 """ 

2713 ), 

2714 ] = None, 

2715 description: Annotated[ 

2716 Optional[str], 

2717 Doc( 

2718 """ 

2719 A description for the *path operation*. 

2720 

2721 If not provided, it will be extracted automatically from the docstring 

2722 of the *path operation function*. 

2723 

2724 It can contain Markdown. 

2725 

2726 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2727 

2728 Read more about it in the 

2729 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2730 """ 

2731 ), 

2732 ] = None, 

2733 response_description: Annotated[ 

2734 str, 

2735 Doc( 

2736 """ 

2737 The description for the default response. 

2738 

2739 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2740 """ 

2741 ), 

2742 ] = "Successful Response", 

2743 responses: Annotated[ 

2744 Optional[Dict[Union[int, str], Dict[str, Any]]], 

2745 Doc( 

2746 """ 

2747 Additional responses that could be returned by this *path operation*. 

2748 

2749 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2750 """ 

2751 ), 

2752 ] = None, 

2753 deprecated: Annotated[ 

2754 Optional[bool], 

2755 Doc( 

2756 """ 

2757 Mark this *path operation* as deprecated. 

2758 

2759 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2760 """ 

2761 ), 

2762 ] = None, 

2763 operation_id: Annotated[ 

2764 Optional[str], 

2765 Doc( 

2766 """ 

2767 Custom operation ID to be used by this *path operation*. 

2768 

2769 By default, it is generated automatically. 

2770 

2771 If you provide a custom operation ID, you need to make sure it is 

2772 unique for the whole API. 

2773 

2774 You can customize the 

2775 operation ID generation with the parameter 

2776 `generate_unique_id_function` in the `FastAPI` class. 

2777 

2778 Read more about it in the 

2779 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2780 """ 

2781 ), 

2782 ] = None, 

2783 response_model_include: Annotated[ 

2784 Optional[IncEx], 

2785 Doc( 

2786 """ 

2787 Configuration passed to Pydantic to include only certain fields in the 

2788 response data. 

2789 

2790 Read more about it in the 

2791 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2792 """ 

2793 ), 

2794 ] = None, 

2795 response_model_exclude: Annotated[ 

2796 Optional[IncEx], 

2797 Doc( 

2798 """ 

2799 Configuration passed to Pydantic to exclude certain fields in the 

2800 response data. 

2801 

2802 Read more about it in the 

2803 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2804 """ 

2805 ), 

2806 ] = None, 

2807 response_model_by_alias: Annotated[ 

2808 bool, 

2809 Doc( 

2810 """ 

2811 Configuration passed to Pydantic to define if the response model 

2812 should be serialized by alias when an alias is used. 

2813 

2814 Read more about it in the 

2815 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2816 """ 

2817 ), 

2818 ] = True, 

2819 response_model_exclude_unset: Annotated[ 

2820 bool, 

2821 Doc( 

2822 """ 

2823 Configuration passed to Pydantic to define if the response data 

2824 should have all the fields, including the ones that were not set and 

2825 have their default values. This is different from 

2826 `response_model_exclude_defaults` in that if the fields are set, 

2827 they will be included in the response, even if the value is the same 

2828 as the default. 

2829 

2830 When `True`, default values are omitted from the response. 

2831 

2832 Read more about it in the 

2833 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2834 """ 

2835 ), 

2836 ] = False, 

2837 response_model_exclude_defaults: Annotated[ 

2838 bool, 

2839 Doc( 

2840 """ 

2841 Configuration passed to Pydantic to define if the response data 

2842 should have all the fields, including the ones that have the same value 

2843 as the default. This is different from `response_model_exclude_unset` 

2844 in that if the fields are set but contain the same default values, 

2845 they will be excluded from the response. 

2846 

2847 When `True`, default values are omitted from the response. 

2848 

2849 Read more about it in the 

2850 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2851 """ 

2852 ), 

2853 ] = False, 

2854 response_model_exclude_none: Annotated[ 

2855 bool, 

2856 Doc( 

2857 """ 

2858 Configuration passed to Pydantic to define if the response data should 

2859 exclude fields set to `None`. 

2860 

2861 This is much simpler (less smart) than `response_model_exclude_unset` 

2862 and `response_model_exclude_defaults`. You probably want to use one of 

2863 those two instead of this one, as those allow returning `None` values 

2864 when it makes sense. 

2865 

2866 Read more about it in the 

2867 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2868 """ 

2869 ), 

2870 ] = False, 

2871 include_in_schema: Annotated[ 

2872 bool, 

2873 Doc( 

2874 """ 

2875 Include this *path operation* in the generated OpenAPI schema. 

2876 

2877 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2878 

2879 Read more about it in the 

2880 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2881 """ 

2882 ), 

2883 ] = True, 

2884 response_class: Annotated[ 

2885 Type[Response], 

2886 Doc( 

2887 """ 

2888 Response class to be used for this *path operation*. 

2889 

2890 This will not be used if you return a response directly. 

2891 

2892 Read more about it in the 

2893 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2894 """ 

2895 ), 

2896 ] = Default(JSONResponse), 

2897 name: Annotated[ 

2898 Optional[str], 

2899 Doc( 

2900 """ 

2901 Name for this *path operation*. Only used internally. 

2902 """ 

2903 ), 

2904 ] = None, 

2905 callbacks: Annotated[ 

2906 Optional[List[BaseRoute]], 

2907 Doc( 

2908 """ 

2909 List of *path operations* that will be used as OpenAPI callbacks. 

2910 

2911 This is only for OpenAPI documentation, the callbacks won't be used 

2912 directly. 

2913 

2914 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2915 

2916 Read more about it in the 

2917 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2918 """ 

2919 ), 

2920 ] = None, 

2921 openapi_extra: Annotated[ 

2922 Optional[Dict[str, Any]], 

2923 Doc( 

2924 """ 

2925 Extra metadata to be included in the OpenAPI schema for this *path 

2926 operation*. 

2927 

2928 Read more about it in the 

2929 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2930 """ 

2931 ), 

2932 ] = None, 

2933 generate_unique_id_function: Annotated[ 

2934 Callable[[routing.APIRoute], str], 

2935 Doc( 

2936 """ 

2937 Customize the function used to generate unique IDs for the *path 

2938 operations* shown in the generated OpenAPI. 

2939 

2940 This is particularly useful when automatically generating clients or 

2941 SDKs for your API. 

2942 

2943 Read more about it in the 

2944 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2945 """ 

2946 ), 

2947 ] = Default(generate_unique_id), 

2948 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

2949 """ 

2950 Add a *path operation* using an HTTP DELETE operation. 

2951 

2952 ## Example 

2953 

2954 ```python 

2955 from fastapi import FastAPI 

2956 

2957 app = FastAPI() 

2958 

2959 @app.delete("/items/{item_id}") 

2960 def delete_item(item_id: str): 

2961 return {"message": "Item deleted"} 

2962 ``` 

2963 """ 

2964 return self.router.delete( 1abcdef

2965 path, 

2966 response_model=response_model, 

2967 status_code=status_code, 

2968 tags=tags, 

2969 dependencies=dependencies, 

2970 summary=summary, 

2971 description=description, 

2972 response_description=response_description, 

2973 responses=responses, 

2974 deprecated=deprecated, 

2975 operation_id=operation_id, 

2976 response_model_include=response_model_include, 

2977 response_model_exclude=response_model_exclude, 

2978 response_model_by_alias=response_model_by_alias, 

2979 response_model_exclude_unset=response_model_exclude_unset, 

2980 response_model_exclude_defaults=response_model_exclude_defaults, 

2981 response_model_exclude_none=response_model_exclude_none, 

2982 include_in_schema=include_in_schema, 

2983 response_class=response_class, 

2984 name=name, 

2985 callbacks=callbacks, 

2986 openapi_extra=openapi_extra, 

2987 generate_unique_id_function=generate_unique_id_function, 

2988 ) 

2989 

2990 def options( 1abcdef

2991 self, 

2992 path: Annotated[ 

2993 str, 

2994 Doc( 

2995 """ 

2996 The URL path to be used for this *path operation*. 

2997 

2998 For example, in `http://example.com/items`, the path is `/items`. 

2999 """ 

3000 ), 

3001 ], 

3002 *, 

3003 response_model: Annotated[ 

3004 Any, 

3005 Doc( 

3006 """ 

3007 The type to use for the response. 

3008 

3009 It could be any valid Pydantic *field* type. So, it doesn't have to 

3010 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3011 etc. 

3012 

3013 It will be used for: 

3014 

3015 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3016 show it as the response (JSON Schema). 

3017 * Serialization: you could return an arbitrary object and the 

3018 `response_model` would be used to serialize that object into the 

3019 corresponding JSON. 

3020 * Filtering: the JSON sent to the client will only contain the data 

3021 (fields) defined in the `response_model`. If you returned an object 

3022 that contains an attribute `password` but the `response_model` does 

3023 not include that field, the JSON sent to the client would not have 

3024 that `password`. 

3025 * Validation: whatever you return will be serialized with the 

3026 `response_model`, converting any data as necessary to generate the 

3027 corresponding JSON. But if the data in the object returned is not 

3028 valid, that would mean a violation of the contract with the client, 

3029 so it's an error from the API developer. So, FastAPI will raise an 

3030 error and return a 500 error code (Internal Server Error). 

3031 

3032 Read more about it in the 

3033 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3034 """ 

3035 ), 

3036 ] = Default(None), 

3037 status_code: Annotated[ 

3038 Optional[int], 

3039 Doc( 

3040 """ 

3041 The default status code to be used for the response. 

3042 

3043 You could override the status code by returning a response directly. 

3044 

3045 Read more about it in the 

3046 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3047 """ 

3048 ), 

3049 ] = None, 

3050 tags: Annotated[ 

3051 Optional[List[Union[str, Enum]]], 

3052 Doc( 

3053 """ 

3054 A list of tags to be applied to the *path operation*. 

3055 

3056 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3057 

3058 Read more about it in the 

3059 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3060 """ 

3061 ), 

3062 ] = None, 

3063 dependencies: Annotated[ 

3064 Optional[Sequence[Depends]], 

3065 Doc( 

3066 """ 

3067 A list of dependencies (using `Depends()`) to be applied to the 

3068 *path operation*. 

3069 

3070 Read more about it in the 

3071 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3072 """ 

3073 ), 

3074 ] = None, 

3075 summary: Annotated[ 

3076 Optional[str], 

3077 Doc( 

3078 """ 

3079 A summary for the *path operation*. 

3080 

3081 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3082 

3083 Read more about it in the 

3084 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3085 """ 

3086 ), 

3087 ] = None, 

3088 description: Annotated[ 

3089 Optional[str], 

3090 Doc( 

3091 """ 

3092 A description for the *path operation*. 

3093 

3094 If not provided, it will be extracted automatically from the docstring 

3095 of the *path operation function*. 

3096 

3097 It can contain Markdown. 

3098 

3099 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3100 

3101 Read more about it in the 

3102 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3103 """ 

3104 ), 

3105 ] = None, 

3106 response_description: Annotated[ 

3107 str, 

3108 Doc( 

3109 """ 

3110 The description for the default response. 

3111 

3112 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3113 """ 

3114 ), 

3115 ] = "Successful Response", 

3116 responses: Annotated[ 

3117 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3118 Doc( 

3119 """ 

3120 Additional responses that could be returned by this *path operation*. 

3121 

3122 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3123 """ 

3124 ), 

3125 ] = None, 

3126 deprecated: Annotated[ 

3127 Optional[bool], 

3128 Doc( 

3129 """ 

3130 Mark this *path operation* as deprecated. 

3131 

3132 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3133 """ 

3134 ), 

3135 ] = None, 

3136 operation_id: Annotated[ 

3137 Optional[str], 

3138 Doc( 

3139 """ 

3140 Custom operation ID to be used by this *path operation*. 

3141 

3142 By default, it is generated automatically. 

3143 

3144 If you provide a custom operation ID, you need to make sure it is 

3145 unique for the whole API. 

3146 

3147 You can customize the 

3148 operation ID generation with the parameter 

3149 `generate_unique_id_function` in the `FastAPI` class. 

3150 

3151 Read more about it in the 

3152 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3153 """ 

3154 ), 

3155 ] = None, 

3156 response_model_include: Annotated[ 

3157 Optional[IncEx], 

3158 Doc( 

3159 """ 

3160 Configuration passed to Pydantic to include only certain fields in the 

3161 response data. 

3162 

3163 Read more about it in the 

3164 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3165 """ 

3166 ), 

3167 ] = None, 

3168 response_model_exclude: Annotated[ 

3169 Optional[IncEx], 

3170 Doc( 

3171 """ 

3172 Configuration passed to Pydantic to exclude certain fields in the 

3173 response data. 

3174 

3175 Read more about it in the 

3176 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3177 """ 

3178 ), 

3179 ] = None, 

3180 response_model_by_alias: Annotated[ 

3181 bool, 

3182 Doc( 

3183 """ 

3184 Configuration passed to Pydantic to define if the response model 

3185 should be serialized by alias when an alias is used. 

3186 

3187 Read more about it in the 

3188 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3189 """ 

3190 ), 

3191 ] = True, 

3192 response_model_exclude_unset: Annotated[ 

3193 bool, 

3194 Doc( 

3195 """ 

3196 Configuration passed to Pydantic to define if the response data 

3197 should have all the fields, including the ones that were not set and 

3198 have their default values. This is different from 

3199 `response_model_exclude_defaults` in that if the fields are set, 

3200 they will be included in the response, even if the value is the same 

3201 as the default. 

3202 

3203 When `True`, default values are omitted from the response. 

3204 

3205 Read more about it in the 

3206 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3207 """ 

3208 ), 

3209 ] = False, 

3210 response_model_exclude_defaults: Annotated[ 

3211 bool, 

3212 Doc( 

3213 """ 

3214 Configuration passed to Pydantic to define if the response data 

3215 should have all the fields, including the ones that have the same value 

3216 as the default. This is different from `response_model_exclude_unset` 

3217 in that if the fields are set but contain the same default values, 

3218 they will be excluded from the response. 

3219 

3220 When `True`, default values are omitted from the response. 

3221 

3222 Read more about it in the 

3223 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3224 """ 

3225 ), 

3226 ] = False, 

3227 response_model_exclude_none: Annotated[ 

3228 bool, 

3229 Doc( 

3230 """ 

3231 Configuration passed to Pydantic to define if the response data should 

3232 exclude fields set to `None`. 

3233 

3234 This is much simpler (less smart) than `response_model_exclude_unset` 

3235 and `response_model_exclude_defaults`. You probably want to use one of 

3236 those two instead of this one, as those allow returning `None` values 

3237 when it makes sense. 

3238 

3239 Read more about it in the 

3240 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

3241 """ 

3242 ), 

3243 ] = False, 

3244 include_in_schema: Annotated[ 

3245 bool, 

3246 Doc( 

3247 """ 

3248 Include this *path operation* in the generated OpenAPI schema. 

3249 

3250 This affects the generated OpenAPI (e.g. visible at `/docs`). 

3251 

3252 Read more about it in the 

3253 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

3254 """ 

3255 ), 

3256 ] = True, 

3257 response_class: Annotated[ 

3258 Type[Response], 

3259 Doc( 

3260 """ 

3261 Response class to be used for this *path operation*. 

3262 

3263 This will not be used if you return a response directly. 

3264 

3265 Read more about it in the 

3266 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

3267 """ 

3268 ), 

3269 ] = Default(JSONResponse), 

3270 name: Annotated[ 

3271 Optional[str], 

3272 Doc( 

3273 """ 

3274 Name for this *path operation*. Only used internally. 

3275 """ 

3276 ), 

3277 ] = None, 

3278 callbacks: Annotated[ 

3279 Optional[List[BaseRoute]], 

3280 Doc( 

3281 """ 

3282 List of *path operations* that will be used as OpenAPI callbacks. 

3283 

3284 This is only for OpenAPI documentation, the callbacks won't be used 

3285 directly. 

3286 

3287 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3288 

3289 Read more about it in the 

3290 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

3291 """ 

3292 ), 

3293 ] = None, 

3294 openapi_extra: Annotated[ 

3295 Optional[Dict[str, Any]], 

3296 Doc( 

3297 """ 

3298 Extra metadata to be included in the OpenAPI schema for this *path 

3299 operation*. 

3300 

3301 Read more about it in the 

3302 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

3303 """ 

3304 ), 

3305 ] = None, 

3306 generate_unique_id_function: Annotated[ 

3307 Callable[[routing.APIRoute], str], 

3308 Doc( 

3309 """ 

3310 Customize the function used to generate unique IDs for the *path 

3311 operations* shown in the generated OpenAPI. 

3312 

3313 This is particularly useful when automatically generating clients or 

3314 SDKs for your API. 

3315 

3316 Read more about it in the 

3317 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3318 """ 

3319 ), 

3320 ] = Default(generate_unique_id), 

3321 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

3322 """ 

3323 Add a *path operation* using an HTTP OPTIONS operation. 

3324 

3325 ## Example 

3326 

3327 ```python 

3328 from fastapi import FastAPI 

3329 

3330 app = FastAPI() 

3331 

3332 @app.options("/items/") 

3333 def get_item_options(): 

3334 return {"additions": ["Aji", "Guacamole"]} 

3335 ``` 

3336 """ 

3337 return self.router.options( 1abcdef

3338 path, 

3339 response_model=response_model, 

3340 status_code=status_code, 

3341 tags=tags, 

3342 dependencies=dependencies, 

3343 summary=summary, 

3344 description=description, 

3345 response_description=response_description, 

3346 responses=responses, 

3347 deprecated=deprecated, 

3348 operation_id=operation_id, 

3349 response_model_include=response_model_include, 

3350 response_model_exclude=response_model_exclude, 

3351 response_model_by_alias=response_model_by_alias, 

3352 response_model_exclude_unset=response_model_exclude_unset, 

3353 response_model_exclude_defaults=response_model_exclude_defaults, 

3354 response_model_exclude_none=response_model_exclude_none, 

3355 include_in_schema=include_in_schema, 

3356 response_class=response_class, 

3357 name=name, 

3358 callbacks=callbacks, 

3359 openapi_extra=openapi_extra, 

3360 generate_unique_id_function=generate_unique_id_function, 

3361 ) 

3362 

3363 def head( 1abcdef

3364 self, 

3365 path: Annotated[ 

3366 str, 

3367 Doc( 

3368 """ 

3369 The URL path to be used for this *path operation*. 

3370 

3371 For example, in `http://example.com/items`, the path is `/items`. 

3372 """ 

3373 ), 

3374 ], 

3375 *, 

3376 response_model: Annotated[ 

3377 Any, 

3378 Doc( 

3379 """ 

3380 The type to use for the response. 

3381 

3382 It could be any valid Pydantic *field* type. So, it doesn't have to 

3383 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3384 etc. 

3385 

3386 It will be used for: 

3387 

3388 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3389 show it as the response (JSON Schema). 

3390 * Serialization: you could return an arbitrary object and the 

3391 `response_model` would be used to serialize that object into the 

3392 corresponding JSON. 

3393 * Filtering: the JSON sent to the client will only contain the data 

3394 (fields) defined in the `response_model`. If you returned an object 

3395 that contains an attribute `password` but the `response_model` does 

3396 not include that field, the JSON sent to the client would not have 

3397 that `password`. 

3398 * Validation: whatever you return will be serialized with the 

3399 `response_model`, converting any data as necessary to generate the 

3400 corresponding JSON. But if the data in the object returned is not 

3401 valid, that would mean a violation of the contract with the client, 

3402 so it's an error from the API developer. So, FastAPI will raise an 

3403 error and return a 500 error code (Internal Server Error). 

3404 

3405 Read more about it in the 

3406 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3407 """ 

3408 ), 

3409 ] = Default(None), 

3410 status_code: Annotated[ 

3411 Optional[int], 

3412 Doc( 

3413 """ 

3414 The default status code to be used for the response. 

3415 

3416 You could override the status code by returning a response directly. 

3417 

3418 Read more about it in the 

3419 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3420 """ 

3421 ), 

3422 ] = None, 

3423 tags: Annotated[ 

3424 Optional[List[Union[str, Enum]]], 

3425 Doc( 

3426 """ 

3427 A list of tags to be applied to the *path operation*. 

3428 

3429 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3430 

3431 Read more about it in the 

3432 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3433 """ 

3434 ), 

3435 ] = None, 

3436 dependencies: Annotated[ 

3437 Optional[Sequence[Depends]], 

3438 Doc( 

3439 """ 

3440 A list of dependencies (using `Depends()`) to be applied to the 

3441 *path operation*. 

3442 

3443 Read more about it in the 

3444 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3445 """ 

3446 ), 

3447 ] = None, 

3448 summary: Annotated[ 

3449 Optional[str], 

3450 Doc( 

3451 """ 

3452 A summary for the *path operation*. 

3453 

3454 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3455 

3456 Read more about it in the 

3457 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3458 """ 

3459 ), 

3460 ] = None, 

3461 description: Annotated[ 

3462 Optional[str], 

3463 Doc( 

3464 """ 

3465 A description for the *path operation*. 

3466 

3467 If not provided, it will be extracted automatically from the docstring 

3468 of the *path operation function*. 

3469 

3470 It can contain Markdown. 

3471 

3472 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3473 

3474 Read more about it in the 

3475 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3476 """ 

3477 ), 

3478 ] = None, 

3479 response_description: Annotated[ 

3480 str, 

3481 Doc( 

3482 """ 

3483 The description for the default response. 

3484 

3485 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3486 """ 

3487 ), 

3488 ] = "Successful Response", 

3489 responses: Annotated[ 

3490 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3491 Doc( 

3492 """ 

3493 Additional responses that could be returned by this *path operation*. 

3494 

3495 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3496 """ 

3497 ), 

3498 ] = None, 

3499 deprecated: Annotated[ 

3500 Optional[bool], 

3501 Doc( 

3502 """ 

3503 Mark this *path operation* as deprecated. 

3504 

3505 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3506 """ 

3507 ), 

3508 ] = None, 

3509 operation_id: Annotated[ 

3510 Optional[str], 

3511 Doc( 

3512 """ 

3513 Custom operation ID to be used by this *path operation*. 

3514 

3515 By default, it is generated automatically. 

3516 

3517 If you provide a custom operation ID, you need to make sure it is 

3518 unique for the whole API. 

3519 

3520 You can customize the 

3521 operation ID generation with the parameter 

3522 `generate_unique_id_function` in the `FastAPI` class. 

3523 

3524 Read more about it in the 

3525 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3526 """ 

3527 ), 

3528 ] = None, 

3529 response_model_include: Annotated[ 

3530 Optional[IncEx], 

3531 Doc( 

3532 """ 

3533 Configuration passed to Pydantic to include only certain fields in the 

3534 response data. 

3535 

3536 Read more about it in the 

3537 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3538 """ 

3539 ), 

3540 ] = None, 

3541 response_model_exclude: Annotated[ 

3542 Optional[IncEx], 

3543 Doc( 

3544 """ 

3545 Configuration passed to Pydantic to exclude certain fields in the 

3546 response data. 

3547 

3548 Read more about it in the 

3549 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3550 """ 

3551 ), 

3552 ] = None, 

3553 response_model_by_alias: Annotated[ 

3554 bool, 

3555 Doc( 

3556 """ 

3557 Configuration passed to Pydantic to define if the response model 

3558 should be serialized by alias when an alias is used. 

3559 

3560 Read more about it in the 

3561 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3562 """ 

3563 ), 

3564 ] = True, 

3565 response_model_exclude_unset: Annotated[ 

3566 bool, 

3567 Doc( 

3568 """ 

3569 Configuration passed to Pydantic to define if the response data 

3570 should have all the fields, including the ones that were not set and 

3571 have their default values. This is different from 

3572 `response_model_exclude_defaults` in that if the fields are set, 

3573 they will be included in the response, even if the value is the same 

3574 as the default. 

3575 

3576 When `True`, default values are omitted from the response. 

3577 

3578 Read more about it in the 

3579 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3580 """ 

3581 ), 

3582 ] = False, 

3583 response_model_exclude_defaults: Annotated[ 

3584 bool, 

3585 Doc( 

3586 """ 

3587 Configuration passed to Pydantic to define if the response data 

3588 should have all the fields, including the ones that have the same value 

3589 as the default. This is different from `response_model_exclude_unset` 

3590 in that if the fields are set but contain the same default values, 

3591 they will be excluded from the response. 

3592 

3593 When `True`, default values are omitted from the response. 

3594 

3595 Read more about it in the 

3596 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3597 """ 

3598 ), 

3599 ] = False, 

3600 response_model_exclude_none: Annotated[ 

3601 bool, 

3602 Doc( 

3603 """ 

3604 Configuration passed to Pydantic to define if the response data should 

3605 exclude fields set to `None`. 

3606 

3607 This is much simpler (less smart) than `response_model_exclude_unset` 

3608 and `response_model_exclude_defaults`. You probably want to use one of 

3609 those two instead of this one, as those allow returning `None` values 

3610 when it makes sense. 

3611 

3612 Read more about it in the 

3613 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

3614 """ 

3615 ), 

3616 ] = False, 

3617 include_in_schema: Annotated[ 

3618 bool, 

3619 Doc( 

3620 """ 

3621 Include this *path operation* in the generated OpenAPI schema. 

3622 

3623 This affects the generated OpenAPI (e.g. visible at `/docs`). 

3624 

3625 Read more about it in the 

3626 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

3627 """ 

3628 ), 

3629 ] = True, 

3630 response_class: Annotated[ 

3631 Type[Response], 

3632 Doc( 

3633 """ 

3634 Response class to be used for this *path operation*. 

3635 

3636 This will not be used if you return a response directly. 

3637 

3638 Read more about it in the 

3639 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

3640 """ 

3641 ), 

3642 ] = Default(JSONResponse), 

3643 name: Annotated[ 

3644 Optional[str], 

3645 Doc( 

3646 """ 

3647 Name for this *path operation*. Only used internally. 

3648 """ 

3649 ), 

3650 ] = None, 

3651 callbacks: Annotated[ 

3652 Optional[List[BaseRoute]], 

3653 Doc( 

3654 """ 

3655 List of *path operations* that will be used as OpenAPI callbacks. 

3656 

3657 This is only for OpenAPI documentation, the callbacks won't be used 

3658 directly. 

3659 

3660 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3661 

3662 Read more about it in the 

3663 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

3664 """ 

3665 ), 

3666 ] = None, 

3667 openapi_extra: Annotated[ 

3668 Optional[Dict[str, Any]], 

3669 Doc( 

3670 """ 

3671 Extra metadata to be included in the OpenAPI schema for this *path 

3672 operation*. 

3673 

3674 Read more about it in the 

3675 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

3676 """ 

3677 ), 

3678 ] = None, 

3679 generate_unique_id_function: Annotated[ 

3680 Callable[[routing.APIRoute], str], 

3681 Doc( 

3682 """ 

3683 Customize the function used to generate unique IDs for the *path 

3684 operations* shown in the generated OpenAPI. 

3685 

3686 This is particularly useful when automatically generating clients or 

3687 SDKs for your API. 

3688 

3689 Read more about it in the 

3690 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3691 """ 

3692 ), 

3693 ] = Default(generate_unique_id), 

3694 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

3695 """ 

3696 Add a *path operation* using an HTTP HEAD operation. 

3697 

3698 ## Example 

3699 

3700 ```python 

3701 from fastapi import FastAPI, Response 

3702 

3703 app = FastAPI() 

3704 

3705 @app.head("/items/", status_code=204) 

3706 def get_items_headers(response: Response): 

3707 response.headers["X-Cat-Dog"] = "Alone in the world" 

3708 ``` 

3709 """ 

3710 return self.router.head( 1abcdef

3711 path, 

3712 response_model=response_model, 

3713 status_code=status_code, 

3714 tags=tags, 

3715 dependencies=dependencies, 

3716 summary=summary, 

3717 description=description, 

3718 response_description=response_description, 

3719 responses=responses, 

3720 deprecated=deprecated, 

3721 operation_id=operation_id, 

3722 response_model_include=response_model_include, 

3723 response_model_exclude=response_model_exclude, 

3724 response_model_by_alias=response_model_by_alias, 

3725 response_model_exclude_unset=response_model_exclude_unset, 

3726 response_model_exclude_defaults=response_model_exclude_defaults, 

3727 response_model_exclude_none=response_model_exclude_none, 

3728 include_in_schema=include_in_schema, 

3729 response_class=response_class, 

3730 name=name, 

3731 callbacks=callbacks, 

3732 openapi_extra=openapi_extra, 

3733 generate_unique_id_function=generate_unique_id_function, 

3734 ) 

3735 

3736 def patch( 1abcdef

3737 self, 

3738 path: Annotated[ 

3739 str, 

3740 Doc( 

3741 """ 

3742 The URL path to be used for this *path operation*. 

3743 

3744 For example, in `http://example.com/items`, the path is `/items`. 

3745 """ 

3746 ), 

3747 ], 

3748 *, 

3749 response_model: Annotated[ 

3750 Any, 

3751 Doc( 

3752 """ 

3753 The type to use for the response. 

3754 

3755 It could be any valid Pydantic *field* type. So, it doesn't have to 

3756 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3757 etc. 

3758 

3759 It will be used for: 

3760 

3761 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3762 show it as the response (JSON Schema). 

3763 * Serialization: you could return an arbitrary object and the 

3764 `response_model` would be used to serialize that object into the 

3765 corresponding JSON. 

3766 * Filtering: the JSON sent to the client will only contain the data 

3767 (fields) defined in the `response_model`. If you returned an object 

3768 that contains an attribute `password` but the `response_model` does 

3769 not include that field, the JSON sent to the client would not have 

3770 that `password`. 

3771 * Validation: whatever you return will be serialized with the 

3772 `response_model`, converting any data as necessary to generate the 

3773 corresponding JSON. But if the data in the object returned is not 

3774 valid, that would mean a violation of the contract with the client, 

3775 so it's an error from the API developer. So, FastAPI will raise an 

3776 error and return a 500 error code (Internal Server Error). 

3777 

3778 Read more about it in the 

3779 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3780 """ 

3781 ), 

3782 ] = Default(None), 

3783 status_code: Annotated[ 

3784 Optional[int], 

3785 Doc( 

3786 """ 

3787 The default status code to be used for the response. 

3788 

3789 You could override the status code by returning a response directly. 

3790 

3791 Read more about it in the 

3792 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3793 """ 

3794 ), 

3795 ] = None, 

3796 tags: Annotated[ 

3797 Optional[List[Union[str, Enum]]], 

3798 Doc( 

3799 """ 

3800 A list of tags to be applied to the *path operation*. 

3801 

3802 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3803 

3804 Read more about it in the 

3805 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3806 """ 

3807 ), 

3808 ] = None, 

3809 dependencies: Annotated[ 

3810 Optional[Sequence[Depends]], 

3811 Doc( 

3812 """ 

3813 A list of dependencies (using `Depends()`) to be applied to the 

3814 *path operation*. 

3815 

3816 Read more about it in the 

3817 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3818 """ 

3819 ), 

3820 ] = None, 

3821 summary: Annotated[ 

3822 Optional[str], 

3823 Doc( 

3824 """ 

3825 A summary for the *path operation*. 

3826 

3827 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3828 

3829 Read more about it in the 

3830 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3831 """ 

3832 ), 

3833 ] = None, 

3834 description: Annotated[ 

3835 Optional[str], 

3836 Doc( 

3837 """ 

3838 A description for the *path operation*. 

3839 

3840 If not provided, it will be extracted automatically from the docstring 

3841 of the *path operation function*. 

3842 

3843 It can contain Markdown. 

3844 

3845 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3846 

3847 Read more about it in the 

3848 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3849 """ 

3850 ), 

3851 ] = None, 

3852 response_description: Annotated[ 

3853 str, 

3854 Doc( 

3855 """ 

3856 The description for the default response. 

3857 

3858 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3859 """ 

3860 ), 

3861 ] = "Successful Response", 

3862 responses: Annotated[ 

3863 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3864 Doc( 

3865 """ 

3866 Additional responses that could be returned by this *path operation*. 

3867 

3868 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3869 """ 

3870 ), 

3871 ] = None, 

3872 deprecated: Annotated[ 

3873 Optional[bool], 

3874 Doc( 

3875 """ 

3876 Mark this *path operation* as deprecated. 

3877 

3878 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3879 """ 

3880 ), 

3881 ] = None, 

3882 operation_id: Annotated[ 

3883 Optional[str], 

3884 Doc( 

3885 """ 

3886 Custom operation ID to be used by this *path operation*. 

3887 

3888 By default, it is generated automatically. 

3889 

3890 If you provide a custom operation ID, you need to make sure it is 

3891 unique for the whole API. 

3892 

3893 You can customize the 

3894 operation ID generation with the parameter 

3895 `generate_unique_id_function` in the `FastAPI` class. 

3896 

3897 Read more about it in the 

3898 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3899 """ 

3900 ), 

3901 ] = None, 

3902 response_model_include: Annotated[ 

3903 Optional[IncEx], 

3904 Doc( 

3905 """ 

3906 Configuration passed to Pydantic to include only certain fields in the 

3907 response data. 

3908 

3909 Read more about it in the 

3910 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3911 """ 

3912 ), 

3913 ] = None, 

3914 response_model_exclude: Annotated[ 

3915 Optional[IncEx], 

3916 Doc( 

3917 """ 

3918 Configuration passed to Pydantic to exclude certain fields in the 

3919 response data. 

3920 

3921 Read more about it in the 

3922 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3923 """ 

3924 ), 

3925 ] = None, 

3926 response_model_by_alias: Annotated[ 

3927 bool, 

3928 Doc( 

3929 """ 

3930 Configuration passed to Pydantic to define if the response model 

3931 should be serialized by alias when an alias is used. 

3932 

3933 Read more about it in the 

3934 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3935 """ 

3936 ), 

3937 ] = True, 

3938 response_model_exclude_unset: Annotated[ 

3939 bool, 

3940 Doc( 

3941 """ 

3942 Configuration passed to Pydantic to define if the response data 

3943 should have all the fields, including the ones that were not set and 

3944 have their default values. This is different from 

3945 `response_model_exclude_defaults` in that if the fields are set, 

3946 they will be included in the response, even if the value is the same 

3947 as the default. 

3948 

3949 When `True`, default values are omitted from the response. 

3950 

3951 Read more about it in the 

3952 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3953 """ 

3954 ), 

3955 ] = False, 

3956 response_model_exclude_defaults: Annotated[ 

3957 bool, 

3958 Doc( 

3959 """ 

3960 Configuration passed to Pydantic to define if the response data 

3961 should have all the fields, including the ones that have the same value 

3962 as the default. This is different from `response_model_exclude_unset` 

3963 in that if the fields are set but contain the same default values, 

3964 they will be excluded from the response. 

3965 

3966 When `True`, default values are omitted from the response. 

3967 

3968 Read more about it in the 

3969 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3970 """ 

3971 ), 

3972 ] = False, 

3973 response_model_exclude_none: Annotated[ 

3974 bool, 

3975 Doc( 

3976 """ 

3977 Configuration passed to Pydantic to define if the response data should 

3978 exclude fields set to `None`. 

3979 

3980 This is much simpler (less smart) than `response_model_exclude_unset` 

3981 and `response_model_exclude_defaults`. You probably want to use one of 

3982 those two instead of this one, as those allow returning `None` values 

3983 when it makes sense. 

3984 

3985 Read more about it in the 

3986 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

3987 """ 

3988 ), 

3989 ] = False, 

3990 include_in_schema: Annotated[ 

3991 bool, 

3992 Doc( 

3993 """ 

3994 Include this *path operation* in the generated OpenAPI schema. 

3995 

3996 This affects the generated OpenAPI (e.g. visible at `/docs`). 

3997 

3998 Read more about it in the 

3999 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

4000 """ 

4001 ), 

4002 ] = True, 

4003 response_class: Annotated[ 

4004 Type[Response], 

4005 Doc( 

4006 """ 

4007 Response class to be used for this *path operation*. 

4008 

4009 This will not be used if you return a response directly. 

4010 

4011 Read more about it in the 

4012 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

4013 """ 

4014 ), 

4015 ] = Default(JSONResponse), 

4016 name: Annotated[ 

4017 Optional[str], 

4018 Doc( 

4019 """ 

4020 Name for this *path operation*. Only used internally. 

4021 """ 

4022 ), 

4023 ] = None, 

4024 callbacks: Annotated[ 

4025 Optional[List[BaseRoute]], 

4026 Doc( 

4027 """ 

4028 List of *path operations* that will be used as OpenAPI callbacks. 

4029 

4030 This is only for OpenAPI documentation, the callbacks won't be used 

4031 directly. 

4032 

4033 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4034 

4035 Read more about it in the 

4036 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

4037 """ 

4038 ), 

4039 ] = None, 

4040 openapi_extra: Annotated[ 

4041 Optional[Dict[str, Any]], 

4042 Doc( 

4043 """ 

4044 Extra metadata to be included in the OpenAPI schema for this *path 

4045 operation*. 

4046 

4047 Read more about it in the 

4048 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

4049 """ 

4050 ), 

4051 ] = None, 

4052 generate_unique_id_function: Annotated[ 

4053 Callable[[routing.APIRoute], str], 

4054 Doc( 

4055 """ 

4056 Customize the function used to generate unique IDs for the *path 

4057 operations* shown in the generated OpenAPI. 

4058 

4059 This is particularly useful when automatically generating clients or 

4060 SDKs for your API. 

4061 

4062 Read more about it in the 

4063 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4064 """ 

4065 ), 

4066 ] = Default(generate_unique_id), 

4067 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4068 """ 

4069 Add a *path operation* using an HTTP PATCH operation. 

4070 

4071 ## Example 

4072 

4073 ```python 

4074 from fastapi import FastAPI 

4075 from pydantic import BaseModel 

4076 

4077 class Item(BaseModel): 

4078 name: str 

4079 description: str | None = None 

4080 

4081 app = FastAPI() 

4082 

4083 @app.patch("/items/") 

4084 def update_item(item: Item): 

4085 return {"message": "Item updated in place"} 

4086 ``` 

4087 """ 

4088 return self.router.patch( 1abcdef

4089 path, 

4090 response_model=response_model, 

4091 status_code=status_code, 

4092 tags=tags, 

4093 dependencies=dependencies, 

4094 summary=summary, 

4095 description=description, 

4096 response_description=response_description, 

4097 responses=responses, 

4098 deprecated=deprecated, 

4099 operation_id=operation_id, 

4100 response_model_include=response_model_include, 

4101 response_model_exclude=response_model_exclude, 

4102 response_model_by_alias=response_model_by_alias, 

4103 response_model_exclude_unset=response_model_exclude_unset, 

4104 response_model_exclude_defaults=response_model_exclude_defaults, 

4105 response_model_exclude_none=response_model_exclude_none, 

4106 include_in_schema=include_in_schema, 

4107 response_class=response_class, 

4108 name=name, 

4109 callbacks=callbacks, 

4110 openapi_extra=openapi_extra, 

4111 generate_unique_id_function=generate_unique_id_function, 

4112 ) 

4113 

4114 def trace( 1abcdef

4115 self, 

4116 path: Annotated[ 

4117 str, 

4118 Doc( 

4119 """ 

4120 The URL path to be used for this *path operation*. 

4121 

4122 For example, in `http://example.com/items`, the path is `/items`. 

4123 """ 

4124 ), 

4125 ], 

4126 *, 

4127 response_model: Annotated[ 

4128 Any, 

4129 Doc( 

4130 """ 

4131 The type to use for the response. 

4132 

4133 It could be any valid Pydantic *field* type. So, it doesn't have to 

4134 be a Pydantic model, it could be other things, like a `list`, `dict`, 

4135 etc. 

4136 

4137 It will be used for: 

4138 

4139 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

4140 show it as the response (JSON Schema). 

4141 * Serialization: you could return an arbitrary object and the 

4142 `response_model` would be used to serialize that object into the 

4143 corresponding JSON. 

4144 * Filtering: the JSON sent to the client will only contain the data 

4145 (fields) defined in the `response_model`. If you returned an object 

4146 that contains an attribute `password` but the `response_model` does 

4147 not include that field, the JSON sent to the client would not have 

4148 that `password`. 

4149 * Validation: whatever you return will be serialized with the 

4150 `response_model`, converting any data as necessary to generate the 

4151 corresponding JSON. But if the data in the object returned is not 

4152 valid, that would mean a violation of the contract with the client, 

4153 so it's an error from the API developer. So, FastAPI will raise an 

4154 error and return a 500 error code (Internal Server Error). 

4155 

4156 Read more about it in the 

4157 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

4158 """ 

4159 ), 

4160 ] = Default(None), 

4161 status_code: Annotated[ 

4162 Optional[int], 

4163 Doc( 

4164 """ 

4165 The default status code to be used for the response. 

4166 

4167 You could override the status code by returning a response directly. 

4168 

4169 Read more about it in the 

4170 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

4171 """ 

4172 ), 

4173 ] = None, 

4174 tags: Annotated[ 

4175 Optional[List[Union[str, Enum]]], 

4176 Doc( 

4177 """ 

4178 A list of tags to be applied to the *path operation*. 

4179 

4180 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4181 

4182 Read more about it in the 

4183 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

4184 """ 

4185 ), 

4186 ] = None, 

4187 dependencies: Annotated[ 

4188 Optional[Sequence[Depends]], 

4189 Doc( 

4190 """ 

4191 A list of dependencies (using `Depends()`) to be applied to the 

4192 *path operation*. 

4193 

4194 Read more about it in the 

4195 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

4196 """ 

4197 ), 

4198 ] = None, 

4199 summary: Annotated[ 

4200 Optional[str], 

4201 Doc( 

4202 """ 

4203 A summary for the *path operation*. 

4204 

4205 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4206 

4207 Read more about it in the 

4208 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

4209 """ 

4210 ), 

4211 ] = None, 

4212 description: Annotated[ 

4213 Optional[str], 

4214 Doc( 

4215 """ 

4216 A description for the *path operation*. 

4217 

4218 If not provided, it will be extracted automatically from the docstring 

4219 of the *path operation function*. 

4220 

4221 It can contain Markdown. 

4222 

4223 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4224 

4225 Read more about it in the 

4226 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

4227 """ 

4228 ), 

4229 ] = None, 

4230 response_description: Annotated[ 

4231 str, 

4232 Doc( 

4233 """ 

4234 The description for the default response. 

4235 

4236 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4237 """ 

4238 ), 

4239 ] = "Successful Response", 

4240 responses: Annotated[ 

4241 Optional[Dict[Union[int, str], Dict[str, Any]]], 

4242 Doc( 

4243 """ 

4244 Additional responses that could be returned by this *path operation*. 

4245 

4246 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4247 """ 

4248 ), 

4249 ] = None, 

4250 deprecated: Annotated[ 

4251 Optional[bool], 

4252 Doc( 

4253 """ 

4254 Mark this *path operation* as deprecated. 

4255 

4256 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4257 """ 

4258 ), 

4259 ] = None, 

4260 operation_id: Annotated[ 

4261 Optional[str], 

4262 Doc( 

4263 """ 

4264 Custom operation ID to be used by this *path operation*. 

4265 

4266 By default, it is generated automatically. 

4267 

4268 If you provide a custom operation ID, you need to make sure it is 

4269 unique for the whole API. 

4270 

4271 You can customize the 

4272 operation ID generation with the parameter 

4273 `generate_unique_id_function` in the `FastAPI` class. 

4274 

4275 Read more about it in the 

4276 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4277 """ 

4278 ), 

4279 ] = None, 

4280 response_model_include: Annotated[ 

4281 Optional[IncEx], 

4282 Doc( 

4283 """ 

4284 Configuration passed to Pydantic to include only certain fields in the 

4285 response data. 

4286 

4287 Read more about it in the 

4288 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4289 """ 

4290 ), 

4291 ] = None, 

4292 response_model_exclude: Annotated[ 

4293 Optional[IncEx], 

4294 Doc( 

4295 """ 

4296 Configuration passed to Pydantic to exclude certain fields in the 

4297 response data. 

4298 

4299 Read more about it in the 

4300 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4301 """ 

4302 ), 

4303 ] = None, 

4304 response_model_by_alias: Annotated[ 

4305 bool, 

4306 Doc( 

4307 """ 

4308 Configuration passed to Pydantic to define if the response model 

4309 should be serialized by alias when an alias is used. 

4310 

4311 Read more about it in the 

4312 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4313 """ 

4314 ), 

4315 ] = True, 

4316 response_model_exclude_unset: Annotated[ 

4317 bool, 

4318 Doc( 

4319 """ 

4320 Configuration passed to Pydantic to define if the response data 

4321 should have all the fields, including the ones that were not set and 

4322 have their default values. This is different from 

4323 `response_model_exclude_defaults` in that if the fields are set, 

4324 they will be included in the response, even if the value is the same 

4325 as the default. 

4326 

4327 When `True`, default values are omitted from the response. 

4328 

4329 Read more about it in the 

4330 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4331 """ 

4332 ), 

4333 ] = False, 

4334 response_model_exclude_defaults: Annotated[ 

4335 bool, 

4336 Doc( 

4337 """ 

4338 Configuration passed to Pydantic to define if the response data 

4339 should have all the fields, including the ones that have the same value 

4340 as the default. This is different from `response_model_exclude_unset` 

4341 in that if the fields are set but contain the same default values, 

4342 they will be excluded from the response. 

4343 

4344 When `True`, default values are omitted from the response. 

4345 

4346 Read more about it in the 

4347 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4348 """ 

4349 ), 

4350 ] = False, 

4351 response_model_exclude_none: Annotated[ 

4352 bool, 

4353 Doc( 

4354 """ 

4355 Configuration passed to Pydantic to define if the response data should 

4356 exclude fields set to `None`. 

4357 

4358 This is much simpler (less smart) than `response_model_exclude_unset` 

4359 and `response_model_exclude_defaults`. You probably want to use one of 

4360 those two instead of this one, as those allow returning `None` values 

4361 when it makes sense. 

4362 

4363 Read more about it in the 

4364 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

4365 """ 

4366 ), 

4367 ] = False, 

4368 include_in_schema: Annotated[ 

4369 bool, 

4370 Doc( 

4371 """ 

4372 Include this *path operation* in the generated OpenAPI schema. 

4373 

4374 This affects the generated OpenAPI (e.g. visible at `/docs`). 

4375 

4376 Read more about it in the 

4377 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

4378 """ 

4379 ), 

4380 ] = True, 

4381 response_class: Annotated[ 

4382 Type[Response], 

4383 Doc( 

4384 """ 

4385 Response class to be used for this *path operation*. 

4386 

4387 This will not be used if you return a response directly. 

4388 

4389 Read more about it in the 

4390 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

4391 """ 

4392 ), 

4393 ] = Default(JSONResponse), 

4394 name: Annotated[ 

4395 Optional[str], 

4396 Doc( 

4397 """ 

4398 Name for this *path operation*. Only used internally. 

4399 """ 

4400 ), 

4401 ] = None, 

4402 callbacks: Annotated[ 

4403 Optional[List[BaseRoute]], 

4404 Doc( 

4405 """ 

4406 List of *path operations* that will be used as OpenAPI callbacks. 

4407 

4408 This is only for OpenAPI documentation, the callbacks won't be used 

4409 directly. 

4410 

4411 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4412 

4413 Read more about it in the 

4414 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

4415 """ 

4416 ), 

4417 ] = None, 

4418 openapi_extra: Annotated[ 

4419 Optional[Dict[str, Any]], 

4420 Doc( 

4421 """ 

4422 Extra metadata to be included in the OpenAPI schema for this *path 

4423 operation*. 

4424 

4425 Read more about it in the 

4426 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

4427 """ 

4428 ), 

4429 ] = None, 

4430 generate_unique_id_function: Annotated[ 

4431 Callable[[routing.APIRoute], str], 

4432 Doc( 

4433 """ 

4434 Customize the function used to generate unique IDs for the *path 

4435 operations* shown in the generated OpenAPI. 

4436 

4437 This is particularly useful when automatically generating clients or 

4438 SDKs for your API. 

4439 

4440 Read more about it in the 

4441 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4442 """ 

4443 ), 

4444 ] = Default(generate_unique_id), 

4445 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4446 """ 

4447 Add a *path operation* using an HTTP TRACE operation. 

4448 

4449 ## Example 

4450 

4451 ```python 

4452 from fastapi import FastAPI 

4453 

4454 app = FastAPI() 

4455 

4456 @app.trace("/items/{item_id}") 

4457 def trace_item(item_id: str): 

4458 return None 

4459 ``` 

4460 """ 

4461 return self.router.trace( 1abcdef

4462 path, 

4463 response_model=response_model, 

4464 status_code=status_code, 

4465 tags=tags, 

4466 dependencies=dependencies, 

4467 summary=summary, 

4468 description=description, 

4469 response_description=response_description, 

4470 responses=responses, 

4471 deprecated=deprecated, 

4472 operation_id=operation_id, 

4473 response_model_include=response_model_include, 

4474 response_model_exclude=response_model_exclude, 

4475 response_model_by_alias=response_model_by_alias, 

4476 response_model_exclude_unset=response_model_exclude_unset, 

4477 response_model_exclude_defaults=response_model_exclude_defaults, 

4478 response_model_exclude_none=response_model_exclude_none, 

4479 include_in_schema=include_in_schema, 

4480 response_class=response_class, 

4481 name=name, 

4482 callbacks=callbacks, 

4483 openapi_extra=openapi_extra, 

4484 generate_unique_id_function=generate_unique_id_function, 

4485 ) 

4486 

4487 def websocket_route( 1abcdef

4488 self, path: str, name: Union[str, None] = None 

4489 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4490 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef

4491 self.router.add_websocket_route(path, func, name=name) 1abcdef

4492 return func 1abcdef

4493 

4494 return decorator 1abcdef

4495 

4496 @deprecated( 1abcdef

4497 """ 

4498 on_event is deprecated, use lifespan event handlers instead. 

4499 

4500 Read more about it in the 

4501 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/). 

4502 """ 

4503 ) 

4504 def on_event( 1abcdef

4505 self, 

4506 event_type: Annotated[ 

4507 str, 

4508 Doc( 

4509 """ 

4510 The type of event. `startup` or `shutdown`. 

4511 """ 

4512 ), 

4513 ], 

4514 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4515 """ 

4516 Add an event handler for the application. 

4517 

4518 `on_event` is deprecated, use `lifespan` event handlers instead. 

4519 

4520 Read more about it in the 

4521 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated). 

4522 """ 

4523 return self.router.on_event(event_type) 2a | jbb } qbc ~ xbd abEbe bbLbf cbSb

4524 

4525 def middleware( 1abcdef

4526 self, 

4527 middleware_type: Annotated[ 

4528 str, 

4529 Doc( 

4530 """ 

4531 The type of middleware. Currently only supports `http`. 

4532 """ 

4533 ), 

4534 ], 

4535 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4536 """ 

4537 Add a middleware to the application. 

4538 

4539 Read more about it in the 

4540 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/). 

4541 

4542 ## Example 

4543 

4544 ```python 

4545 import time 

4546 from typing import Awaitable, Callable 

4547 

4548 from fastapi import FastAPI, Request, Response 

4549 

4550 app = FastAPI() 

4551 

4552 

4553 @app.middleware("http") 

4554 async def add_process_time_header( 

4555 request: Request, call_next: Callable[[Request], Awaitable[Response]] 

4556 ) -> Response: 

4557 start_time = time.time() 

4558 response = await call_next(request) 

4559 process_time = time.time() - start_time 

4560 response.headers["X-Process-Time"] = str(process_time) 

4561 return response 

4562 ``` 

4563 """ 

4564 

4565 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef

4566 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcdef

4567 return func 1abcdef

4568 

4569 return decorator 1abcdef

4570 

4571 def exception_handler( 1abcdef

4572 self, 

4573 exc_class_or_status_code: Annotated[ 

4574 Union[int, Type[Exception]], 

4575 Doc( 

4576 """ 

4577 The Exception class this would handle, or a status code. 

4578 """ 

4579 ), 

4580 ], 

4581 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4582 """ 

4583 Add an exception handler to the app. 

4584 

4585 Read more about it in the 

4586 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/). 

4587 

4588 ## Example 

4589 

4590 ```python 

4591 from fastapi import FastAPI, Request 

4592 from fastapi.responses import JSONResponse 

4593 

4594 

4595 class UnicornException(Exception): 

4596 def __init__(self, name: str): 

4597 self.name = name 

4598 

4599 

4600 app = FastAPI() 

4601 

4602 

4603 @app.exception_handler(UnicornException) 

4604 async def unicorn_exception_handler(request: Request, exc: UnicornException): 

4605 return JSONResponse( 

4606 status_code=418, 

4607 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."}, 

4608 ) 

4609 ``` 

4610 """ 

4611 

4612 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdef

4613 self.add_exception_handler(exc_class_or_status_code, func) 1abcdef

4614 return func 1abcdef

4615 

4616 return decorator 1abcdef