Coverage for fastapi/applications.py: 100%

152 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-09-06 16:22 +0000

1from enum import Enum 1abcde

2from typing import ( 1abcde

3 Any, 

4 Awaitable, 

5 Callable, 

6 Coroutine, 

7 Dict, 

8 List, 

9 Optional, 

10 Sequence, 

11 Type, 

12 TypeVar, 

13 Union, 

14) 

15 

16from fastapi import routing 1abcde

17from fastapi.datastructures import Default, DefaultPlaceholder 1abcde

18from fastapi.exception_handlers import ( 1abcde

19 http_exception_handler, 

20 request_validation_exception_handler, 

21 websocket_request_validation_exception_handler, 

22) 

23from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcde

24from fastapi.logger import logger 1abcde

25from fastapi.openapi.docs import ( 1abcde

26 get_redoc_html, 

27 get_swagger_ui_html, 

28 get_swagger_ui_oauth2_redirect_html, 

29) 

30from fastapi.openapi.utils import get_openapi 1abcde

31from fastapi.params import Depends 1abcde

32from fastapi.types import DecoratedCallable, IncEx 1abcde

33from fastapi.utils import generate_unique_id 1abcde

34from starlette.applications import Starlette 1abcde

35from starlette.datastructures import State 1abcde

36from starlette.exceptions import HTTPException 1abcde

37from starlette.middleware import Middleware 1abcde

38from starlette.middleware.base import BaseHTTPMiddleware 1abcde

39from starlette.requests import Request 1abcde

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

41from starlette.routing import BaseRoute 1abcde

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

43from typing_extensions import Annotated, Doc, deprecated 1abcde

44 

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

46 

47 

48class FastAPI(Starlette): 1abcde

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__( 1abcde

65 self: AppType, 

66 *, 

67 debug: Annotated[ 

68 bool, 

69 Doc( 

70 """ 

71 Boolean indicating if debug tracebacks should be returned on server 

72 errors. 

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-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 **extra: Annotated[ 

814 Any, 

815 Doc( 

816 """ 

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

818 anywhere. 

819 """ 

820 ), 

821 ], 

822 ) -> None: 

823 self.debug = debug 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

824 self.title = title 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

825 self.summary = summary 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

826 self.description = description 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

827 self.version = version 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

828 self.terms_of_service = terms_of_service 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

829 self.contact = contact 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

830 self.license_info = license_info 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

831 self.openapi_url = openapi_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

832 self.openapi_tags = openapi_tags 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

833 self.root_path_in_servers = root_path_in_servers 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

834 self.docs_url = docs_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

835 self.redoc_url = redoc_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

836 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

837 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

838 self.swagger_ui_parameters = swagger_ui_parameters 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

839 self.servers = servers or [] 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

840 self.separate_input_output_schemas = separate_input_output_schemas 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

841 self.extra = extra 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

842 self.openapi_version: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

843 str, 

844 Doc( 

845 """ 

846 The version string of OpenAPI. 

847 

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

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

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

851 

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

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

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

855 use case. 

856 

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

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

859 schema. It is only available as an attribute. 

860 

861 **Example** 

862 

863 ```python 

864 from fastapi import FastAPI 

865 

866 app = FastAPI() 

867 

868 app.openapi_version = "3.0.2" 

869 ``` 

870 """ 

871 ), 

872 ] = "3.1.0" 

873 self.openapi_schema: Optional[Dict[str, Any]] = None 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

874 if self.openapi_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

875 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

876 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

877 # TODO: remove when discarding the openapi_prefix parameter 

878 if openapi_prefix: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

879 logger.warning( 1abcde

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

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

882 "automatic. Check the docs at " 

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

884 ) 

885 self.webhooks: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

886 routing.APIRouter, 

887 Doc( 

888 """ 

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

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

891 

892 Read more about it in the 

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

894 """ 

895 ), 

896 ] = webhooks or routing.APIRouter() 

897 self.root_path = root_path or openapi_prefix 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

898 self.state: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

899 State, 

900 Doc( 

901 """ 

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

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

904 

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

906 would instead use FastAPI dependencies. 

907 

908 This is simply inherited from Starlette. 

909 

910 Read more about it in the 

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

912 """ 

913 ), 

914 ] = State() 

915 self.dependency_overrides: Annotated[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

916 Dict[Callable[..., Any], Callable[..., Any]], 

917 Doc( 

918 """ 

919 A dictionary with overrides for the dependencies. 

920 

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

922 actual dependency that should be called. 

923 

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

925 versions. 

926 

927 Read more about it in the 

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

929 """ 

930 ), 

931 ] = {} 

932 self.router: routing.APIRouter = routing.APIRouter( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

933 routes=routes, 

934 redirect_slashes=redirect_slashes, 

935 dependency_overrides_provider=self, 

936 on_startup=on_startup, 

937 on_shutdown=on_shutdown, 

938 lifespan=lifespan, 

939 default_response_class=default_response_class, 

940 dependencies=dependencies, 

941 callbacks=callbacks, 

942 deprecated=deprecated, 

943 include_in_schema=include_in_schema, 

944 responses=responses, 

945 generate_unique_id_function=generate_unique_id_function, 

946 defer_init=False, 

947 ) 

948 self.exception_handlers: Dict[ 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

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

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

951 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

952 self.exception_handlers.setdefault( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

953 RequestValidationError, request_validation_exception_handler 

954 ) 

955 self.exception_handlers.setdefault( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

956 WebSocketRequestValidationError, 

957 # Starlette still has incorrect type specification for the handlers 

958 websocket_request_validation_exception_handler, # type: ignore 

959 ) 

960 

961 self.user_middleware: List[Middleware] = ( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

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

963 ) 

964 self.middleware_stack: Union[ASGIApp, None] = None 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

965 self.setup() 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

966 

967 def openapi(self) -> Dict[str, Any]: 1abcde

968 """ 

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

970 internally. 

971 

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

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

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

975 

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

977 

978 Read more in the 

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

980 """ 

981 if not self.openapi_schema: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

982 self.openapi_schema = get_openapi( 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

983 title=self.title, 

984 version=self.version, 

985 openapi_version=self.openapi_version, 

986 summary=self.summary, 

987 description=self.description, 

988 terms_of_service=self.terms_of_service, 

989 contact=self.contact, 

990 license_info=self.license_info, 

991 routes=self.routes, 

992 webhooks=self.webhooks.routes, 

993 tags=self.openapi_tags, 

994 servers=self.servers, 

995 separate_input_output_schemas=self.separate_input_output_schemas, 

996 ) 

997 return self.openapi_schema 2EfFfGfHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

998 

999 def setup(self) -> None: 1abcde

1000 if self.openapi_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1001 urls = (server_data.get("url") for server_data in self.servers) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1002 server_urls = {url for url in urls if url} 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1003 

1004 async def openapi(req: Request) -> JSONResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1005 root_path = req.scope.get("root_path", "").rstrip("/") 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

1006 if root_path not in server_urls: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

1007 if root_path and self.root_path_in_servers: 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

1008 self.servers.insert(0, {"url": root_path}) 2afpfbfcfqfdfrfefffsfgftfhfifufjfvfkflfwfmfxfnfofyf

1009 server_urls.add(root_path) 2afpfbfcfqfdfrfefffsfgftfhfifufjfvfkflfwfmfxfnfofyf

1010 return JSONResponse(self.openapi()) 2EfFfGfRvHfIfJfKfLfMfNfOfPfQfRfafSfTfUfVfWfXfk 3 l m n o p 4 YfZf0f1f2f3f4f5f6f7fq r 8f9f!f#f$f%f'f(f)f*f+f,f-fs .f/f:f;f=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgpfbfcfzfxgygzgAgBgCgDgEgFgGgHgIgf JgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g}v7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#hqf$h%h'h(h)h*h+h,hSv-h.h/h:h;h=h?h@h[h]h^hdf_h`h{h|h}h~ht 5 u v w x y 6 aibicidieifigihiiijiz A kiliminioipiqirisitiuiviwiB xiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9irfefffAf!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[ig ]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjuj~vvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkTvZk0k1k2k3k4k5k6k7ksf8k9k!k#k$k%k'k(kUv)k*k+k,k-k.k/k:k;k=k?kgf@k[k]k^k_k`kC 7 D E F G H 8 {k|k}k~kalblcldlelflI J glhliljl9 ! klllmlnlolplqlrlslK tlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5ltfhfifBf6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lh |l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmawGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojoVvkolomonooopoqorosotouovowoufxoyozoAoBoCoDoEoWvFoGoHoIoJoKoLoMoNoOoPojfQoRoSoToUoVoL # M N O P Q $ WoXoYoZo0o1o2o3o4o5oR S 6o7o8o9o% ' !o#o$o%o'o(o)o*o+oT ,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvfkflfCfvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpi XpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_pbw`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9rXv!r#r$r%r'r(r)r*r+r,r-r.r/rwf:r;r=r?r@r[r]r^rYv_r`r{r|r}r~rasbscsdsesmffsgshsisjsksU ( V W X Y Z ) lsmsnsospsqsrssstsus0 1 vswsxsys* + zsAsBsCsDsEsFsGsHs2 IsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-sxfnfofDf.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltj mtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtcwVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvZvzvAvBvCvDvEvFvGvHvIvJvKvLvyfMvNvOvPvQv

1011 

1012 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1013 if self.openapi_url and self.docs_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1014 

1015 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1016 root_path = req.scope.get("root_path", "").rstrip("/") 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v

1017 openapi_url = root_path + self.openapi_url 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v

1018 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v

1019 if oauth2_redirect_url: 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v

1020 oauth2_redirect_url = root_path + oauth2_redirect_url 20v1v2vf 3v4v5v6v7v8vg 9v!v#v$v%v'vh (v)v*v+v,v-vi .v/v:v;v=v?vj @v[v]v

1021 return get_swagger_ui_html( 20v1v^v2vf 3v4v5v6v7v_v8vg 9v!v#v$v%v`v'vh (v)v*v+v,v{v-vi .v/v:v;v=v|v?vj @v[v]v

1022 openapi_url=openapi_url, 

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

1024 oauth2_redirect_url=oauth2_redirect_url, 

1025 init_oauth=self.swagger_ui_init_oauth, 

1026 swagger_ui_parameters=self.swagger_ui_parameters, 

1027 ) 

1028 

1029 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1030 

1031 if self.swagger_ui_oauth2_redirect_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1032 

1033 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1034 return get_swagger_ui_oauth2_redirect_html() 2iwjwkwlwmwnwowpwqwrw

1035 

1036 self.add_route( 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1037 self.swagger_ui_oauth2_redirect_url, 

1038 swagger_ui_redirect, 

1039 include_in_schema=False, 

1040 ) 

1041 if self.openapi_url and self.redoc_url: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f `eWb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg {e/b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch |evcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci }e!c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj ~eodpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1042 

1043 async def redoc_html(req: Request) -> HTMLResponse: 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1044 root_path = req.scope.get("root_path", "").rstrip("/") 2dwf ewg fwh gwi hwj

1045 openapi_url = root_path + self.openapi_url 2dwf ewg fwh gwi hwj

1046 return get_redoc_html( 2dwf ewg fwh gwi hwj

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

1048 ) 

1049 

1050 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a GbHbIbJbKbLbk 3 l m n o p 4 MbNbEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPbZd0d1d2d3dQbRbSb, [ TbUbVb] s f Wb4d5dXbYbZb^ 0b1b2b3b4bb 5b6b7b8b9b!bt 5 u v w x y 6 #b$b6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b@d[d]d^d_d(b)b*b- } +b,b-b~ B .bg /b:b`d{d;b=b?babbb@b[b]b^b_b`bc {b|b}b~bacbcC 7 D E F G H 8 ccdc|d}d~daebecedeeefegeheiejekelemeneoepeqerecbdbebI J fbecfcgc9 hcic! jckclcseteuevewemcncoc. gbpcqcrchbK sctcuch vcwcxcycxeyezezcAcBcibjbkblbCcDcEcFcGcHcIcJcKcd LcMcNcOcPcQcL # M N O P Q $ RcScAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXc' YcZc0cVeWeXeYeZe1c2c3c/ qb4c5c6crbT 7c8c9ci !c#c$c%c0e1e2e'c(c)csbtbubvb*c+c,c-c.c/c:c;c=ce ?c@c[c]c^c_cU ( V W X Y Z ) `c{c3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbd+ cddded;e=e?e@e[efdgdhd: AbidjdkdBb2 ldmdndj odpdqdrd]e^e_esdtdudCbDbEbFbvdwdxdydzdAdBdCdDd

1051 

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

1053 if self.root_path: 3a Rw Sw Tw Uw Vw Ww Xw Yw Zw 0w 1w 2w Ef 3w 4w Ff Gf 5w Rv Hf If Jf Kf 6w 7w 8w 9w Lf !w #w $w %w sw 'w Gb Hb Mf (w )w Nf dw 0v iw *w Ib +w Of ,w -w .w Pf Qf /w :w 1v jw Jb Kb Lb ;w =w ?w @w [w ]w ^w _w `w {w |w }w ~w ax bx cx dx ex fx gx hx ix jx kx lx mx nx ox px qx rx sx tx ux vx wx xx yx zx Ax Bx Cx Dx Ex Fx Gx Hx Ix Jx Kx Lx Mx Nx Ox Px Qx Rx Sx Tx Rf Ux Vx Wx Xx Yx Zx 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x !x #x $x %x 'x (x )x *x +x ,x -x .x /x :x ;x tw af =x Sf ?x @x [x Tf ]x ^x _x `x {x |x }x ~x Uf ay by cy dy Vf ey fy Wf gy hy iy jy ky ly my ny Xf oy k 3 l m n o p 4 py Yf qy Zf ry sy ty uy vy 0f wy xy yy zy Ay By Cy Dy Ey Fy 1f Mb Nb 2f Gy Hy Iy Jy Ky 3f Ly My Ny Oy 4f Py ^v Qy Ry 5f Sy 6f Ty 7f ; = ? q r @ Uy 8f Vy Wy Xy 9f Yy Zy 0y 1y 2y !f 3y 4y 5y 6y 7y 8y 9y !y #y $y %y 'y (y )y *y +y ,y -y .y /y :y ;y =y ?y @y [y ]y ^y _y `y {y |y }y ~y az bz cz dz ez fz gz hz iz jz kz lz mz nz oz pz qz rz sz tz uz vz wz xz yz zz Az Bz Cz Dz Ez Fz Gz Hz Iz Jz Kz Lz Mz Nz Oz #f Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz 0z 1z 2z 3z 4z 5z 6z 7z 8z 9z !z #z $z %z 'z (z )z *z +z ,z Ob Pb -z .z $f /z %f :z 'f (f ;z =z ?z @z [z ]z ^z )f _z `z {z |z }z ~z aA bA cA dA *f eA +f fA gA hA iA jA kA lA mA nA oA pA qA rA sA ,f tA uA vA wA xA yA zA AA BA CA DA EA FA GA HA IA JA KA LA MA NA OA PA QA RA SA TA UA VA WA XA YA ZA 0A -f 1A 2A 3A 4A 5A 6A Qb Rb Sb , [ Tb 7A Ub Vb ] s .f 8A 9A /f !A #A :f $A %A ;f 'A (A =f )A *A ?f +A ,A @f -A .A [f /A :A ]f ;A =A ^f ?A @A _f [A ]A `f ^A _A {f `A {A |A }A |f ~A aB bB cB }f dB eB fB gB ~f hB iB jB ag kB lB mB bg nB oB pB cg qB rB sB dg tB uB vB eg wB xB yB fg zB AB BB CB DB EB FB GB HB gg IB JB KB hg LB ig MB NB OB PB QB RB SB jg TB UB VB WB XB YB ZB 0B 1B kg 2B 3B 4B lg 5B mg 6B 7B 8B ng 9B !B #B og $B %B 'B (B )B *B +B ,B -B .B /B :B ;B =B ?B @B [B ]B ^B _B `B {B |B }B ~B aC bC cC dC eC fC gC pg hC iC jC kC lC qg mC 2v nC oC rg pC qC rC sC sg tC uC tg vC wC ug xC yC vg zC AC BC CC DC EC FC GC HC IC wg JC KC LC MC NC pf uw bf vw cf ww zf OC PC QC RC SC TC UC VC WC XC YC xg ZC 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C !C #C $C %C 'C (C )C *C +C ,C -C .C /C yg :C ;C =C ?C @C [C ]C ^C _C `C {C |C }C ~C aD bD cD zg dD eD fD gD hD iD jD kD lD mD nD oD pD qD Ag rD sD tD Bg Cg uD vD wD xD Dg yD zD AD BD Eg CD DD ED Fg FD GD HD Gg ID JD KD Hg Ig LD f `e Wb MD 3v ND 4v OD 5v PD Jg QD Kg RD SD TD UD VD WD XD YD ZD 0D 1D 2D 3D 4D 5D 6D Lg 7D Mg 8D Ng 9D Og !D Pg Qg #D Rg $D %D 'D (D )D *D Sg +D ,D -D Tg .D Ug Vg /D :D Wg ;D Xg =D Yg ?D Zg @D [D ]D ^D 0g _D `D {D |D 1g }D ~D aE bE cE dE eE fE gE hE iE jE kE lE mE nE oE pE qE rE sE tE uE vE wE xE yE zE AE BE 2g CE DE EE FE GE HE IE JE 3g KE 4g LE 5g ME 6g NE }v OE 7g PE 8g QE RE 9g SE !g TE #g UE $g VE %g WE XE YE ZE 'g 0E 1E (g 2E 3E )g 4E 5E 6E *g +g 7E 8E 9E !E #E ,g $E -g %E .g 'E /g (E :g )E ;g *E =g +E ?g ,E @g [g -E .E ]g /E ^g :E _g ;E `g =E {g |g }g ?E @E ~g ah [E bh ]E ^E _E ch `E {E |E }E ~E dh eh fh aF gh bF cF hh dF eF fF gF hF ih iF jF jh kF lF kh lh mF nF oF pF mh qF rF sF tF uF nh vF wF oh xF yF zF ph AF BF qh CF rh DF EF sh FF GF HF th IF JF uh vh KF LF MF NF OF wh PF QF RF SF xh TF UF VF WF yh XF YF zh ZF 0F Ah 1F 2F 3F 4F 5F 6F Bh 7F 8F 9F !F #F Ch $F %F 'F (F )F Dh *F +F ,F Eh -F .F Fh /F :F ;F =F ?F Gh @F [F ]F ^F _F Hh `F {F |F }F ~F Ih aG bG cG dG eG Jh fG gG hG iG jG Kh kG lG mG nG oG pG qG rG sG tG Lh uG Mh vG wG xG Nh yG Oh zG AG Ph BG Qh Rh CG DG Sh EG FG Th GG Uh HG Vh IG Wh JG Xh KG Yh LG MG NG Zh OG PG QG 0h RG SG TG UG VG WG XG YG 1h ZG 0G 1G 2G 3G 4G 5G 6G 2h 7G 8G 9G !G #G $G %G 3h 'G (G )G *G +G ,G -G .G /G :G ;G =G ?G @G [G 4h ]G ^G _G `G {G |G }G ~G aH 5h bH cH dH eH 6h fH gH hH iH jH 7h kH lH 8h mH nH Xb Yb oH pH qH rH sH 9h tH uH vH wH xH yH !h zH AH BH #h qf CH Zb DH $h EH FH GH %h HH IH ^ JH KH LH MH NH OH PH QH RH SH TH UH VH WH XH YH ZH 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H !H #H $H %H 'H 'h (H )H (h *H +H ,H -H .H /H :H ;H =H ?H @H 0b 1b )h [H ]H ^H _H 2b 3b 4b `H {H |H }H ~H aI bI cI b dI eI fI gI hI iI jI kI lI mI nI oI *h pI qI +h ,h rI Sv -h .h /h :h sI tI uI vI ;h wI xI yI zI xw AI 5b 6b =h BI CI ?h ew 6v kw DI 7b EI @h FI GI HI [h ]h II JI 7v lw 8b 9b !b KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI 0I 1I 2I 3I 4I 5I 6I 7I 8I 9I !I #I $I %I 'I (I )I *I +I ,I -I .I /I :I ;I =I ?I @I [I ]I ^I _I `I {I |I }I ~I aJ bJ cJ dJ eJ fJ ^h gJ hJ iJ jJ kJ lJ mJ nJ oJ pJ qJ rJ sJ tJ uJ vJ wJ xJ yJ zJ AJ BJ CJ DJ EJ FJ GJ HJ IJ JJ KJ yw df LJ _h MJ NJ OJ `h PJ QJ RJ SJ TJ UJ VJ WJ {h XJ YJ ZJ 0J |h 1J 2J }h 3J 4J 5J 6J 7J 8J 9J !J ~h #J t 5 u v w x y 6 $J ai %J bi 'J (J )J *J +J ci ,J -J .J /J :J ;J =J ?J @J [J di #b $b ei ]J ^J _J `J {J fi |J }J ~J aK gi bK _v cK dK hi eK ii fK ji _ ` { z A | gK ki hK iK jK li kK lK mK nK oK mi pK qK rK sK tK uK vK wK xK yK zK AK BK CK DK EK FK GK HK IK JK KK LK MK NK OK PK QK RK SK TK UK VK WK XK YK ZK 0K 1K 2K 3K 4K 5K 6K 7K 8K 9K !K #K $K %K 'K (K )K *K +K ,K -K .K /K :K ;K =K ?K @K [K ]K ^K _K `K {K |K }K ~K aL ni bL cL dL eL fL gL hL iL jL kL lL mL nL oL pL qL rL sL tL uL vL wL xL yL zL AL BL CL DL EL FL %b 'b GL HL oi IL pi JL qi ri KL LL ML NL OL PL QL si RL SL TL UL VL WL XL YL ZL 0L ti 1L ui 2L 3L 4L 5L 6L 7L 8L 9L !L #L $L %L 'L (L vi )L *L +L ,L -L .L /L :L ;L =L ?L @L [L ]L ^L _L `L {L |L }L ~L aM bM cM dM eM fM gM hM iM jM kM lM mM wi nM oM pM qM rM sM (b )b *b - } +b tM ,b -b ~ B xi uM vM yi wM xM zi yM zM Ai AM BM Bi CM DM Ci EM FM Di GM HM Ei IM JM Fi KM LM Gi MM NM Hi OM PM Ii QM RM Ji SM TM UM VM Ki WM XM YM ZM Li 0M 1M 2M 3M Mi 4M 5M 6M Ni 7M 8M 9M Oi !M #M $M Pi %M 'M (M Qi )M *M +M Ri ,M -M .M Si /M :M ;M =M ?M @M [M ]M ^M Ti _M `M {M Ui |M Vi }M ~M aN bN cN dN eN Wi fN gN hN iN jN kN lN mN nN Xi oN pN qN Yi rN Zi sN tN uN 0i vN wN xN 1i yN zN AN BN CN DN EN FN GN HN IN JN KN LN MN NN ON PN QN RN SN TN UN VN WN XN YN ZN 0N 1N 2N 3N 2i 4N 5N 6N 7N 8N 3i 9N 8v !N #N 4i $N %N 'N (N 5i )N *N 6i +N ,N 7i -N .N 8i /N :N ;N =N ?N @N [N ]N ^N _N `N {N 9i |N }N ~N aO .b bO rf zw ef Aw ff Bw Af cO dO eO fO gO hO iO jO kO lO mO !i nO oO pO qO rO sO tO uO vO wO xO yO zO AO BO CO DO EO FO GO HO IO JO KO #i LO MO NO OO PO QO RO SO TO UO VO WO XO YO ZO 0O 1O 2O 3O 4O 5O 6O 7O 8O $i 9O !O #O $O %O 'O (O )O *O +O ,O -O .O /O :O ;O =O %i ?O @O [O ]O ^O _O `O {O |O }O ~O aP bP cP 'i dP eP fP (i gP hP iP )i *i jP kP lP mP +i nP oP pP qP ,i rP sP tP uP -i vP wP xP .i yP zP AP /i BP CP DP :i EP FP ;i GP HP IP =i ?i JP KP @i [i LP g {e /b MP 9v NP !v OP #v PP ]i QP ^i :b _i RP SP TP UP VP WP XP YP ZP 0P 1P 2P 3P 4P 5P 6P `i 7P {i 8P |i 9P }i !P ~i aj #P bj $P %P 'P (P )P *P cj +P ,P -P dj .P ej fj /P :P gj ;P hj =P ij ?P jj @P kj [P lj ]P ^P _P `P mj {P |P }P ~P nj aQ bQ cQ dQ oj eQ fQ gQ hQ iQ jQ kQ lQ mQ nQ oQ pQ qQ rQ sQ tQ uQ vQ wQ xQ yQ zQ AQ BQ CQ DQ EQ FQ GQ HQ IQ JQ KQ LQ MQ NQ OQ PQ QQ RQ SQ pj TQ UQ VQ WQ XQ YQ ZQ 0Q qj 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q rj 9Q sj !Q tj #Q uj $Q ~v %Q vj 'Q wj (Q xj )Q *Q yj +Q zj ,Q Aj -Q Bj .Q Cj /Q Dj :Q Ej ;Q =Q ?Q @Q Fj [Q ]Q Gj ^Q _Q Hj `Q {Q |Q Ij Jj }Q ~Q aR bR cR Kj dR Lj eR Mj fR Nj gR Oj hR Pj iR Qj jR Rj kR Sj lR Tj mR Uj Vj nR oR Wj pR Xj qR Yj rR Zj sR 0j 1j 2j tR uR 3j 4j vR 5j wR xR yR 6j zR AR BR CR DR 7j 8j 9j ER !j #j FR $j GR HR %j IR JR KR LR MR 'j NR OR (j PR QR )j *j RR SR TR UR +j VR WR XR YR ,j ZR 0R 1R 2R 3R -j 4R 5R .j 6R 7R /j 8R 9R :j !R #R $R ;j %R 'R =j (R )R ?j *R +R @j ,R [j -R .R ]j /R :R ^j ;R =R ?R _j @R [R `j {j ]R ^R _R `R {R |j |R }R ~R aS }j bS cS dS eS ~j fS gS hS iS ak jS kS bk lS mS ck nS oS dk pS qS rS sS tS ek uS vS wS xS yS zS fk AS BS CS DS ES gk FS GS HS IS JS hk KS LS MS NS OS ik PS QS RS SS TS jk US VS WS kk XS YS ZS lk 0S 1S 2S mk 3S 4S nk 5S 6S 7S 8S 9S ok !S #S $S %S 'S pk (S )S *S +S ,S qk -S .S /S :S ;S rk =S ?S @S [S ]S sk ^S _S `S {S |S tk }S ~S aT bT cT uk dT eT fT gT hT vk iT jT kT lT mT nT oT pT qT rT wk sT xk tT uT vT yk wT zk xT yT Ak zT Bk AT Ck Dk BT CT Ek DT ET Fk FT Gk GT Hk HT Ik IT Jk JT Kk KT Lk LT Mk MT NT OT Nk PT QT RT Ok ST TT UT Pk VT WT XT YT ZT 0T 1T 2T Qk 3T 4T 5T 6T 7T 8T 9T !T Rk #T $T %T 'T (T )T *T +T Sk ,T -T .T /T :T ;T =T Tk ?T @T [T ]T ^T _T `T {T |T }T ~T aU bU cU dU Uk eU fU gU hU iU jU kU lU mU nU oU pU qU rU sU Vk tU uU vU wU xU yU zU AU BU CU DU EU FU GU HU Wk IU JU KU LU MU NU OU PU QU Xk RU SU TU UU Yk VU WU XU YU Tv ZU 0U 1U 2U 3U Zk 4U 5U 0k 6U 7U 1k 8U 9U 2k !U #U ;b =b $U %U 'U (U )U 3k *U +U ,U -U .U /U 4k :U ;U =U ?U @U [U 5k ]U ^U _U `U {U |U 6k }U ~U aV bV 7k sf cV ?b dV 8k eV fV ab gV 9k hV iV bb jV kV lV mV nV oV pV qV rV sV tV uV vV wV xV @b yV zV AV BV CV DV EV FV GV HV IV JV KV LV MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V !k 3V 4V #k 5V 6V 7V 8V 9V !V #V $V %V 'V (V [b ]b $k )V *V +V ,V ^b _b `b -V .V /V :V ;V =V ?V @V c [V ]V ^V _V `V {V |V }V ~V aW bW cW %k dW eW 'k (k fW Uv )k *k +k ,k gW hW iW jW -k kW lW mW nW Cw oW {b |b .k pW qW /k fw $v mw rW }b sW :k tW uW vW ;k =k wW xW %v nw ~b ac bc yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W )W *W +W ,W -W .W /W :W ;W =W ?W @W [W ]W ^W ?k _W `W {W |W }W ~W aX bX cX dX eX fX gX hX iX jX kX lX mX nX oX pX qX rX sX tX uX vX wX xX yX Dw gf zX @k AX BX CX [k DX EX FX GX HX IX JX KX ]k LX MX NX OX ^k PX QX _k RX SX TX UX VX WX XX YX `k ZX C 7 D E F G H 8 0X {k 1X |k 2X 3X 4X 5X 6X }k 7X 8X 9X !X #X $X %X 'X (X )X ~k cc dc al *X +X ,X -X .X bl /X :X ;X =X cl ?X `v @X [X dl ]X el ^X fl cb db eb I J fb _X gl `X {X |X hl }X ~X aY bY cY il dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY BY CY DY EY FY GY HY IY JY KY LY MY NY OY PY QY RY SY TY UY VY WY XY YY ZY 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y -Y .Y /Y :Y ;Y =Y jl ?Y @Y [Y ]Y ^Y _Y `Y {Y |Y }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ ec fc gc 9 hc ic ! jc kc lc uZ vZ kl wZ ll xZ ml nl yZ zZ AZ BZ CZ DZ EZ ol FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ pl PZ ql QZ RZ SZ TZ UZ VZ WZ XZ YZ ZZ 0Z 1Z 2Z 3Z rl 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 sl b0 c0 d0 e0 f0 g0 mc nc oc . gb pc h0 qc rc hb K tl i0 j0 ul k0 l0 vl m0 n0 wl o0 p0 xl q0 r0 yl s0 t0 zl u0 v0 Al w0 x0 Bl y0 z0 Cl A0 B0 Dl C0 D0 El E0 F0 Fl G0 H0 I0 J0 Gl K0 L0 M0 N0 Hl O0 P0 Q0 R0 Il S0 T0 U0 Jl V0 W0 X0 Kl Y0 Z0 00 Ll 10 20 30 Ml 40 50 60 Nl 70 80 90 Ol !0 #0 $0 %0 '0 (0 )0 *0 +0 Pl ,0 -0 .0 Ql /0 Rl :0 ;0 =0 ?0 @0 [0 ]0 Sl ^0 _0 `0 {0 |0 }0 ~0 a1 b1 Tl c1 d1 e1 Ul f1 Vl g1 h1 i1 Wl j1 k1 l1 Xl m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 Yl S1 T1 U1 V1 W1 Zl X1 'v Y1 Z1 0l 01 11 21 31 1l 41 51 2l 61 71 3l 81 91 4l !1 #1 $1 %1 '1 (1 )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 5l ?1 @1 [1 ]1 sc tc uc ^1 tf Ew hf Fw if Gw Bf _1 `1 {1 |1 }1 ~1 a2 b2 c2 d2 e2 6l f2 g2 h2 i2 j2 k2 l2 m2 n2 o2 p2 q2 r2 s2 t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 7l D2 E2 F2 G2 H2 I2 J2 K2 L2 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 Z2 02 8l 12 22 32 42 52 62 72 82 92 !2 #2 $2 %2 '2 (2 )2 *2 9l +2 ,2 -2 .2 /2 :2 ;2 =2 ?2 @2 [2 ]2 ^2 _2 `2 !l {2 |2 }2 ~2 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 #l k3 l3 m3 $l n3 o3 p3 %l q3 r3 s3 'l t3 u3 v3 (l )l w3 x3 y3 z3 *l A3 B3 C3 D3 +l E3 F3 G3 H3 ,l I3 J3 K3 L3 -l M3 N3 O3 P3 .l Q3 R3 S3 /l T3 U3 V3 :l W3 X3 Y3 ;l Z3 03 13 =l 23 33 43 ?l 53 63 @l 73 83 93 [l ]l !3 #3 ^l _l $3 %3 `l {l '3 h |e vc (3 (v )3 )v *3 *v +3 |l ,3 }l wc ~l xc am yc bm -3 .3 /3 :3 ;3 =3 ?3 @3 [3 ]3 ^3 _3 `3 {3 |3 }3 cm ~3 dm a4 em b4 fm c4 gm hm d4 im e4 f4 g4 h4 i4 j4 jm k4 l4 m4 km n4 lm mm o4 p4 nm q4 om r4 pm s4 qm t4 rm u4 sm v4 tm w4 um x4 vm y4 wm z4 A4 B4 C4 xm D4 E4 F4 G4 ym H4 I4 J4 K4 zm L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 04 14 24 34 44 54 64 74 84 94 !4 #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 ;4 =4 Am ?4 @4 [4 ]4 ^4 _4 `4 {4 Bm |4 }4 ~4 a5 b5 c5 d5 e5 Cm f5 Dm g5 Em h5 Fm i5 aw j5 Gm k5 Hm l5 Im m5 Jm n5 Km o5 p5 Lm q5 r5 Mm s5 Nm t5 Om u5 Pm v5 Qm w5 Rm x5 Sm y5 z5 A5 B5 Tm C5 D5 Um E5 F5 Vm G5 H5 I5 Wm Xm J5 K5 L5 M5 N5 Ym O5 Zm P5 0m Q5 1m R5 2m S5 3m T5 4m U5 5m V5 6m W5 7m X5 8m Y5 9m Z5 !m 05 #m 15 $m 25 %m 35 'm (m 45 55 )m 65 *m 75 +m 85 ,m 95 -m .m /m !5 #5 :m ;m $5 =m %5 '5 (5 ?m )5 *5 +5 ,5 -5 @m [m ]m .5 ^m _m /5 `m {m :5 |m ;5 =5 }m ?5 @5 [5 ]5 ^5 ~m _5 `5 an {5 |5 bn }5 ~5 cn dn a6 b6 c6 d6 en e6 f6 g6 h6 fn i6 j6 k6 l6 gn m6 n6 o6 p6 hn q6 r6 s6 t6 u6 in v6 w6 jn x6 y6 kn z6 A6 ln B6 C6 mn D6 E6 nn F6 G6 H6 on I6 J6 pn K6 L6 qn M6 N6 rn O6 sn P6 Q6 tn R6 S6 un T6 U6 V6 vn W6 X6 wn Y6 Z6 xn 06 16 yn 26 36 zn An 46 56 66 76 86 Bn 96 !6 #6 $6 Cn %6 '6 (6 )6 Dn *6 +6 ,6 -6 En .6 /6 :6 ;6 Fn =6 ?6 @6 [6 Gn ]6 ^6 Hn _6 `6 In {6 |6 Jn }6 ~6 a7 b7 c7 Kn d7 e7 f7 g7 h7 i7 Ln j7 k7 l7 m7 n7 Mn o7 p7 q7 r7 s7 Nn t7 u7 v7 w7 x7 On y7 z7 A7 B7 C7 Pn D7 E7 F7 Qn G7 H7 I7 Rn J7 K7 L7 Sn M7 N7 Tn O7 P7 Q7 R7 S7 Un T7 U7 V7 W7 X7 Vn Y7 Z7 07 17 27 Wn 37 47 57 67 77 Xn 87 97 !7 #7 $7 Yn %7 '7 (7 )7 *7 Zn +7 ,7 -7 .7 /7 0n :7 ;7 =7 ?7 @7 1n [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 2n b8 3n c8 4n d8 e8 f8 5n g8 6n h8 i8 7n j8 k8 8n 9n l8 m8 !n n8 #n o8 $n %n p8 q8 'n r8 s8 (n t8 u8 )n v8 w8 *n x8 +n y8 ,n z8 -n A8 .n B8 /n C8 :n D8 ;n E8 =n F8 ?n G8 @n H8 [n I8 ]n J8 ^n K8 L8 M8 _n N8 O8 P8 `n Q8 R8 S8 {n T8 U8 V8 W8 X8 Y8 Z8 08 |n 18 28 38 48 58 68 78 88 }n 98 !8 #8 $8 %8 '8 (8 )8 ~n *8 +8 ,8 -8 .8 /8 :8 ;8 ao =8 ?8 @8 [8 ]8 ^8 _8 `8 bo {8 |8 }8 ~8 a9 b9 c9 co d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 do s9 t9 u9 v9 w9 x9 y9 z9 A9 B9 C9 D9 E9 F9 G9 eo H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 fo W9 X9 Y9 Z9 09 19 29 39 49 59 69 79 89 99 !9 go #9 $9 %9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 :9 ;9 =9 ho ?9 @9 [9 ]9 ^9 _9 `9 {9 |9 io }9 ~9 a! b! jo c! d! e! f! Vv g! h! i! j! k! ko l! m! lo n! o! mo p! q! no r! s! oo t! u! po v! w! zc Ac x! y! z! A! B! qo C! D! E! F! G! H! ro I! J! K! L! M! N! so O! P! Q! R! S! T! to U! V! W! X! Y! Z! uo 0! 1! 2! 3! 4! 5! vo 6! 7! 8! 9! !! wo uf #! Bc $! xo %! '! ib jb kb (! yo )! *! lb +! ,! -! .! /! :! ;! =! ?! @! [! ]! ^! _! `! Cc {! |! }! ~! a# b# Dc c# d# e# f# g# h# Ec i# j# k# l# m# n# o# p# q# r# s# t# u# v# w# x# y# z# A# B# C# D# E# F# G# H# I# J# K# L# M# N# O# P# Q# R# S# T# U# V# W# X# Y# Fc zo Z# 0# Ao 1# 2# 3# 4# 5# 6# 7# 8# 9# !# ## Gc Hc Bo $# %# '# (# Ic Jc Kc )# *# +# ,# -# .# /# :# d ;# =# ?# @# [# ]# ^# _# `# {# |# }# Co ~# a$ Do Eo b$ Wv Fo Go Ho Io c$ d$ e$ f$ Jo g$ h$ i$ j$ Hw k$ Lc Mc Ko l$ m$ Lo gw +v ow n$ Nc o$ Mo p$ q$ r$ No Oo s$ t$ ,v pw Oc Pc Qc u$ v$ w$ x$ y$ z$ A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ 2$ 3$ 4$ 5$ 6$ 7$ 8$ 9$ !$ #$ $$ %$ '$ ($ )$ *$ +$ ,$ -$ .$ /$ :$ ;$ =$ ?$ Po @$ [$ ]$ ^$ _$ `$ {$ |$ }$ ~$ a% b% c% d% e% f% g% h% i% j% k% l% m% n% o% p% q% r% s% t% u% Iw jf v% Qo w% x% y% Ro z% A% B% C% D% E% F% G% So H% I% J% K% To L% M% Uo N% O% P% Q% R% S% T% U% Vo V% L # M N O P Q $ W% Wo X% Xo Y% Z% 0% 1% 2% Yo 3% 4% 5% 6% 7% 8% 9% !% #% $% Zo Rc Sc 0o %% '% (% )% *% 1o +% ,% -% .% 2o /% {v :% ;% 3o =% 4o ?% 5o mb nb ob R S pb @% 6o [% ]% ^% 7o _% `% {% |% }% 8o ~% a' b' c' d' e' f' g' h' i' j' k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' C' D' E' F' G' H' I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' 3' 4' 5' 6' 7' 8' 9' !' #' $' %' '' (' )' *' +' ,' -' .' 9o /' :' ;' =' ?' @' [' ]' ^' _' `' {' |' }' ~' a( b( c( d( e( f( g( h( i( j( k( l( m( n( o( p( Tc Uc Vc % Wc Xc ' Yc Zc 0c q( r( !o s( #o t( $o %o u( v( w( x( y( z( A( 'o B( C( D( E( F( G( H( I( J( K( (o L( )o M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( *o 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( +o |( }( ~( a) b) c) 1c 2c 3c / qb 4c d) 5c 6c rb T ,o e) f) -o g) h) .o i) j) /o k) l) :o m) n) ;o o) p) =o q) r) ?o s) t) @o u) v) [o w) x) ]o y) z) ^o A) B) _o C) D) E) F) `o G) H) I) J) {o K) L) M) N) |o O) P) Q) }o R) S) T) ~o U) V) W) ap X) Y) Z) bp 0) 1) 2) cp 3) 4) 5) dp 6) 7) 8) 9) !) #) $) %) ') ep () )) *) fp +) gp ,) -) .) /) :) ;) =) hp ?) @) [) ]) ^) _) `) {) |) ip }) ~) a* jp b* kp c* d* e* lp f* g* h* mp i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* E* F* G* H* I* J* K* L* M* N* np O* P* Q* R* S* op T* -v U* V* pp W* X* Y* Z* qp 0* 1* rp 2* 3* sp 4* 5* tp 6* 7* 8* 9* !* #* $* %* '* (* )* ** +* ,* -* .* up /* :* ;* =* 7c 8c 9c ?* vf Jw kf Kw lf Lw Cf @* [* ]* ^* _* `* {* |* }* ~* a+ vp b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ m+ n+ o+ p+ q+ r+ s+ t+ u+ v+ w+ x+ y+ wp z+ A+ B+ C+ D+ E+ F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ Q+ R+ S+ T+ U+ V+ W+ xp X+ Y+ Z+ 0+ 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ !+ #+ $+ %+ yp '+ (+ )+ *+ ++ ,+ -+ .+ /+ :+ ;+ =+ ?+ @+ [+ zp ]+ ^+ _+ `+ {+ |+ }+ ~+ a, b, c, d, e, f, Ap g, h, i, Bp j, k, l, Cp m, n, o, Dp p, q, r, Ep Fp s, t, u, v, Gp w, x, y, z, Hp A, B, C, D, Ip E, F, G, H, Jp I, J, K, L, Kp M, N, O, Lp P, Q, R, Mp S, T, U, Np V, W, X, Op Y, Z, 0, Pp 1, 2, Qp 3, 4, 5, Rp Sp 6, 7, Tp Up 8, 9, Vp Wp !, i }e !c #, .v $, /v %, :v ', Xp (, Yp #c Zp $c 0p %c 1p ), *, +, ,, -, ., /, :, ;, =, ?, @, [, ], ^, _, 2p `, 3p {, 4p |, 5p }, 6p 7p ~, 8p a- b- c- d- e- f- 9p g- h- i- !p j- #p $p k- l- %p m- 'p n- (p o- )p p- *p q- +p r- ,p s- -p t- .p u- /p v- w- x- y- :p z- A- B- C- ;p D- E- F- G- =p H- I- J- K- L- M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- 0- 1- 2- 3- 4- 5- 6- 7- 8- 9- !- #- $- %- '- (- )- *- +- ,- -- .- ?p /- :- ;- =- ?- @- [- ]- @p ^- _- `- {- |- }- ~- a. [p b. ]p c. ^p d. _p e. bw f. `p g. {p h. |p i. }p j. ~p k. l. aq m. n. bq o. cq p. dq q. eq r. fq s. gq t. hq u. v. w. x. iq y. z. jq A. B. kq C. D. E. lq mq F. G. H. I. J. nq K. oq L. pq M. qq N. rq O. sq P. tq Q. uq R. vq S. wq T. xq U. yq V. zq W. Aq X. Bq Y. Cq Z. Dq Eq 0. 1. Fq 2. Gq 3. Hq 4. Iq 5. Jq Kq Lq 6. 7. Mq Nq 8. Oq 9. !. #. Pq $. %. '. (. ). Qq Rq Sq *. Tq Uq +. Vq Wq ,. Xq -. .. Yq /. :. ;. =. ?. Zq @. [. 0q ]. ^. 1q _. `. 2q 3q {. |. }. ~. 4q a/ b/ c/ d/ 5q e/ f/ g/ h/ 6q i/ j/ k/ l/ 7q m/ n/ o/ p/ q/ 8q r/ s/ 9q t/ u/ !q v/ w/ #q x/ y/ $q z/ A/ %q B/ C/ D/ 'q E/ F/ (q G/ H/ )q I/ J/ *q K/ +q L/ M/ ,q N/ O/ -q P/ Q/ R/ .q S/ T/ /q U/ V/ :q W/ X/ ;q Y/ Z/ =q ?q 0/ 1/ 2/ 3/ 4/ @q 5/ 6/ 7/ 8/ [q 9/ !/ #/ $/ ]q %/ '/ (/ )/ ^q */ +/ ,/ -/ _q ./ // :/ ;/ `q =/ ?/ {q @/ [/ |q ]/ ^/ }q _/ `/ {/ |/ }/ ~q ~/ a: b: c: d: e: ar f: g: h: i: j: br k: l: m: n: o: cr p: q: r: s: t: dr u: v: w: x: y: er z: A: B: fr C: D: E: gr F: G: H: hr I: J: ir K: L: M: N: O: jr P: Q: R: S: T: kr U: V: W: X: Y: lr Z: 0: 1: 2: 3: mr 4: 5: 6: 7: 8: nr 9: !: #: $: %: or ': (: ): *: +: pr ,: -: .: /: :: qr ;: =: ?: @: [: ]: ^: _: `: {: rr |: sr }: tr ~: a; b; ur c; vr d; e; wr f; g; xr yr h; i; zr j; Ar k; Br Cr l; m; Dr n; o; Er p; q; Fr r; s; Gr t; Hr u; Ir v; Jr w; Kr x; Lr y; Mr z; Nr A; Or B; Pr C; Qr D; Rr E; Sr F; Tr G; H; I; Ur J; K; L; Vr M; N; O; Wr P; Q; R; S; T; U; V; W; Xr X; Y; Z; 0; 1; 2; 3; 4; Yr 5; 6; 7; 8; 9; !; #; $; Zr %; '; (; ); *; +; ,; -; 0r .; /; :; ;; =; ?; @; [; 1r ]; ^; _; `; {; |; }; 2r ~; a= b= c= d= e= f= g= h= i= j= k= l= m= n= 3r o= p= q= r= s= t= u= v= w= x= y= z= A= B= C= 4r D= E= F= G= H= I= J= K= L= M= N= O= P= Q= R= 5r S= T= U= V= W= X= Y= Z= 0= 1= 2= 3= 4= 5= 6= 6r 7= 8= 9= != #= $= %= '= (= )= *= += ,= -= .= 7r /= := ;= == ?= @= [= ]= ^= 8r _= `= {= |= 9r }= ~= a? b? Xv c? d? e? f? g? !r h? i? #r j? k? $r l? m? %r n? o? 'r p? q? (r r? s? 'c (c t? u? v? w? x? )r y? z? A? B? C? D? *r E? F? G? H? I? J? +r K? L? M? N? O? P? ,r Q? R? S? T? U? V? -r W? X? Y? Z? 0? 1? .r 2? 3? 4? 5? 6? /r wf 7? )c 8? :r 9? !? sb tb ub #? ;r $? %? vb '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? *c ]? ^? _? `? {? |? +c }? ~? a@ b@ c@ d@ ,c e@ f@ g@ h@ i@ j@ k@ l@ m@ n@ o@ p@ q@ r@ s@ t@ u@ v@ w@ x@ y@ z@ A@ B@ C@ D@ E@ F@ G@ H@ I@ J@ K@ L@ M@ N@ O@ P@ Q@ R@ S@ T@ U@ -c =r V@ W@ ?r X@ Y@ Z@ 0@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ .c /c @r 8@ 9@ !@ #@ :c ;c =c $@ %@ '@ (@ )@ *@ +@ ,@ e -@ .@ /@ :@ ;@ =@ ?@ @@ [@ ]@ ^@ _@ [r `@ {@ ]r ^r |@ Yv _r `r {r |r }@ ~@ a[ b[ }r c[ d[ e[ f[ Mw g[ ?c @c ~r h[ i[ as hw ;v qw j[ [c k[ bs l[ m[ n[ cs ds o[ p[ =v rw ]c ^c _c q[ r[ s[ t[ u[ v[ w[ x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ S[ T[ U[ V[ W[ X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ 9[ ![ #[ $[ %[ '[ ([ )[ *[ +[ ,[ -[ .[ /[ es :[ ;[ =[ ?[ @[ [[ ][ ^[ _[ `[ {[ |[ }[ ~[ a] b] c] d] e] f] g] h] i] j] k] l] m] n] o] p] q] Nw mf r] fs s] t] u] gs v] w] x] y] z] A] B] C] hs D] E] F] G] is H] I] js J] K] L] M] N] O] P] Q] ks R] U ( V W X Y Z ) S] ls T] ms U] V] W] X] Y] ns Z] 0] 1] 2] 3] 4] 5] 6] 7] 8] os `c {c ps 9] !] #] $] %] qs '] (] )] *] rs +] |v ,] -] ss .] ts /] us wb xb yb 0 1 zb :] vs ;] =] ?] ws @] [] ]] ^] _] xs `] {] |] }] ~] a^ b^ c^ d^ e^ f^ g^ h^ i^ j^ k^ l^ m^ n^ o^ p^ q^ r^ s^ t^ u^ v^ w^ x^ y^ z^ A^ B^ C^ D^ E^ F^ G^ H^ I^ J^ K^ L^ M^ N^ O^ P^ Q^ R^ S^ T^ U^ V^ W^ X^ Y^ Z^ 0^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ !^ #^ $^ %^ '^ (^ )^ *^ ys +^ ,^ -^ .^ /^ :^ ;^ =^ ?^ @^ [^ ]^ ^^ _^ `^ {^ |^ }^ ~^ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ |c }c ~c * ad bd + cd dd ed m_ n_ zs o_ As p_ Bs Cs q_ r_ s_ t_ u_ v_ w_ Ds x_ y_ z_ A_ B_ C_ D_ E_ F_ G_ Es H_ Fs I_ J_ K_ L_ M_ N_ O_ P_ Q_ R_ S_ T_ U_ V_ Gs W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ /_ :_ ;_ =_ ?_ @_ [_ ]_ Hs ^_ __ `_ {_ |_ }_ fd gd hd : Ab id ~_ jd kd Bb 2 Is a` b` Js c` d` Ks e` f` Ls g` h` Ms i` j` Ns k` l` Os m` n` Ps o` p` Qs q` r` Rs s` t` Ss u` v` Ts w` x` Us y` z` A` B` Vs C` D` E` F` Ws G` H` I` J` Xs K` L` M` Ys N` O` P` Zs Q` R` S` 0s T` U` V` 1s W` X` Y` 2s Z` 0` 1` 3s 2` 3` 4` 5` 6` 7` 8` 9` !` 4s #` $` %` 5s '` 6s (` )` *` +` ,` -` .` 7s /` :` ;` =` ?` @` [` ]` ^` 8s _` `` {` 9s |` !s }` ~` a{ #s b{ c{ d{ $s e{ f{ g{ h{ i{ j{ k{ l{ m{ n{ o{ p{ q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ %s K{ L{ M{ N{ O{ 's P{ ?v Q{ R{ (s S{ T{ U{ V{ )s W{ X{ *s Y{ Z{ +s 0{ 1{ ,s 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ -s +{ ,{ -{ .{ ld md nd /{ xf Ow nf Pw of Qw Df :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ .s |{ }{ ~{ a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| s| t| u| /s v| w| x| y| z| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| :s T| U| V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ;s !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =s =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} ?s c} d} e} @s f} g} h} [s i} j} k} ]s l} m} n} ^s _s o} p} q} r} `s s} t} u} v} {s w} x} y} z} |s A} B} C} D} }s E} F} G} H} ~s I} J} K} at L} M} N} bt O} P} Q} ct R} S} T} dt U} V} W} et X} Y} ft Z} 0} 1} gt ht 2} 3} it jt 4} 5} kt lt 6} j ~e od 7} @v 8} [v 9} ]v !} mt #} nt pd ot qd pt rd qt $} %} '} (} )} *} +} ,} -} .} /} :} ;} =} ?} @} rt [} st ]} tt ^} ut _} vt wt `} xt {} |} }} ~} a~ b~ yt c~ d~ e~ zt f~ At Bt g~ h~ Ct i~ Dt j~ Et k~ Ft l~ Gt m~ Ht n~ It o~ Jt p~ Kt q~ Lt r~ s~ t~ u~ Mt v~ w~ x~ y~ Nt z~ A~ B~ C~ Ot D~ E~ F~ G~ H~ I~ J~ K~ L~ M~ N~ O~ P~ Q~ R~ S~ T~ U~ V~ W~ X~ Y~ Z~ 0~ 1~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 9~ !~ #~ $~ %~ '~ (~ )~ *~ Pt +~ ,~ -~ .~ /~ :~ ;~ =~ Qt ?~ @~ [~ ]~ ^~ _~ `~ {~ Rt |~ St }~ Tt ~~ Ut aabcw babVt cabWt dabXt eabYt fabZt gabhab0t iabjab1t kab2t lab3t mab4t nab5t oab6t pab7t qabrabsabtab8t uabvab9t wabxab!t yabzabAab#t $t BabCabDabEabFab%t Gab't Hab(t Iab)t Jab*t Kab+t Lab,t Mab-t Nab.t Oab/t Pab:t Qab;t Rab=t Sab?t Tab@t Uab[t Vab]t ^t WabXab_t Yab`t Zab{t 0ab|t 1ab}t ~t au 2ab3abbu cu 4abdu 5ab6ab7abeu 8ab9ab!ab#ab$abfu gu hu %abiu ju 'abku lu (abmu )ab*abnu +ab,ab-ab.ab/abou :ab;abpu =ab?abqu @ab[abru su ]ab^ab_ab`abtu {ab|ab}ab~abuu abbbbbcbbdbbvu ebbfbbgbbhbbwu ibbjbbkbblbbmbbxu nbbobbyu pbbqbbzu rbbsbbAu tbbubbBu vbbwbbCu xbbybbzbbDu AbbBbbEu CbbDbbFu EbbFbbGu GbbHu HbbIbbIu JbbKbbJu LbbMbbNbbKu ObbPbbLu QbbRbbMu SbbTbbNu UbbVbbOu Pu WbbXbbYbbZbb0bbQu 1bb2bb3bb4bbRu 5bb6bb7bb8bbSu 9bb!bb#bb$bbTu %bb'bb(bb)bbUu *bb+bb,bb-bbVu .bb/bbWu :bb;bbXu =bb?bbYu @bb[bb]bb^bb_bbZu `bb{bb|bb}bb~bbacb0u bcbccbdcbecbfcb1u gcbhcbicbjcbkcb2u lcbmcbncbocbpcb3u qcbrcbscbtcbucb4u vcbwcbxcb5u ycbzcbAcb6u BcbCcbDcb7u EcbFcb8u GcbHcbIcbJcbKcb9u LcbMcbNcbOcbPcb!u QcbRcbScbTcbUcb#u VcbWcbXcbYcbZcb$u 0cb1cb2cb3cb4cb%u 5cb6cb7cb8cb9cb'u !cb#cb$cb%cb'cb(u (cb)cb*cb+cb,cb)u -cb.cb/cb:cb;cb=cb?cb@cb[cb]cb*u ^cb+u _cb,u `cb{cb|cb-u }cb.u ~cbadb/u bdbcdb:u ;u ddbedb=u fdb?u gdb@u [u hdbidb]u jdbkdb^u ldbmdb_u ndbodb`u pdb{u qdb|u rdb}u sdb~u tdbav udbbv vdbcv wdbdv xdbev ydbfv zdbgv Adbhv Bdbiv CdbDdbEdbjv FdbGdbHdbkv IdbJdbKdblv LdbMdbNdbOdbPdbQdbRdbSdbmv TdbUdbVdbWdbXdbYdbZdb0dbnv 1db2db3db4db5db6db7db8dbov 9db!db#db$db%db'db(db)dbpv *db+db,db-db.db/db:db;dbqv =db?db@db[db]db^db_dbrv `db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebsv keblebmebneboebpebqebrebsebtebuebvebwebxebyebtv zebAebBebCebDebEebFebGebHebIebJebKebLebMebNebuv OebPebQebRebSebTebUebVebWebXebYebZeb0eb1eb2ebvv 3eb4eb5eb6eb7eb8eb9eb!eb#eb$eb%eb'eb(eb)eb*ebwv +eb,eb-eb.eb/eb:eb;eb=eb?ebxv @eb[eb]eb^ebyv _eb`eb{eb|ebZv }eb~ebafbbfbcfbzv dfbefbAv ffbgfbBv hfbifbCv jfbkfbDv lfbmfbEv nfbofbsd td pfbqfbrfbsfbtfbFv ufbvfbwfbxfbyfbzfbGv AfbBfbCfbDfbEfbFfbHv GfbHfbIfbJfbKfbLfbIv MfbNfbOfbPfbQfbRfbJv SfbTfbUfbVfbWfbXfbKv YfbZfb0fb1fb2fbLv yf 3fbud 4fbMv 5fb6fbCb Db Eb 7fbNv 8fb9fbFb !fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fbvd =fb?fb@fb[fb]fb^fbwd _fb`fb{fb|fb}fb~fbxd agbbgbcgbdgbegbfgbggbhgbigbjgbkgblgbmgbngbogbpgbqgbrgbsgbtgbugbvgbwgbxgbygbzgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbPgbQgbyd Ov RgbSgbPv TgbUgbVgbWgbXgbYgbZgb0gb1gb2gb3gbzd Ad Qv 4gb5gb6gb7gbBd Cd Dd 8gb9gb!gb#gb$gb%gb'gb(gb

1054 scope["root_path"] = self.root_path 2twafuwbfvwcfwwzfywdfzwefAwffBwAfDwgfEwhfFwifGwBfIwjfJwkfKwlfLwCfNwmfOwnfPwofQwDf

1055 await super().__call__(scope, receive, send) 3a Rw Sw Tw Uw Vw Ww Xw Yw Zw 0w 1w 2w Ef 3w 4w Ff Gf 5w Rv Hf If Jf Kf 6w 7w 8w 9w Lf !w #w $w %w sw 'w Gb Hb Mf (w )w Nf dw 0v iw *w Ib +w Of ,w -w .w Pf Qf /w :w 1v jw Jb Kb Lb ;w =w ?w @w [w ]w ^w _w `w {w |w }w ~w ax bx cx dx ex fx gx hx ix jx kx lx mx nx ox px qx rx sx tx ux vx wx xx yx zx Ax Bx Cx Dx Ex Fx Gx Hx Ix Jx Kx Lx Mx Nx Ox Px Qx Rx Sx Tx Rf Ux Vx Wx Xx Yx Zx 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x !x #x $x %x 'x (x )x *x +x ,x -x .x /x :x ;x tw af =x Sf ?x @x [x Tf ]x ^x _x `x {x |x }x ~x Uf ay by cy dy Vf ey fy Wf gy hy iy jy ky ly my ny Xf oy k 3 l m n o p 4 py Yf qy Zf ry sy ty uy vy 0f wy xy yy zy Ay By Cy Dy Ey Fy 1f Mb Nb 2f Gy Hy Iy Jy Ky 3f Ly My Ny Oy 4f Py ^v Qy Ry 5f Sy 6f Ty 7f ; = ? q r @ Uy 8f Vy Wy Xy 9f Yy Zy 0y 1y 2y !f 3y 4y 5y 6y 7y 8y 9y !y #y $y %y 'y (y )y *y +y ,y -y .y /y :y ;y =y ?y @y [y ]y ^y _y `y {y |y }y ~y az bz cz dz ez fz gz hz iz jz kz lz mz nz oz pz qz rz sz tz uz vz wz xz yz zz Az Bz Cz Dz Ez Fz Gz Hz Iz Jz Kz Lz Mz Nz Oz #f Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz 0z 1z 2z 3z 4z 5z 6z 7z 8z 9z !z #z $z %z 'z (z )z *z +z ,z Ob Pb -z .z $f /z %f :z 'f (f ;z =z ?z @z [z ]z ^z )f _z `z {z |z }z ~z aA bA cA dA *f eA +f fA gA hA iA jA kA lA mA nA oA pA qA rA sA ,f tA uA vA wA xA yA zA AA BA CA DA EA FA GA HA IA JA KA LA MA NA OA PA QA RA SA TA UA VA WA XA YA ZA 0A -f 1A 2A 3A 4A 5A 6A Qb Rb Sb , [ Tb 7A Ub Vb ] s .f 8A 9A /f !A #A :f $A %A ;f 'A (A =f )A *A ?f +A ,A @f -A .A [f /A :A ]f ;A =A ^f ?A @A _f [A ]A `f ^A _A {f `A {A |A }A |f ~A aB bB cB }f dB eB fB gB ~f hB iB jB ag kB lB mB bg nB oB pB cg qB rB sB dg tB uB vB eg wB xB yB fg zB AB BB CB DB EB FB GB HB gg IB JB KB hg LB ig MB NB OB PB QB RB SB jg TB UB VB WB XB YB ZB 0B 1B kg 2B 3B 4B lg 5B mg 6B 7B 8B ng 9B !B #B og $B %B 'B (B )B *B +B ,B -B .B /B :B ;B =B ?B @B [B ]B ^B _B `B {B |B }B ~B aC bC cC dC eC fC gC pg hC iC jC kC lC qg mC 2v nC oC rg pC qC rC sC sg tC uC tg vC wC ug xC yC vg zC AC BC CC DC EC FC GC HC IC wg JC KC LC MC NC pf uw bf vw cf ww zf OC PC QC RC SC TC UC VC WC XC YC xg ZC 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C !C #C $C %C 'C (C )C *C +C ,C -C .C /C yg :C ;C =C ?C @C [C ]C ^C _C `C {C |C }C ~C aD bD cD zg dD eD fD gD hD iD jD kD lD mD nD oD pD qD Ag rD sD tD Bg Cg uD vD wD xD Dg yD zD AD BD Eg CD DD ED Fg FD GD HD Gg ID JD KD Hg Ig LD f `e Wb MD 3v ND 4v OD 5v PD Jg QD Kg RD SD TD UD VD WD XD YD ZD 0D 1D 2D 3D 4D 5D 6D Lg 7D Mg 8D Ng 9D Og !D Pg Qg #D Rg $D %D 'D (D )D *D Sg +D ,D -D Tg .D Ug Vg /D :D Wg ;D Xg =D Yg ?D Zg @D [D ]D ^D 0g _D `D {D |D 1g }D ~D aE bE cE dE eE fE gE hE iE jE kE lE mE nE oE pE qE rE sE tE uE vE wE xE yE zE AE BE 2g CE DE EE FE GE HE IE JE 3g KE 4g LE 5g ME 6g NE }v OE 7g PE 8g QE RE 9g SE !g TE #g UE $g VE %g WE XE YE ZE 'g 0E 1E (g 2E 3E )g 4E 5E 6E *g +g 7E 8E 9E !E #E ,g $E -g %E .g 'E /g (E :g )E ;g *E =g +E ?g ,E @g [g -E .E ]g /E ^g :E _g ;E `g =E {g |g }g ?E @E ~g ah [E bh ]E ^E _E ch `E {E |E }E ~E dh eh fh aF gh bF cF hh dF eF fF gF hF ih iF jF jh kF lF kh lh mF nF oF pF mh qF rF sF tF uF nh vF wF oh xF yF zF ph AF BF qh CF rh DF EF sh FF GF HF th IF JF uh vh KF LF MF NF OF wh PF QF RF SF xh TF UF VF WF yh XF YF zh ZF 0F Ah 1F 2F 3F 4F 5F 6F Bh 7F 8F 9F !F #F Ch $F %F 'F (F )F Dh *F +F ,F Eh -F .F Fh /F :F ;F =F ?F Gh @F [F ]F ^F _F Hh `F {F |F }F ~F Ih aG bG cG dG eG Jh fG gG hG iG jG Kh kG lG mG nG oG pG qG rG sG tG Lh uG Mh vG wG xG Nh yG Oh zG AG Ph BG Qh Rh CG DG Sh EG FG Th GG Uh HG Vh IG Wh JG Xh KG Yh LG MG NG Zh OG PG QG 0h RG SG TG UG VG WG XG YG 1h ZG 0G 1G 2G 3G 4G 5G 6G 2h 7G 8G 9G !G #G $G %G 3h 'G (G )G *G +G ,G -G .G /G :G ;G =G ?G @G [G 4h ]G ^G _G `G {G |G }G ~G aH 5h bH cH dH eH 6h fH gH hH iH jH 7h kH lH 8h mH nH Xb Yb oH pH qH rH sH 9h tH uH vH wH xH yH !h zH AH BH #h qf CH Zb DH $h EH FH GH %h HH IH ^ JH KH LH MH NH OH PH QH RH SH TH UH VH WH XH YH ZH 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H !H #H $H %H 'H 'h (H )H (h *H +H ,H -H .H /H :H ;H =H ?H @H 0b 1b )h [H ]H ^H _H 2b 3b 4b `H {H |H }H ~H aI bI cI b dI eI fI gI hI iI jI kI lI mI nI oI *h pI qI +h ,h rI Sv -h .h /h :h sI tI uI vI ;h wI xI yI zI xw AI 5b 6b =h BI CI ?h ew 6v kw DI 7b EI @h FI GI HI [h ]h II JI 7v lw 8b 9b !b KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI 0I 1I 2I 3I 4I 5I 6I 7I 8I 9I !I #I $I %I 'I (I )I *I +I ,I -I .I /I :I ;I =I ?I @I [I ]I ^I _I `I {I |I }I ~I aJ bJ cJ dJ eJ fJ ^h gJ hJ iJ jJ kJ lJ mJ nJ oJ pJ qJ rJ sJ tJ uJ vJ wJ xJ yJ zJ AJ BJ CJ DJ EJ FJ GJ HJ IJ JJ KJ yw df LJ _h MJ NJ OJ `h PJ QJ RJ SJ TJ UJ VJ WJ {h XJ YJ ZJ 0J |h 1J 2J }h 3J 4J 5J 6J 7J 8J 9J !J ~h #J t 5 u v w x y 6 $J ai %J bi 'J (J )J *J +J ci ,J -J .J /J :J ;J =J ?J @J [J di #b $b ei ]J ^J _J `J {J fi |J }J ~J aK gi bK _v cK dK hi eK ii fK ji _ ` { z A | gK ki hK iK jK li kK lK mK nK oK mi pK qK rK sK tK uK vK wK xK yK zK AK BK CK DK EK FK GK HK IK JK KK LK MK NK OK PK QK RK SK TK UK VK WK XK YK ZK 0K 1K 2K 3K 4K 5K 6K 7K 8K 9K !K #K $K %K 'K (K )K *K +K ,K -K .K /K :K ;K =K ?K @K [K ]K ^K _K `K {K |K }K ~K aL ni bL cL dL eL fL gL hL iL jL kL lL mL nL oL pL qL rL sL tL uL vL wL xL yL zL AL BL CL DL EL FL %b 'b GL HL oi IL pi JL qi ri KL LL ML NL OL PL QL si RL SL TL UL VL WL XL YL ZL 0L ti 1L ui 2L 3L 4L 5L 6L 7L 8L 9L !L #L $L %L 'L (L vi )L *L +L ,L -L .L /L :L ;L =L ?L @L [L ]L ^L _L `L {L |L }L ~L aM bM cM dM eM fM gM hM iM jM kM lM mM wi nM oM pM qM rM sM (b )b *b - } +b tM ,b -b ~ B xi uM vM yi wM xM zi yM zM Ai AM BM Bi CM DM Ci EM FM Di GM HM Ei IM JM Fi KM LM Gi MM NM Hi OM PM Ii QM RM Ji SM TM UM VM Ki WM XM YM ZM Li 0M 1M 2M 3M Mi 4M 5M 6M Ni 7M 8M 9M Oi !M #M $M Pi %M 'M (M Qi )M *M +M Ri ,M -M .M Si /M :M ;M =M ?M @M [M ]M ^M Ti _M `M {M Ui |M Vi }M ~M aN bN cN dN eN Wi fN gN hN iN jN kN lN mN nN Xi oN pN qN Yi rN Zi sN tN uN 0i vN wN xN 1i yN zN AN BN CN DN EN FN GN HN IN JN KN LN MN NN ON PN QN RN SN TN UN VN WN XN YN ZN 0N 1N 2N 3N 2i 4N 5N 6N 7N 8N 3i 9N 8v !N #N 4i $N %N 'N (N 5i )N *N 6i +N ,N 7i -N .N 8i /N :N ;N =N ?N @N [N ]N ^N _N `N {N 9i |N }N ~N aO .b bO rf zw ef Aw ff Bw Af cO dO eO fO gO hO iO jO kO lO mO !i nO oO pO qO rO sO tO uO vO wO xO yO zO AO BO CO DO EO FO GO HO IO JO KO #i LO MO NO OO PO QO RO SO TO UO VO WO XO YO ZO 0O 1O 2O 3O 4O 5O 6O 7O 8O $i 9O !O #O $O %O 'O (O )O *O +O ,O -O .O /O :O ;O =O %i ?O @O [O ]O ^O _O `O {O |O }O ~O aP bP cP 'i dP eP fP (i gP hP iP )i *i jP kP lP mP +i nP oP pP qP ,i rP sP tP uP -i vP wP xP .i yP zP AP /i BP CP DP :i EP FP ;i GP HP IP =i ?i JP KP @i [i LP g {e /b MP 9v NP !v OP #v PP ]i QP ^i :b _i RP SP TP UP VP WP XP YP ZP 0P 1P 2P 3P 4P 5P 6P `i 7P {i 8P |i 9P }i !P ~i aj #P bj $P %P 'P (P )P *P cj +P ,P -P dj .P ej fj /P :P gj ;P hj =P ij ?P jj @P kj [P lj ]P ^P _P `P mj {P |P }P ~P nj aQ bQ cQ dQ oj eQ fQ gQ hQ iQ jQ kQ lQ mQ nQ oQ pQ qQ rQ sQ tQ uQ vQ wQ xQ yQ zQ AQ BQ CQ DQ EQ FQ GQ HQ IQ JQ KQ LQ MQ NQ OQ PQ QQ RQ SQ pj TQ UQ VQ WQ XQ YQ ZQ 0Q qj 1Q 2Q 3Q 4Q 5Q 6Q 7Q 8Q rj 9Q sj !Q tj #Q uj $Q ~v %Q vj 'Q wj (Q xj )Q *Q yj +Q zj ,Q Aj -Q Bj .Q Cj /Q Dj :Q Ej ;Q =Q ?Q @Q Fj [Q ]Q Gj ^Q _Q Hj `Q {Q |Q Ij Jj }Q ~Q aR bR cR Kj dR Lj eR Mj fR Nj gR Oj hR Pj iR Qj jR Rj kR Sj lR Tj mR Uj Vj nR oR Wj pR Xj qR Yj rR Zj sR 0j 1j 2j tR uR 3j 4j vR 5j wR xR yR 6j zR AR BR CR DR 7j 8j 9j ER !j #j FR $j GR HR %j IR JR KR LR MR 'j NR OR (j PR QR )j *j RR SR TR UR +j VR WR XR YR ,j ZR 0R 1R 2R 3R -j 4R 5R .j 6R 7R /j 8R 9R :j !R #R $R ;j %R 'R =j (R )R ?j *R +R @j ,R [j -R .R ]j /R :R ^j ;R =R ?R _j @R [R `j {j ]R ^R _R `R {R |j |R }R ~R aS }j bS cS dS eS ~j fS gS hS iS ak jS kS bk lS mS ck nS oS dk pS qS rS sS tS ek uS vS wS xS yS zS fk AS BS CS DS ES gk FS GS HS IS JS hk KS LS MS NS OS ik PS QS RS SS TS jk US VS WS kk XS YS ZS lk 0S 1S 2S mk 3S 4S nk 5S 6S 7S 8S 9S ok !S #S $S %S 'S pk (S )S *S +S ,S qk -S .S /S :S ;S rk =S ?S @S [S ]S sk ^S _S `S {S |S tk }S ~S aT bT cT uk dT eT fT gT hT vk iT jT kT lT mT nT oT pT qT rT wk sT xk tT uT vT yk wT zk xT yT Ak zT Bk AT Ck Dk BT CT Ek DT ET Fk FT Gk GT Hk HT Ik IT Jk JT Kk KT Lk LT Mk MT NT OT Nk PT QT RT Ok ST TT UT Pk VT WT XT YT ZT 0T 1T 2T Qk 3T 4T 5T 6T 7T 8T 9T !T Rk #T $T %T 'T (T )T *T +T Sk ,T -T .T /T :T ;T =T Tk ?T @T [T ]T ^T _T `T {T |T }T ~T aU bU cU dU Uk eU fU gU hU iU jU kU lU mU nU oU pU qU rU sU Vk tU uU vU wU xU yU zU AU BU CU DU EU FU GU HU Wk IU JU KU LU MU NU OU PU QU Xk RU SU TU UU Yk VU WU XU YU Tv ZU 0U 1U 2U 3U Zk 4U 5U 0k 6U 7U 1k 8U 9U 2k !U #U ;b =b $U %U 'U (U )U 3k *U +U ,U -U .U /U 4k :U ;U =U ?U @U [U 5k ]U ^U _U `U {U |U 6k }U ~U aV bV 7k sf cV ?b dV 8k eV fV ab gV 9k hV iV bb jV kV lV mV nV oV pV qV rV sV tV uV vV wV xV @b yV zV AV BV CV DV EV FV GV HV IV JV KV LV MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V !k 3V 4V #k 5V 6V 7V 8V 9V !V #V $V %V 'V (V [b ]b $k )V *V +V ,V ^b _b `b -V .V /V :V ;V =V ?V @V c [V ]V ^V _V `V {V |V }V ~V aW bW cW %k dW eW 'k (k fW Uv )k *k +k ,k gW hW iW jW -k kW lW mW nW Cw oW {b |b .k pW qW /k fw $v mw rW }b sW :k tW uW vW ;k =k wW xW %v nw ~b ac bc yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W )W *W +W ,W -W .W /W :W ;W =W ?W @W [W ]W ^W ?k _W `W {W |W }W ~W aX bX cX dX eX fX gX hX iX jX kX lX mX nX oX pX qX rX sX tX uX vX wX xX yX Dw gf zX @k AX BX CX [k DX EX FX GX HX IX JX KX ]k LX MX NX OX ^k PX QX _k RX SX TX UX VX WX XX YX `k ZX C 7 D E F G H 8 0X {k 1X |k 2X 3X 4X 5X 6X }k 7X 8X 9X !X #X $X %X 'X (X )X ~k cc dc al *X +X ,X -X .X bl /X :X ;X =X cl ?X `v @X [X dl ]X el ^X fl cb db eb I J fb _X gl `X {X |X hl }X ~X aY bY cY il dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY BY CY DY EY FY GY HY IY JY KY LY MY NY OY PY QY RY SY TY UY VY WY XY YY ZY 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y -Y .Y /Y :Y ;Y =Y jl ?Y @Y [Y ]Y ^Y _Y `Y {Y |Y }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ ec fc gc 9 hc ic ! jc kc lc uZ vZ kl wZ ll xZ ml nl yZ zZ AZ BZ CZ DZ EZ ol FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ pl PZ ql QZ RZ SZ TZ UZ VZ WZ XZ YZ ZZ 0Z 1Z 2Z 3Z rl 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 sl b0 c0 d0 e0 f0 g0 mc nc oc . gb pc h0 qc rc hb K tl i0 j0 ul k0 l0 vl m0 n0 wl o0 p0 xl q0 r0 yl s0 t0 zl u0 v0 Al w0 x0 Bl y0 z0 Cl A0 B0 Dl C0 D0 El E0 F0 Fl G0 H0 I0 J0 Gl K0 L0 M0 N0 Hl O0 P0 Q0 R0 Il S0 T0 U0 Jl V0 W0 X0 Kl Y0 Z0 00 Ll 10 20 30 Ml 40 50 60 Nl 70 80 90 Ol !0 #0 $0 %0 '0 (0 )0 *0 +0 Pl ,0 -0 .0 Ql /0 Rl :0 ;0 =0 ?0 @0 [0 ]0 Sl ^0 _0 `0 {0 |0 }0 ~0 a1 b1 Tl c1 d1 e1 Ul f1 Vl g1 h1 i1 Wl j1 k1 l1 Xl m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 Yl S1 T1 U1 V1 W1 Zl X1 'v Y1 Z1 0l 01 11 21 31 1l 41 51 2l 61 71 3l 81 91 4l !1 #1 $1 %1 '1 (1 )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 5l ?1 @1 [1 ]1 sc tc uc ^1 tf Ew hf Fw if Gw Bf _1 `1 {1 |1 }1 ~1 a2 b2 c2 d2 e2 6l f2 g2 h2 i2 j2 k2 l2 m2 n2 o2 p2 q2 r2 s2 t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 7l D2 E2 F2 G2 H2 I2 J2 K2 L2 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 Z2 02 8l 12 22 32 42 52 62 72 82 92 !2 #2 $2 %2 '2 (2 )2 *2 9l +2 ,2 -2 .2 /2 :2 ;2 =2 ?2 @2 [2 ]2 ^2 _2 `2 !l {2 |2 }2 ~2 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 #l k3 l3 m3 $l n3 o3 p3 %l q3 r3 s3 'l t3 u3 v3 (l )l w3 x3 y3 z3 *l A3 B3 C3 D3 +l E3 F3 G3 H3 ,l I3 J3 K3 L3 -l M3 N3 O3 P3 .l Q3 R3 S3 /l T3 U3 V3 :l W3 X3 Y3 ;l Z3 03 13 =l 23 33 43 ?l 53 63 @l 73 83 93 [l ]l !3 #3 ^l _l $3 %3 `l {l '3 h |e vc (3 (v )3 )v *3 *v +3 |l ,3 }l wc ~l xc am yc bm -3 .3 /3 :3 ;3 =3 ?3 @3 [3 ]3 ^3 _3 `3 {3 |3 }3 cm ~3 dm a4 em b4 fm c4 gm hm d4 im e4 f4 g4 h4 i4 j4 jm k4 l4 m4 km n4 lm mm o4 p4 nm q4 om r4 pm s4 qm t4 rm u4 sm v4 tm w4 um x4 vm y4 wm z4 A4 B4 C4 xm D4 E4 F4 G4 ym H4 I4 J4 K4 zm L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 04 14 24 34 44 54 64 74 84 94 !4 #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 ;4 =4 Am ?4 @4 [4 ]4 ^4 _4 `4 {4 Bm |4 }4 ~4 a5 b5 c5 d5 e5 Cm f5 Dm g5 Em h5 Fm i5 aw j5 Gm k5 Hm l5 Im m5 Jm n5 Km o5 p5 Lm q5 r5 Mm s5 Nm t5 Om u5 Pm v5 Qm w5 Rm x5 Sm y5 z5 A5 B5 Tm C5 D5 Um E5 F5 Vm G5 H5 I5 Wm Xm J5 K5 L5 M5 N5 Ym O5 Zm P5 0m Q5 1m R5 2m S5 3m T5 4m U5 5m V5 6m W5 7m X5 8m Y5 9m Z5 !m 05 #m 15 $m 25 %m 35 'm (m 45 55 )m 65 *m 75 +m 85 ,m 95 -m .m /m !5 #5 :m ;m $5 =m %5 '5 (5 ?m )5 *5 +5 ,5 -5 @m [m ]m .5 ^m _m /5 `m {m :5 |m ;5 =5 }m ?5 @5 [5 ]5 ^5 ~m _5 `5 an {5 |5 bn }5 ~5 cn dn a6 b6 c6 d6 en e6 f6 g6 h6 fn i6 j6 k6 l6 gn m6 n6 o6 p6 hn q6 r6 s6 t6 u6 in v6 w6 jn x6 y6 kn z6 A6 ln B6 C6 mn D6 E6 nn F6 G6 H6 on I6 J6 pn K6 L6 qn M6 N6 rn O6 sn P6 Q6 tn R6 S6 un T6 U6 V6 vn W6 X6 wn Y6 Z6 xn 06 16 yn 26 36 zn An 46 56 66 76 86 Bn 96 !6 #6 $6 Cn %6 '6 (6 )6 Dn *6 +6 ,6 -6 En .6 /6 :6 ;6 Fn =6 ?6 @6 [6 Gn ]6 ^6 Hn _6 `6 In {6 |6 Jn }6 ~6 a7 b7 c7 Kn d7 e7 f7 g7 h7 i7 Ln j7 k7 l7 m7 n7 Mn o7 p7 q7 r7 s7 Nn t7 u7 v7 w7 x7 On y7 z7 A7 B7 C7 Pn D7 E7 F7 Qn G7 H7 I7 Rn J7 K7 L7 Sn M7 N7 Tn O7 P7 Q7 R7 S7 Un T7 U7 V7 W7 X7 Vn Y7 Z7 07 17 27 Wn 37 47 57 67 77 Xn 87 97 !7 #7 $7 Yn %7 '7 (7 )7 *7 Zn +7 ,7 -7 .7 /7 0n :7 ;7 =7 ?7 @7 1n [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 2n b8 3n c8 4n d8 e8 f8 5n g8 6n h8 i8 7n j8 k8 8n 9n l8 m8 !n n8 #n o8 $n %n p8 q8 'n r8 s8 (n t8 u8 )n v8 w8 *n x8 +n y8 ,n z8 -n A8 .n B8 /n C8 :n D8 ;n E8 =n F8 ?n G8 @n H8 [n I8 ]n J8 ^n K8 L8 M8 _n N8 O8 P8 `n Q8 R8 S8 {n T8 U8 V8 W8 X8 Y8 Z8 08 |n 18 28 38 48 58 68 78 88 }n 98 !8 #8 $8 %8 '8 (8 )8 ~n *8 +8 ,8 -8 .8 /8 :8 ;8 ao =8 ?8 @8 [8 ]8 ^8 _8 `8 bo {8 |8 }8 ~8 a9 b9 c9 co d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 do s9 t9 u9 v9 w9 x9 y9 z9 A9 B9 C9 D9 E9 F9 G9 eo H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 fo W9 X9 Y9 Z9 09 19 29 39 49 59 69 79 89 99 !9 go #9 $9 %9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 :9 ;9 =9 ho ?9 @9 [9 ]9 ^9 _9 `9 {9 |9 io }9 ~9 a! b! jo c! d! e! f! Vv g! h! i! j! k! ko l! m! lo n! o! mo p! q! no r! s! oo t! u! po v! w! zc Ac x! y! z! A! B! qo C! D! E! F! G! H! ro I! J! K! L! M! N! so O! P! Q! R! S! T! to U! V! W! X! Y! Z! uo 0! 1! 2! 3! 4! 5! vo 6! 7! 8! 9! !! wo uf #! Bc $! xo %! '! ib jb kb (! yo )! *! lb +! ,! -! .! /! :! ;! =! ?! @! [! ]! ^! _! `! Cc {! |! }! ~! a# b# Dc c# d# e# f# g# h# Ec i# j# k# l# m# n# o# p# q# r# s# t# u# v# w# x# y# z# A# B# C# D# E# F# G# H# I# J# K# L# M# N# O# P# Q# R# S# T# U# V# W# X# Y# Fc zo Z# 0# Ao 1# 2# 3# 4# 5# 6# 7# 8# 9# !# ## Gc Hc Bo $# %# '# (# Ic Jc Kc )# *# +# ,# -# .# /# :# d ;# =# ?# @# [# ]# ^# _# `# {# |# }# Co ~# a$ Do Eo b$ Wv Fo Go Ho Io c$ d$ e$ f$ Jo g$ h$ i$ j$ Hw k$ Lc Mc Ko l$ m$ Lo gw +v ow n$ Nc o$ Mo p$ q$ r$ No Oo s$ t$ ,v pw Oc Pc Qc u$ v$ w$ x$ y$ z$ A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ 2$ 3$ 4$ 5$ 6$ 7$ 8$ 9$ !$ #$ $$ %$ '$ ($ )$ *$ +$ ,$ -$ .$ /$ :$ ;$ =$ ?$ Po @$ [$ ]$ ^$ _$ `$ {$ |$ }$ ~$ a% b% c% d% e% f% g% h% i% j% k% l% m% n% o% p% q% r% s% t% u% Iw jf v% Qo w% x% y% Ro z% A% B% C% D% E% F% G% So H% I% J% K% To L% M% Uo N% O% P% Q% R% S% T% U% Vo V% L # M N O P Q $ W% Wo X% Xo Y% Z% 0% 1% 2% Yo 3% 4% 5% 6% 7% 8% 9% !% #% $% Zo Rc Sc 0o %% '% (% )% *% 1o +% ,% -% .% 2o /% {v :% ;% 3o =% 4o ?% 5o mb nb ob R S pb @% 6o [% ]% ^% 7o _% `% {% |% }% 8o ~% a' b' c' d' e' f' g' h' i' j' k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' C' D' E' F' G' H' I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' 3' 4' 5' 6' 7' 8' 9' !' #' $' %' '' (' )' *' +' ,' -' .' 9o /' :' ;' =' ?' @' [' ]' ^' _' `' {' |' }' ~' a( b( c( d( e( f( g( h( i( j( k( l( m( n( o( p( Tc Uc Vc % Wc Xc ' Yc Zc 0c q( r( !o s( #o t( $o %o u( v( w( x( y( z( A( 'o B( C( D( E( F( G( H( I( J( K( (o L( )o M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( *o 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( +o |( }( ~( a) b) c) 1c 2c 3c / qb 4c d) 5c 6c rb T ,o e) f) -o g) h) .o i) j) /o k) l) :o m) n) ;o o) p) =o q) r) ?o s) t) @o u) v) [o w) x) ]o y) z) ^o A) B) _o C) D) E) F) `o G) H) I) J) {o K) L) M) N) |o O) P) Q) }o R) S) T) ~o U) V) W) ap X) Y) Z) bp 0) 1) 2) cp 3) 4) 5) dp 6) 7) 8) 9) !) #) $) %) ') ep () )) *) fp +) gp ,) -) .) /) :) ;) =) hp ?) @) [) ]) ^) _) `) {) |) ip }) ~) a* jp b* kp c* d* e* lp f* g* h* mp i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* E* F* G* H* I* J* K* L* M* N* np O* P* Q* R* S* op T* -v U* V* pp W* X* Y* Z* qp 0* 1* rp 2* 3* sp 4* 5* tp 6* 7* 8* 9* !* #* $* %* '* (* )* ** +* ,* -* .* up /* :* ;* =* 7c 8c 9c ?* vf Jw kf Kw lf Lw Cf @* [* ]* ^* _* `* {* |* }* ~* a+ vp b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ m+ n+ o+ p+ q+ r+ s+ t+ u+ v+ w+ x+ y+ wp z+ A+ B+ C+ D+ E+ F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ Q+ R+ S+ T+ U+ V+ W+ xp X+ Y+ Z+ 0+ 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ !+ #+ $+ %+ yp '+ (+ )+ *+ ++ ,+ -+ .+ /+ :+ ;+ =+ ?+ @+ [+ zp ]+ ^+ _+ `+ {+ |+ }+ ~+ a, b, c, d, e, f, Ap g, h, i, Bp j, k, l, Cp m, n, o, Dp p, q, r, Ep Fp s, t, u, v, Gp w, x, y, z, Hp A, B, C, D, Ip E, F, G, H, Jp I, J, K, L, Kp M, N, O, Lp P, Q, R, Mp S, T, U, Np V, W, X, Op Y, Z, 0, Pp 1, 2, Qp 3, 4, 5, Rp Sp 6, 7, Tp Up 8, 9, Vp Wp !, i }e !c #, .v $, /v %, :v ', Xp (, Yp #c Zp $c 0p %c 1p ), *, +, ,, -, ., /, :, ;, =, ?, @, [, ], ^, _, 2p `, 3p {, 4p |, 5p }, 6p 7p ~, 8p a- b- c- d- e- f- 9p g- h- i- !p j- #p $p k- l- %p m- 'p n- (p o- )p p- *p q- +p r- ,p s- -p t- .p u- /p v- w- x- y- :p z- A- B- C- ;p D- E- F- G- =p H- I- J- K- L- M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- 0- 1- 2- 3- 4- 5- 6- 7- 8- 9- !- #- $- %- '- (- )- *- +- ,- -- .- ?p /- :- ;- =- ?- @- [- ]- @p ^- _- `- {- |- }- ~- a. [p b. ]p c. ^p d. _p e. bw f. `p g. {p h. |p i. }p j. ~p k. l. aq m. n. bq o. cq p. dq q. eq r. fq s. gq t. hq u. v. w. x. iq y. z. jq A. B. kq C. D. E. lq mq F. G. H. I. J. nq K. oq L. pq M. qq N. rq O. sq P. tq Q. uq R. vq S. wq T. xq U. yq V. zq W. Aq X. Bq Y. Cq Z. Dq Eq 0. 1. Fq 2. Gq 3. Hq 4. Iq 5. Jq Kq Lq 6. 7. Mq Nq 8. Oq 9. !. #. Pq $. %. '. (. ). Qq Rq Sq *. Tq Uq +. Vq Wq ,. Xq -. .. Yq /. :. ;. =. ?. Zq @. [. 0q ]. ^. 1q _. `. 2q 3q {. |. }. ~. 4q a/ b/ c/ d/ 5q e/ f/ g/ h/ 6q i/ j/ k/ l/ 7q m/ n/ o/ p/ q/ 8q r/ s/ 9q t/ u/ !q v/ w/ #q x/ y/ $q z/ A/ %q B/ C/ D/ 'q E/ F/ (q G/ H/ )q I/ J/ *q K/ +q L/ M/ ,q N/ O/ -q P/ Q/ R/ .q S/ T/ /q U/ V/ :q W/ X/ ;q Y/ Z/ =q ?q 0/ 1/ 2/ 3/ 4/ @q 5/ 6/ 7/ 8/ [q 9/ !/ #/ $/ ]q %/ '/ (/ )/ ^q */ +/ ,/ -/ _q ./ // :/ ;/ `q =/ ?/ {q @/ [/ |q ]/ ^/ }q _/ `/ {/ |/ }/ ~q ~/ a: b: c: d: e: ar f: g: h: i: j: br k: l: m: n: o: cr p: q: r: s: t: dr u: v: w: x: y: er z: A: B: fr C: D: E: gr F: G: H: hr I: J: ir K: L: M: N: O: jr P: Q: R: S: T: kr U: V: W: X: Y: lr Z: 0: 1: 2: 3: mr 4: 5: 6: 7: 8: nr 9: !: #: $: %: or ': (: ): *: +: pr ,: -: .: /: :: qr ;: =: ?: @: [: ]: ^: _: `: {: rr |: sr }: tr ~: a; b; ur c; vr d; e; wr f; g; xr yr h; i; zr j; Ar k; Br Cr l; m; Dr n; o; Er p; q; Fr r; s; Gr t; Hr u; Ir v; Jr w; Kr x; Lr y; Mr z; Nr A; Or B; Pr C; Qr D; Rr E; Sr F; Tr G; H; I; Ur J; K; L; Vr M; N; O; Wr P; Q; R; S; T; U; V; W; Xr X; Y; Z; 0; 1; 2; 3; 4; Yr 5; 6; 7; 8; 9; !; #; $; Zr %; '; (; ); *; +; ,; -; 0r .; /; :; ;; =; ?; @; [; 1r ]; ^; _; `; {; |; }; 2r ~; a= b= c= d= e= f= g= h= i= j= k= l= m= n= 3r o= p= q= r= s= t= u= v= w= x= y= z= A= B= C= 4r D= E= F= G= H= I= J= K= L= M= N= O= P= Q= R= 5r S= T= U= V= W= X= Y= Z= 0= 1= 2= 3= 4= 5= 6= 6r 7= 8= 9= != #= $= %= '= (= )= *= += ,= -= .= 7r /= := ;= == ?= @= [= ]= ^= 8r _= `= {= |= 9r }= ~= a? b? Xv c? d? e? f? g? !r h? i? #r j? k? $r l? m? %r n? o? 'r p? q? (r r? s? 'c (c t? u? v? w? x? )r y? z? A? B? C? D? *r E? F? G? H? I? J? +r K? L? M? N? O? P? ,r Q? R? S? T? U? V? -r W? X? Y? Z? 0? 1? .r 2? 3? 4? 5? 6? /r wf 7? )c 8? :r 9? !? sb tb ub #? ;r $? %? vb '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? *c ]? ^? _? `? {? |? +c }? ~? a@ b@ c@ d@ ,c e@ f@ g@ h@ i@ j@ k@ l@ m@ n@ o@ p@ q@ r@ s@ t@ u@ v@ w@ x@ y@ z@ A@ B@ C@ D@ E@ F@ G@ H@ I@ J@ K@ L@ M@ N@ O@ P@ Q@ R@ S@ T@ U@ -c =r V@ W@ ?r X@ Y@ Z@ 0@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ .c /c @r 8@ 9@ !@ #@ :c ;c =c $@ %@ '@ (@ )@ *@ +@ ,@ e -@ .@ /@ :@ ;@ =@ ?@ @@ [@ ]@ ^@ _@ [r `@ {@ ]r ^r |@ Yv _r `r {r |r }@ ~@ a[ b[ }r c[ d[ e[ f[ Mw g[ ?c @c ~r h[ i[ as hw ;v qw j[ [c k[ bs l[ m[ n[ cs ds o[ p[ =v rw ]c ^c _c q[ r[ s[ t[ u[ v[ w[ x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ S[ T[ U[ V[ W[ X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ 9[ ![ #[ $[ %[ '[ ([ )[ *[ +[ ,[ -[ .[ /[ es :[ ;[ =[ ?[ @[ [[ ][ ^[ _[ `[ {[ |[ }[ ~[ a] b] c] d] e] f] g] h] i] j] k] l] m] n] o] p] q] Nw mf r] fs s] t] u] gs v] w] x] y] z] A] B] C] hs D] E] F] G] is H] I] js J] K] L] M] N] O] P] Q] ks R] U ( V W X Y Z ) S] ls T] ms U] V] W] X] Y] ns Z] 0] 1] 2] 3] 4] 5] 6] 7] 8] os `c {c ps 9] !] #] $] %] qs '] (] )] *] rs +] |v ,] -] ss .] ts /] us wb xb yb 0 1 zb :] vs ;] =] ?] ws @] [] ]] ^] _] xs `] {] |] }] ~] a^ b^ c^ d^ e^ f^ g^ h^ i^ j^ k^ l^ m^ n^ o^ p^ q^ r^ s^ t^ u^ v^ w^ x^ y^ z^ A^ B^ C^ D^ E^ F^ G^ H^ I^ J^ K^ L^ M^ N^ O^ P^ Q^ R^ S^ T^ U^ V^ W^ X^ Y^ Z^ 0^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ !^ #^ $^ %^ '^ (^ )^ *^ ys +^ ,^ -^ .^ /^ :^ ;^ =^ ?^ @^ [^ ]^ ^^ _^ `^ {^ |^ }^ ~^ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ |c }c ~c * ad bd + cd dd ed m_ n_ zs o_ As p_ Bs Cs q_ r_ s_ t_ u_ v_ w_ Ds x_ y_ z_ A_ B_ C_ D_ E_ F_ G_ Es H_ Fs I_ J_ K_ L_ M_ N_ O_ P_ Q_ R_ S_ T_ U_ V_ Gs W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ /_ :_ ;_ =_ ?_ @_ [_ ]_ Hs ^_ __ `_ {_ |_ }_ fd gd hd : Ab id ~_ jd kd Bb 2 Is a` b` Js c` d` Ks e` f` Ls g` h` Ms i` j` Ns k` l` Os m` n` Ps o` p` Qs q` r` Rs s` t` Ss u` v` Ts w` x` Us y` z` A` B` Vs C` D` E` F` Ws G` H` I` J` Xs K` L` M` Ys N` O` P` Zs Q` R` S` 0s T` U` V` 1s W` X` Y` 2s Z` 0` 1` 3s 2` 3` 4` 5` 6` 7` 8` 9` !` 4s #` $` %` 5s '` 6s (` )` *` +` ,` -` .` 7s /` :` ;` =` ?` @` [` ]` ^` 8s _` `` {` 9s |` !s }` ~` a{ #s b{ c{ d{ $s e{ f{ g{ h{ i{ j{ k{ l{ m{ n{ o{ p{ q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ %s K{ L{ M{ N{ O{ 's P{ ?v Q{ R{ (s S{ T{ U{ V{ )s W{ X{ *s Y{ Z{ +s 0{ 1{ ,s 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ -s +{ ,{ -{ .{ ld md nd /{ xf Ow nf Pw of Qw Df :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ .s |{ }{ ~{ a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| s| t| u| /s v| w| x| y| z| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| :s T| U| V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ;s !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =s =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} ?s c} d} e} @s f} g} h} [s i} j} k} ]s l} m} n} ^s _s o} p} q} r} `s s} t} u} v} {s w} x} y} z} |s A} B} C} D} }s E} F} G} H} ~s I} J} K} at L} M} N} bt O} P} Q} ct R} S} T} dt U} V} W} et X} Y} ft Z} 0} 1} gt ht 2} 3} it jt 4} 5} kt lt 6} j ~e od 7} @v 8} [v 9} ]v !} mt #} nt pd ot qd pt rd qt $} %} '} (} )} *} +} ,} -} .} /} :} ;} =} ?} @} rt [} st ]} tt ^} ut _} vt wt `} xt {} |} }} ~} a~ b~ yt c~ d~ e~ zt f~ At Bt g~ h~ Ct i~ Dt j~ Et k~ Ft l~ Gt m~ Ht n~ It o~ Jt p~ Kt q~ Lt r~ s~ t~ u~ Mt v~ w~ x~ y~ Nt z~ A~ B~ C~ Ot D~ E~ F~ G~ H~ I~ J~ K~ L~ M~ N~ O~ P~ Q~ R~ S~ T~ U~ V~ W~ X~ Y~ Z~ 0~ 1~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 9~ !~ #~ $~ %~ '~ (~ )~ *~ Pt +~ ,~ -~ .~ /~ :~ ;~ =~ Qt ?~ @~ [~ ]~ ^~ _~ `~ {~ Rt |~ St }~ Tt ~~ Ut aabcw babVt cabWt dabXt eabYt fabZt gabhab0t iabjab1t kab2t lab3t mab4t nab5t oab6t pab7t qabrabsabtab8t uabvab9t wabxab!t yabzabAab#t $t BabCabDabEabFab%t Gab't Hab(t Iab)t Jab*t Kab+t Lab,t Mab-t Nab.t Oab/t Pab:t Qab;t Rab=t Sab?t Tab@t Uab[t Vab]t ^t WabXab_t Yab`t Zab{t 0ab|t 1ab}t ~t au 2ab3abbu cu 4abdu 5ab6ab7abeu 8ab9ab!ab#ab$abfu gu hu %abiu ju 'abku lu (abmu )ab*abnu +ab,ab-ab.ab/abou :ab;abpu =ab?abqu @ab[abru su ]ab^ab_ab`abtu {ab|ab}ab~abuu abbbbbcbbdbbvu ebbfbbgbbhbbwu ibbjbbkbblbbmbbxu nbbobbyu pbbqbbzu rbbsbbAu tbbubbBu vbbwbbCu xbbybbzbbDu AbbBbbEu CbbDbbFu EbbFbbGu GbbHu HbbIbbIu JbbKbbJu LbbMbbNbbKu ObbPbbLu QbbRbbMu SbbTbbNu UbbVbbOu Pu WbbXbbYbbZbb0bbQu 1bb2bb3bb4bbRu 5bb6bb7bb8bbSu 9bb!bb#bb$bbTu %bb'bb(bb)bbUu *bb+bb,bb-bbVu .bb/bbWu :bb;bbXu =bb?bbYu @bb[bb]bb^bb_bbZu `bb{bb|bb}bb~bbacb0u bcbccbdcbecbfcb1u gcbhcbicbjcbkcb2u lcbmcbncbocbpcb3u qcbrcbscbtcbucb4u vcbwcbxcb5u ycbzcbAcb6u BcbCcbDcb7u EcbFcb8u GcbHcbIcbJcbKcb9u LcbMcbNcbOcbPcb!u QcbRcbScbTcbUcb#u VcbWcbXcbYcbZcb$u 0cb1cb2cb3cb4cb%u 5cb6cb7cb8cb9cb'u !cb#cb$cb%cb'cb(u (cb)cb*cb+cb,cb)u -cb.cb/cb:cb;cb=cb?cb@cb[cb]cb*u ^cb+u _cb,u `cb{cb|cb-u }cb.u ~cbadb/u bdbcdb:u ;u ddbedb=u fdb?u gdb@u [u hdbidb]u jdbkdb^u ldbmdb_u ndbodb`u pdb{u qdb|u rdb}u sdb~u tdbav udbbv vdbcv wdbdv xdbev ydbfv zdbgv Adbhv Bdbiv CdbDdbEdbjv FdbGdbHdbkv IdbJdbKdblv LdbMdbNdbOdbPdbQdbRdbSdbmv TdbUdbVdbWdbXdbYdbZdb0dbnv 1db2db3db4db5db6db7db8dbov 9db!db#db$db%db'db(db)dbpv *db+db,db-db.db/db:db;dbqv =db?db@db[db]db^db_dbrv `db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebsv keblebmebneboebpebqebrebsebtebuebvebwebxebyebtv zebAebBebCebDebEebFebGebHebIebJebKebLebMebNebuv OebPebQebRebSebTebUebVebWebXebYebZeb0eb1eb2ebvv 3eb4eb5eb6eb7eb8eb9eb!eb#eb$eb%eb'eb(eb)eb*ebwv +eb,eb-eb.eb/eb:eb;eb=eb?ebxv @eb[eb]eb^ebyv _eb`eb{eb|ebZv }eb~ebafbbfbcfbzv dfbefbAv ffbgfbBv hfbifbCv jfbkfbDv lfbmfbEv nfbofbsd td pfbqfbrfbsfbtfbFv ufbvfbwfbxfbyfbzfbGv AfbBfbCfbDfbEfbFfbHv GfbHfbIfbJfbKfbLfbIv MfbNfbOfbPfbQfbRfbJv SfbTfbUfbVfbWfbXfbKv YfbZfb0fb1fb2fbLv yf 3fbud 4fbMv 5fb6fbCb Db Eb 7fbNv 8fb9fbFb !fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fbvd =fb?fb@fb[fb]fb^fbwd _fb`fb{fb|fb}fb~fbxd agbbgbcgbdgbegbfgbggbhgbigbjgbkgblgbmgbngbogbpgbqgbrgbsgbtgbugbvgbwgbxgbygbzgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbPgbQgbyd Ov RgbSgbPv TgbUgbVgbWgbXgbYgbZgb0gb1gb2gb3gbzd Ad Qv 4gb5gb6gb7gbBd Cd Dd 8gb9gb!gb#gb$gb%gb'gb(gb

1056 

1057 def add_api_route( 1abcde

1058 self, 

1059 path: str, 

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

1061 *, 

1062 response_model: Any = Default(None), 

1063 status_code: Optional[int] = None, 

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

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

1066 summary: Optional[str] = None, 

1067 description: Optional[str] = None, 

1068 response_description: str = "Successful Response", 

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

1070 deprecated: Optional[bool] = None, 

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

1072 operation_id: Optional[str] = None, 

1073 response_model_include: Optional[IncEx] = None, 

1074 response_model_exclude: Optional[IncEx] = None, 

1075 response_model_by_alias: bool = True, 

1076 response_model_exclude_unset: bool = False, 

1077 response_model_exclude_defaults: bool = False, 

1078 response_model_exclude_none: bool = False, 

1079 include_in_schema: bool = True, 

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

1081 JSONResponse 

1082 ), 

1083 name: Optional[str] = None, 

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

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

1086 generate_unique_id 

1087 ), 

1088 ) -> None: 

1089 self.router.add_api_route( 1abcde

1090 path, 

1091 endpoint=endpoint, 

1092 response_model=response_model, 

1093 status_code=status_code, 

1094 tags=tags, 

1095 dependencies=dependencies, 

1096 summary=summary, 

1097 description=description, 

1098 response_description=response_description, 

1099 responses=responses, 

1100 deprecated=deprecated, 

1101 methods=methods, 

1102 operation_id=operation_id, 

1103 response_model_include=response_model_include, 

1104 response_model_exclude=response_model_exclude, 

1105 response_model_by_alias=response_model_by_alias, 

1106 response_model_exclude_unset=response_model_exclude_unset, 

1107 response_model_exclude_defaults=response_model_exclude_defaults, 

1108 response_model_exclude_none=response_model_exclude_none, 

1109 include_in_schema=include_in_schema, 

1110 response_class=response_class, 

1111 name=name, 

1112 openapi_extra=openapi_extra, 

1113 generate_unique_id_function=generate_unique_id_function, 

1114 ) 

1115 

1116 def api_route( 1abcde

1117 self, 

1118 path: str, 

1119 *, 

1120 response_model: Any = Default(None), 

1121 status_code: Optional[int] = None, 

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

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

1124 summary: Optional[str] = None, 

1125 description: Optional[str] = None, 

1126 response_description: str = "Successful Response", 

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

1128 deprecated: Optional[bool] = None, 

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

1130 operation_id: Optional[str] = None, 

1131 response_model_include: Optional[IncEx] = None, 

1132 response_model_exclude: Optional[IncEx] = None, 

1133 response_model_by_alias: bool = True, 

1134 response_model_exclude_unset: bool = False, 

1135 response_model_exclude_defaults: bool = False, 

1136 response_model_exclude_none: bool = False, 

1137 include_in_schema: bool = True, 

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

1139 name: Optional[str] = None, 

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

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

1142 generate_unique_id 

1143 ), 

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

1145 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde

1146 self.router.add_api_route( 1abcde

1147 path, 

1148 func, 

1149 response_model=response_model, 

1150 status_code=status_code, 

1151 tags=tags, 

1152 dependencies=dependencies, 

1153 summary=summary, 

1154 description=description, 

1155 response_description=response_description, 

1156 responses=responses, 

1157 deprecated=deprecated, 

1158 methods=methods, 

1159 operation_id=operation_id, 

1160 response_model_include=response_model_include, 

1161 response_model_exclude=response_model_exclude, 

1162 response_model_by_alias=response_model_by_alias, 

1163 response_model_exclude_unset=response_model_exclude_unset, 

1164 response_model_exclude_defaults=response_model_exclude_defaults, 

1165 response_model_exclude_none=response_model_exclude_none, 

1166 include_in_schema=include_in_schema, 

1167 response_class=response_class, 

1168 name=name, 

1169 openapi_extra=openapi_extra, 

1170 generate_unique_id_function=generate_unique_id_function, 

1171 ) 

1172 return func 1abcde

1173 

1174 return decorator 1abcde

1175 

1176 def add_api_websocket_route( 1abcde

1177 self, 

1178 path: str, 

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

1180 name: Optional[str] = None, 

1181 *, 

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

1183 ) -> None: 

1184 self.router.add_api_websocket_route( 1abcde

1185 path, 

1186 endpoint, 

1187 name=name, 

1188 dependencies=dependencies, 

1189 ) 

1190 

1191 def websocket( 1abcde

1192 self, 

1193 path: Annotated[ 

1194 str, 

1195 Doc( 

1196 """ 

1197 WebSocket path. 

1198 """ 

1199 ), 

1200 ], 

1201 name: Annotated[ 

1202 Optional[str], 

1203 Doc( 

1204 """ 

1205 A name for the WebSocket. Only used internally. 

1206 """ 

1207 ), 

1208 ] = None, 

1209 *, 

1210 dependencies: Annotated[ 

1211 Optional[Sequence[Depends]], 

1212 Doc( 

1213 """ 

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

1215 WebSocket. 

1216 

1217 Read more about it in the 

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

1219 """ 

1220 ), 

1221 ] = None, 

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

1223 """ 

1224 Decorate a WebSocket function. 

1225 

1226 Read more about it in the 

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

1228 

1229 **Example** 

1230 

1231 ```python 

1232 from fastapi import FastAPI, WebSocket 

1233 

1234 app = FastAPI() 

1235 

1236 @app.websocket("/ws") 

1237 async def websocket_endpoint(websocket: WebSocket): 

1238 await websocket.accept() 

1239 while True: 

1240 data = await websocket.receive_text() 

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

1242 ``` 

1243 """ 

1244 

1245 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde

1246 self.add_api_websocket_route( 1abcde

1247 path, 

1248 func, 

1249 name=name, 

1250 dependencies=dependencies, 

1251 ) 

1252 return func 1abcde

1253 

1254 return decorator 1abcde

1255 

1256 def include_router( 1abcde

1257 self, 

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

1259 *, 

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

1261 tags: Annotated[ 

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

1263 Doc( 

1264 """ 

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

1266 router. 

1267 

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

1269 

1270 Read more about it in the 

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

1272 """ 

1273 ), 

1274 ] = None, 

1275 dependencies: Annotated[ 

1276 Optional[Sequence[Depends]], 

1277 Doc( 

1278 """ 

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

1280 *path operations* in this router. 

1281 

1282 Read more about it in the 

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

1284 

1285 **Example** 

1286 

1287 ```python 

1288 from fastapi import Depends, FastAPI 

1289 

1290 from .dependencies import get_token_header 

1291 from .internal import admin 

1292 

1293 app = FastAPI() 

1294 

1295 app.include_router( 

1296 admin.router, 

1297 dependencies=[Depends(get_token_header)], 

1298 ) 

1299 ``` 

1300 """ 

1301 ), 

1302 ] = None, 

1303 responses: Annotated[ 

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

1305 Doc( 

1306 """ 

1307 Additional responses to be shown in OpenAPI. 

1308 

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

1310 

1311 Read more about it in the 

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

1313 

1314 And in the 

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

1316 """ 

1317 ), 

1318 ] = None, 

1319 deprecated: Annotated[ 

1320 Optional[bool], 

1321 Doc( 

1322 """ 

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

1324 

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

1326 

1327 **Example** 

1328 

1329 ```python 

1330 from fastapi import FastAPI 

1331 

1332 from .internal import old_api 

1333 

1334 app = FastAPI() 

1335 

1336 app.include_router( 

1337 old_api.router, 

1338 deprecated=True, 

1339 ) 

1340 ``` 

1341 """ 

1342 ), 

1343 ] = None, 

1344 include_in_schema: Annotated[ 

1345 bool, 

1346 Doc( 

1347 """ 

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

1349 generated OpenAPI schema. 

1350 

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

1352 

1353 **Example** 

1354 

1355 ```python 

1356 from fastapi import FastAPI 

1357 

1358 from .internal import old_api 

1359 

1360 app = FastAPI() 

1361 

1362 app.include_router( 

1363 old_api.router, 

1364 include_in_schema=False, 

1365 ) 

1366 ``` 

1367 """ 

1368 ), 

1369 ] = True, 

1370 default_response_class: Annotated[ 

1371 Type[Response], 

1372 Doc( 

1373 """ 

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

1375 router. 

1376 

1377 Read more in the 

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

1379 

1380 **Example** 

1381 

1382 ```python 

1383 from fastapi import FastAPI 

1384 from fastapi.responses import ORJSONResponse 

1385 

1386 from .internal import old_api 

1387 

1388 app = FastAPI() 

1389 

1390 app.include_router( 

1391 old_api.router, 

1392 default_response_class=ORJSONResponse, 

1393 ) 

1394 ``` 

1395 """ 

1396 ), 

1397 ] = Default(JSONResponse), 

1398 callbacks: Annotated[ 

1399 Optional[List[BaseRoute]], 

1400 Doc( 

1401 """ 

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

1403 

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

1405 directly. 

1406 

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

1408 

1409 Read more about it in the 

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

1411 """ 

1412 ), 

1413 ] = None, 

1414 generate_unique_id_function: Annotated[ 

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

1416 Doc( 

1417 """ 

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

1419 operations* shown in the generated OpenAPI. 

1420 

1421 This is particularly useful when automatically generating clients or 

1422 SDKs for your API. 

1423 

1424 Read more about it in the 

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

1426 """ 

1427 ), 

1428 ] = Default(generate_unique_id), 

1429 ) -> None: 

1430 """ 

1431 Include an `APIRouter` in the same app. 

1432 

1433 Read more about it in the 

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

1435 

1436 ## Example 

1437 

1438 ```python 

1439 from fastapi import FastAPI 

1440 

1441 from .users import users_router 

1442 

1443 app = FastAPI() 

1444 

1445 app.include_router(users_router) 

1446 ``` 

1447 """ 

1448 self.router.include_router( 3a Hb )gbk l m n o p Rb Sb , [ Tb Ub Vb 2b 3b 4b b 6b *gbt u v w x y )b *b - } +b ,b -b ^b _b `b c |b +gbC D E F G H nc oc . gb pc qc rc Ic Jc Kc d Mc ,gbL M N O P Q 2c 3c / qb 4c 5c 6c :c ;c =c e @c -gbU V W X Y Z gd hd : Ab id jd kd Bd Cd Dd

1449 router, 

1450 prefix=prefix, 

1451 tags=tags, 

1452 dependencies=dependencies, 

1453 responses=responses, 

1454 deprecated=deprecated, 

1455 include_in_schema=include_in_schema, 

1456 default_response_class=default_response_class, 

1457 callbacks=callbacks, 

1458 generate_unique_id_function=generate_unique_id_function, 

1459 ) 

1460 

1461 def get( 1abcde

1462 self, 

1463 path: Annotated[ 

1464 str, 

1465 Doc( 

1466 """ 

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

1468 

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

1470 """ 

1471 ), 

1472 ], 

1473 *, 

1474 response_model: Annotated[ 

1475 Any, 

1476 Doc( 

1477 """ 

1478 The type to use for the response. 

1479 

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

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

1482 etc. 

1483 

1484 It will be used for: 

1485 

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

1487 show it as the response (JSON Schema). 

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

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

1490 corresponding JSON. 

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

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

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

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

1495 that `password`. 

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

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

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

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

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

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

1502 

1503 Read more about it in the 

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

1505 """ 

1506 ), 

1507 ] = Default(None), 

1508 status_code: Annotated[ 

1509 Optional[int], 

1510 Doc( 

1511 """ 

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

1513 

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

1515 

1516 Read more about it in the 

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

1518 """ 

1519 ), 

1520 ] = None, 

1521 tags: Annotated[ 

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

1523 Doc( 

1524 """ 

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

1526 

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

1528 

1529 Read more about it in the 

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

1531 """ 

1532 ), 

1533 ] = None, 

1534 dependencies: Annotated[ 

1535 Optional[Sequence[Depends]], 

1536 Doc( 

1537 """ 

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

1539 *path operation*. 

1540 

1541 Read more about it in the 

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

1543 """ 

1544 ), 

1545 ] = None, 

1546 summary: Annotated[ 

1547 Optional[str], 

1548 Doc( 

1549 """ 

1550 A summary for the *path operation*. 

1551 

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

1553 

1554 Read more about it in the 

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

1556 """ 

1557 ), 

1558 ] = None, 

1559 description: Annotated[ 

1560 Optional[str], 

1561 Doc( 

1562 """ 

1563 A description for the *path operation*. 

1564 

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

1566 of the *path operation function*. 

1567 

1568 It can contain Markdown. 

1569 

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

1571 

1572 Read more about it in the 

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

1574 """ 

1575 ), 

1576 ] = None, 

1577 response_description: Annotated[ 

1578 str, 

1579 Doc( 

1580 """ 

1581 The description for the default response. 

1582 

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

1584 """ 

1585 ), 

1586 ] = "Successful Response", 

1587 responses: Annotated[ 

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

1589 Doc( 

1590 """ 

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

1592 

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

1594 """ 

1595 ), 

1596 ] = None, 

1597 deprecated: Annotated[ 

1598 Optional[bool], 

1599 Doc( 

1600 """ 

1601 Mark this *path operation* as deprecated. 

1602 

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

1604 """ 

1605 ), 

1606 ] = None, 

1607 operation_id: Annotated[ 

1608 Optional[str], 

1609 Doc( 

1610 """ 

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

1612 

1613 By default, it is generated automatically. 

1614 

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

1616 unique for the whole API. 

1617 

1618 You can customize the 

1619 operation ID generation with the parameter 

1620 `generate_unique_id_function` in the `FastAPI` class. 

1621 

1622 Read more about it in the 

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

1624 """ 

1625 ), 

1626 ] = None, 

1627 response_model_include: Annotated[ 

1628 Optional[IncEx], 

1629 Doc( 

1630 """ 

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

1632 response data. 

1633 

1634 Read more about it in the 

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

1636 """ 

1637 ), 

1638 ] = None, 

1639 response_model_exclude: Annotated[ 

1640 Optional[IncEx], 

1641 Doc( 

1642 """ 

1643 Configuration passed to Pydantic to exclude certain fields in the 

1644 response data. 

1645 

1646 Read more about it in the 

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

1648 """ 

1649 ), 

1650 ] = None, 

1651 response_model_by_alias: Annotated[ 

1652 bool, 

1653 Doc( 

1654 """ 

1655 Configuration passed to Pydantic to define if the response model 

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

1657 

1658 Read more about it in the 

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

1660 """ 

1661 ), 

1662 ] = True, 

1663 response_model_exclude_unset: Annotated[ 

1664 bool, 

1665 Doc( 

1666 """ 

1667 Configuration passed to Pydantic to define if the response data 

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

1669 have their default values. This is different from 

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

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

1672 as the default. 

1673 

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

1675 

1676 Read more about it in the 

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

1678 """ 

1679 ), 

1680 ] = False, 

1681 response_model_exclude_defaults: Annotated[ 

1682 bool, 

1683 Doc( 

1684 """ 

1685 Configuration passed to Pydantic to define if the response data 

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

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

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

1689 they will be excluded from the response. 

1690 

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

1692 

1693 Read more about it in the 

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

1695 """ 

1696 ), 

1697 ] = False, 

1698 response_model_exclude_none: Annotated[ 

1699 bool, 

1700 Doc( 

1701 """ 

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

1703 exclude fields set to `None`. 

1704 

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

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

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

1708 when it makes sense. 

1709 

1710 Read more about it in the 

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

1712 """ 

1713 ), 

1714 ] = False, 

1715 include_in_schema: Annotated[ 

1716 bool, 

1717 Doc( 

1718 """ 

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

1720 

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

1722 

1723 Read more about it in the 

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

1725 """ 

1726 ), 

1727 ] = True, 

1728 response_class: Annotated[ 

1729 Type[Response], 

1730 Doc( 

1731 """ 

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

1733 

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

1735 

1736 Read more about it in the 

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

1738 """ 

1739 ), 

1740 ] = Default(JSONResponse), 

1741 name: Annotated[ 

1742 Optional[str], 

1743 Doc( 

1744 """ 

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

1746 """ 

1747 ), 

1748 ] = None, 

1749 callbacks: Annotated[ 

1750 Optional[List[BaseRoute]], 

1751 Doc( 

1752 """ 

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

1754 

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

1756 directly. 

1757 

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

1759 

1760 Read more about it in the 

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

1762 """ 

1763 ), 

1764 ] = None, 

1765 openapi_extra: Annotated[ 

1766 Optional[Dict[str, Any]], 

1767 Doc( 

1768 """ 

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

1770 operation*. 

1771 

1772 Read more about it in the 

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

1774 """ 

1775 ), 

1776 ] = None, 

1777 generate_unique_id_function: Annotated[ 

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

1779 Doc( 

1780 """ 

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

1782 operations* shown in the generated OpenAPI. 

1783 

1784 This is particularly useful when automatically generating clients or 

1785 SDKs for your API. 

1786 

1787 Read more about it in the 

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

1789 """ 

1790 ), 

1791 ] = Default(generate_unique_id), 

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

1793 """ 

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

1795 

1796 ## Example 

1797 

1798 ```python 

1799 from fastapi import FastAPI 

1800 

1801 app = FastAPI() 

1802 

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

1804 def read_items(): 

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

1806 ``` 

1807 """ 

1808 return self.router.get( 3a sw .gbGb Kb Lb Mb Nb Ed Fd Gd Hd Id Jd Kd Ld Md Nd Od ; = ? q r @ Zd 0d 1d 2d 3d Qb , [ ] s f `e Wb 4d 5d Xb Yb Zb ^ 0b 1b b xw /gb5b 9b !b #b $b 6d 7d 8d 9d !d #d $d %d 'd (d )d _ ` { z A | @d [d ]d ^d _d (b - } ~ B g {e /b :b `d {d ;b =b ?b ab bb @b [b ]b c Cw :gb{b ac bc cc dc |d }d ~d ae be ce de ee fe ge he cb db eb I J fb ! jc kc lc se te ue ve we mc . gb hb K h |e vc wc xc yc xe ye ze zc Ac Bc ib jb kb lb Cc Dc Ec Gc Hc d Hw ;gbLc Pc Qc Rc Sc Ae Be Ce De Ee Fe Ge He Ie Je Ke mb nb ob R S pb ' Yc Zc 0c Ve We Xe Ye Ze 1c / qb rb T i }e !c #c $c %c 0e 1e 2e 'c (c )c sb tb ub vb *c +c ,c .c /c e Mw =gb?c ^c _c `c {c 3e 4e 5e 6e 7e 8e 9e !e #e $e %e wb xb yb 0 1 zb + cd dd ed ;e =e ?e @e [e fd : Ab Bb 2 j ~e od pd qd rd ]e ^e _e sd td ud Cb Db Eb Fb vd wd xd zd Ad

1809 path, 

1810 response_model=response_model, 

1811 status_code=status_code, 

1812 tags=tags, 

1813 dependencies=dependencies, 

1814 summary=summary, 

1815 description=description, 

1816 response_description=response_description, 

1817 responses=responses, 

1818 deprecated=deprecated, 

1819 operation_id=operation_id, 

1820 response_model_include=response_model_include, 

1821 response_model_exclude=response_model_exclude, 

1822 response_model_by_alias=response_model_by_alias, 

1823 response_model_exclude_unset=response_model_exclude_unset, 

1824 response_model_exclude_defaults=response_model_exclude_defaults, 

1825 response_model_exclude_none=response_model_exclude_none, 

1826 include_in_schema=include_in_schema, 

1827 response_class=response_class, 

1828 name=name, 

1829 callbacks=callbacks, 

1830 openapi_extra=openapi_extra, 

1831 generate_unique_id_function=generate_unique_id_function, 

1832 ) 

1833 

1834 def put( 1abcde

1835 self, 

1836 path: Annotated[ 

1837 str, 

1838 Doc( 

1839 """ 

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

1841 

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

1843 """ 

1844 ), 

1845 ], 

1846 *, 

1847 response_model: Annotated[ 

1848 Any, 

1849 Doc( 

1850 """ 

1851 The type to use for the response. 

1852 

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

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

1855 etc. 

1856 

1857 It will be used for: 

1858 

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

1860 show it as the response (JSON Schema). 

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

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

1863 corresponding JSON. 

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

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

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

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

1868 that `password`. 

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

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

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

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

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

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

1875 

1876 Read more about it in the 

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

1878 """ 

1879 ), 

1880 ] = Default(None), 

1881 status_code: Annotated[ 

1882 Optional[int], 

1883 Doc( 

1884 """ 

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

1886 

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

1888 

1889 Read more about it in the 

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

1891 """ 

1892 ), 

1893 ] = None, 

1894 tags: Annotated[ 

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

1896 Doc( 

1897 """ 

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

1899 

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

1901 

1902 Read more about it in the 

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

1904 """ 

1905 ), 

1906 ] = None, 

1907 dependencies: Annotated[ 

1908 Optional[Sequence[Depends]], 

1909 Doc( 

1910 """ 

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

1912 *path operation*. 

1913 

1914 Read more about it in the 

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

1916 """ 

1917 ), 

1918 ] = None, 

1919 summary: Annotated[ 

1920 Optional[str], 

1921 Doc( 

1922 """ 

1923 A summary for the *path operation*. 

1924 

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

1926 

1927 Read more about it in the 

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

1929 """ 

1930 ), 

1931 ] = None, 

1932 description: Annotated[ 

1933 Optional[str], 

1934 Doc( 

1935 """ 

1936 A description for the *path operation*. 

1937 

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

1939 of the *path operation function*. 

1940 

1941 It can contain Markdown. 

1942 

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

1944 

1945 Read more about it in the 

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

1947 """ 

1948 ), 

1949 ] = None, 

1950 response_description: Annotated[ 

1951 str, 

1952 Doc( 

1953 """ 

1954 The description for the default response. 

1955 

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

1957 """ 

1958 ), 

1959 ] = "Successful Response", 

1960 responses: Annotated[ 

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

1962 Doc( 

1963 """ 

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

1965 

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

1967 """ 

1968 ), 

1969 ] = None, 

1970 deprecated: Annotated[ 

1971 Optional[bool], 

1972 Doc( 

1973 """ 

1974 Mark this *path operation* as deprecated. 

1975 

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

1977 """ 

1978 ), 

1979 ] = None, 

1980 operation_id: Annotated[ 

1981 Optional[str], 

1982 Doc( 

1983 """ 

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

1985 

1986 By default, it is generated automatically. 

1987 

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

1989 unique for the whole API. 

1990 

1991 You can customize the 

1992 operation ID generation with the parameter 

1993 `generate_unique_id_function` in the `FastAPI` class. 

1994 

1995 Read more about it in the 

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

1997 """ 

1998 ), 

1999 ] = None, 

2000 response_model_include: Annotated[ 

2001 Optional[IncEx], 

2002 Doc( 

2003 """ 

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

2005 response data. 

2006 

2007 Read more about it in the 

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

2009 """ 

2010 ), 

2011 ] = None, 

2012 response_model_exclude: Annotated[ 

2013 Optional[IncEx], 

2014 Doc( 

2015 """ 

2016 Configuration passed to Pydantic to exclude certain fields in the 

2017 response data. 

2018 

2019 Read more about it in the 

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

2021 """ 

2022 ), 

2023 ] = None, 

2024 response_model_by_alias: Annotated[ 

2025 bool, 

2026 Doc( 

2027 """ 

2028 Configuration passed to Pydantic to define if the response model 

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

2030 

2031 Read more about it in the 

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

2033 """ 

2034 ), 

2035 ] = True, 

2036 response_model_exclude_unset: Annotated[ 

2037 bool, 

2038 Doc( 

2039 """ 

2040 Configuration passed to Pydantic to define if the response data 

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

2042 have their default values. This is different from 

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

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

2045 as the default. 

2046 

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

2048 

2049 Read more about it in the 

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

2051 """ 

2052 ), 

2053 ] = False, 

2054 response_model_exclude_defaults: Annotated[ 

2055 bool, 

2056 Doc( 

2057 """ 

2058 Configuration passed to Pydantic to define if the response data 

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

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

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

2062 they will be excluded from the response. 

2063 

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

2065 

2066 Read more about it in the 

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

2068 """ 

2069 ), 

2070 ] = False, 

2071 response_model_exclude_none: Annotated[ 

2072 bool, 

2073 Doc( 

2074 """ 

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

2076 exclude fields set to `None`. 

2077 

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

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

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

2081 when it makes sense. 

2082 

2083 Read more about it in the 

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

2085 """ 

2086 ), 

2087 ] = False, 

2088 include_in_schema: Annotated[ 

2089 bool, 

2090 Doc( 

2091 """ 

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

2093 

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

2095 

2096 Read more about it in the 

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

2098 """ 

2099 ), 

2100 ] = True, 

2101 response_class: Annotated[ 

2102 Type[Response], 

2103 Doc( 

2104 """ 

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

2106 

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

2108 

2109 Read more about it in the 

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

2111 """ 

2112 ), 

2113 ] = Default(JSONResponse), 

2114 name: Annotated[ 

2115 Optional[str], 

2116 Doc( 

2117 """ 

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

2119 """ 

2120 ), 

2121 ] = None, 

2122 callbacks: Annotated[ 

2123 Optional[List[BaseRoute]], 

2124 Doc( 

2125 """ 

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

2127 

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

2129 directly. 

2130 

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

2132 

2133 Read more about it in the 

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

2135 """ 

2136 ), 

2137 ] = None, 

2138 openapi_extra: Annotated[ 

2139 Optional[Dict[str, Any]], 

2140 Doc( 

2141 """ 

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

2143 operation*. 

2144 

2145 Read more about it in the 

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

2147 """ 

2148 ), 

2149 ] = None, 

2150 generate_unique_id_function: Annotated[ 

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

2152 Doc( 

2153 """ 

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

2155 operations* shown in the generated OpenAPI. 

2156 

2157 This is particularly useful when automatically generating clients or 

2158 SDKs for your API. 

2159 

2160 Read more about it in the 

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

2162 """ 

2163 ), 

2164 ] = Default(generate_unique_id), 

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

2166 """ 

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

2168 

2169 ## Example 

2170 

2171 ```python 

2172 from fastapi import FastAPI 

2173 from pydantic import BaseModel 

2174 

2175 class Item(BaseModel): 

2176 name: str 

2177 description: str | None = None 

2178 

2179 app = FastAPI() 

2180 

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

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

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

2184 ``` 

2185 """ 

2186 return self.router.put( 1abcde

2187 path, 

2188 response_model=response_model, 

2189 status_code=status_code, 

2190 tags=tags, 

2191 dependencies=dependencies, 

2192 summary=summary, 

2193 description=description, 

2194 response_description=response_description, 

2195 responses=responses, 

2196 deprecated=deprecated, 

2197 operation_id=operation_id, 

2198 response_model_include=response_model_include, 

2199 response_model_exclude=response_model_exclude, 

2200 response_model_by_alias=response_model_by_alias, 

2201 response_model_exclude_unset=response_model_exclude_unset, 

2202 response_model_exclude_defaults=response_model_exclude_defaults, 

2203 response_model_exclude_none=response_model_exclude_none, 

2204 include_in_schema=include_in_schema, 

2205 response_class=response_class, 

2206 name=name, 

2207 callbacks=callbacks, 

2208 openapi_extra=openapi_extra, 

2209 generate_unique_id_function=generate_unique_id_function, 

2210 ) 

2211 

2212 def post( 1abcde

2213 self, 

2214 path: Annotated[ 

2215 str, 

2216 Doc( 

2217 """ 

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

2219 

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

2221 """ 

2222 ), 

2223 ], 

2224 *, 

2225 response_model: Annotated[ 

2226 Any, 

2227 Doc( 

2228 """ 

2229 The type to use for the response. 

2230 

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

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

2233 etc. 

2234 

2235 It will be used for: 

2236 

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

2238 show it as the response (JSON Schema). 

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

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

2241 corresponding JSON. 

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

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

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

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

2246 that `password`. 

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

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

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

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

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

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

2253 

2254 Read more about it in the 

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

2256 """ 

2257 ), 

2258 ] = Default(None), 

2259 status_code: Annotated[ 

2260 Optional[int], 

2261 Doc( 

2262 """ 

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

2264 

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

2266 

2267 Read more about it in the 

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

2269 """ 

2270 ), 

2271 ] = None, 

2272 tags: Annotated[ 

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

2274 Doc( 

2275 """ 

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

2277 

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

2279 

2280 Read more about it in the 

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

2282 """ 

2283 ), 

2284 ] = None, 

2285 dependencies: Annotated[ 

2286 Optional[Sequence[Depends]], 

2287 Doc( 

2288 """ 

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

2290 *path operation*. 

2291 

2292 Read more about it in the 

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

2294 """ 

2295 ), 

2296 ] = None, 

2297 summary: Annotated[ 

2298 Optional[str], 

2299 Doc( 

2300 """ 

2301 A summary for the *path operation*. 

2302 

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

2304 

2305 Read more about it in the 

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

2307 """ 

2308 ), 

2309 ] = None, 

2310 description: Annotated[ 

2311 Optional[str], 

2312 Doc( 

2313 """ 

2314 A description for the *path operation*. 

2315 

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

2317 of the *path operation function*. 

2318 

2319 It can contain Markdown. 

2320 

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

2322 

2323 Read more about it in the 

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

2325 """ 

2326 ), 

2327 ] = None, 

2328 response_description: Annotated[ 

2329 str, 

2330 Doc( 

2331 """ 

2332 The description for the default response. 

2333 

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

2335 """ 

2336 ), 

2337 ] = "Successful Response", 

2338 responses: Annotated[ 

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

2340 Doc( 

2341 """ 

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

2343 

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

2345 """ 

2346 ), 

2347 ] = None, 

2348 deprecated: Annotated[ 

2349 Optional[bool], 

2350 Doc( 

2351 """ 

2352 Mark this *path operation* as deprecated. 

2353 

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

2355 """ 

2356 ), 

2357 ] = None, 

2358 operation_id: Annotated[ 

2359 Optional[str], 

2360 Doc( 

2361 """ 

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

2363 

2364 By default, it is generated automatically. 

2365 

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

2367 unique for the whole API. 

2368 

2369 You can customize the 

2370 operation ID generation with the parameter 

2371 `generate_unique_id_function` in the `FastAPI` class. 

2372 

2373 Read more about it in the 

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

2375 """ 

2376 ), 

2377 ] = None, 

2378 response_model_include: Annotated[ 

2379 Optional[IncEx], 

2380 Doc( 

2381 """ 

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

2383 response data. 

2384 

2385 Read more about it in the 

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

2387 """ 

2388 ), 

2389 ] = None, 

2390 response_model_exclude: Annotated[ 

2391 Optional[IncEx], 

2392 Doc( 

2393 """ 

2394 Configuration passed to Pydantic to exclude certain fields in the 

2395 response data. 

2396 

2397 Read more about it in the 

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

2399 """ 

2400 ), 

2401 ] = None, 

2402 response_model_by_alias: Annotated[ 

2403 bool, 

2404 Doc( 

2405 """ 

2406 Configuration passed to Pydantic to define if the response model 

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

2408 

2409 Read more about it in the 

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

2411 """ 

2412 ), 

2413 ] = True, 

2414 response_model_exclude_unset: Annotated[ 

2415 bool, 

2416 Doc( 

2417 """ 

2418 Configuration passed to Pydantic to define if the response data 

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

2420 have their default values. This is different from 

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

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

2423 as the default. 

2424 

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

2426 

2427 Read more about it in the 

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

2429 """ 

2430 ), 

2431 ] = False, 

2432 response_model_exclude_defaults: Annotated[ 

2433 bool, 

2434 Doc( 

2435 """ 

2436 Configuration passed to Pydantic to define if the response data 

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

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

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

2440 they will be excluded from the response. 

2441 

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

2443 

2444 Read more about it in the 

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

2446 """ 

2447 ), 

2448 ] = False, 

2449 response_model_exclude_none: Annotated[ 

2450 bool, 

2451 Doc( 

2452 """ 

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

2454 exclude fields set to `None`. 

2455 

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

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

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

2459 when it makes sense. 

2460 

2461 Read more about it in the 

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

2463 """ 

2464 ), 

2465 ] = False, 

2466 include_in_schema: Annotated[ 

2467 bool, 

2468 Doc( 

2469 """ 

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

2471 

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

2473 

2474 Read more about it in the 

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

2476 """ 

2477 ), 

2478 ] = True, 

2479 response_class: Annotated[ 

2480 Type[Response], 

2481 Doc( 

2482 """ 

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

2484 

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

2486 

2487 Read more about it in the 

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

2489 """ 

2490 ), 

2491 ] = Default(JSONResponse), 

2492 name: Annotated[ 

2493 Optional[str], 

2494 Doc( 

2495 """ 

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

2497 """ 

2498 ), 

2499 ] = None, 

2500 callbacks: Annotated[ 

2501 Optional[List[BaseRoute]], 

2502 Doc( 

2503 """ 

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

2505 

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

2507 directly. 

2508 

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

2510 

2511 Read more about it in the 

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

2513 """ 

2514 ), 

2515 ] = None, 

2516 openapi_extra: Annotated[ 

2517 Optional[Dict[str, Any]], 

2518 Doc( 

2519 """ 

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

2521 operation*. 

2522 

2523 Read more about it in the 

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

2525 """ 

2526 ), 

2527 ] = None, 

2528 generate_unique_id_function: Annotated[ 

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

2530 Doc( 

2531 """ 

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

2533 operations* shown in the generated OpenAPI. 

2534 

2535 This is particularly useful when automatically generating clients or 

2536 SDKs for your API. 

2537 

2538 Read more about it in the 

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

2540 """ 

2541 ), 

2542 ] = Default(generate_unique_id), 

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

2544 """ 

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

2546 

2547 ## Example 

2548 

2549 ```python 

2550 from fastapi import FastAPI 

2551 from pydantic import BaseModel 

2552 

2553 class Item(BaseModel): 

2554 name: str 

2555 description: str | None = None 

2556 

2557 app = FastAPI() 

2558 

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

2560 def create_item(item: Item): 

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

2562 ``` 

2563 """ 

2564 return self.router.post( 2a IbJbk 3 l m n o p 4 PdQdRdSdTdUdVdWdXdYd; = ? q r @ ObPb] s b 7b8bt 5 u v w x y 6 *d+d,d-d.d/d:d;d=d?d_ ` { z A | %b'b~ B .babc }b~bC 7 D E F G H 8 iejekelemeneoepeqerecbdbebI J fbecfcgc9 hcichbK sctcucibjbkbFcd NcOcL # M N O P Q $ LeMeNeOePeQeReSeTeUembnbobR S pbTcUcVc% WcXcrbT 7c8c9csbtbub-ce [c]cU ( V W X Y Z ) 'e(e)e*e+e,e-e.e/e:ewbxbyb0 1 zb|c}c~c* adbdBb2 ldmdndCbDbEbyd

2565 path, 

2566 response_model=response_model, 

2567 status_code=status_code, 

2568 tags=tags, 

2569 dependencies=dependencies, 

2570 summary=summary, 

2571 description=description, 

2572 response_description=response_description, 

2573 responses=responses, 

2574 deprecated=deprecated, 

2575 operation_id=operation_id, 

2576 response_model_include=response_model_include, 

2577 response_model_exclude=response_model_exclude, 

2578 response_model_by_alias=response_model_by_alias, 

2579 response_model_exclude_unset=response_model_exclude_unset, 

2580 response_model_exclude_defaults=response_model_exclude_defaults, 

2581 response_model_exclude_none=response_model_exclude_none, 

2582 include_in_schema=include_in_schema, 

2583 response_class=response_class, 

2584 name=name, 

2585 callbacks=callbacks, 

2586 openapi_extra=openapi_extra, 

2587 generate_unique_id_function=generate_unique_id_function, 

2588 ) 

2589 

2590 def delete( 1abcde

2591 self, 

2592 path: Annotated[ 

2593 str, 

2594 Doc( 

2595 """ 

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

2597 

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

2599 """ 

2600 ), 

2601 ], 

2602 *, 

2603 response_model: Annotated[ 

2604 Any, 

2605 Doc( 

2606 """ 

2607 The type to use for the response. 

2608 

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

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

2611 etc. 

2612 

2613 It will be used for: 

2614 

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

2616 show it as the response (JSON Schema). 

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

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

2619 corresponding JSON. 

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

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

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

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

2624 that `password`. 

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

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

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

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

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

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

2631 

2632 Read more about it in the 

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

2634 """ 

2635 ), 

2636 ] = Default(None), 

2637 status_code: Annotated[ 

2638 Optional[int], 

2639 Doc( 

2640 """ 

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

2642 

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

2644 

2645 Read more about it in the 

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

2647 """ 

2648 ), 

2649 ] = None, 

2650 tags: Annotated[ 

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

2652 Doc( 

2653 """ 

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

2655 

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

2657 

2658 Read more about it in the 

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

2660 """ 

2661 ), 

2662 ] = None, 

2663 dependencies: Annotated[ 

2664 Optional[Sequence[Depends]], 

2665 Doc( 

2666 """ 

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

2668 *path operation*. 

2669 

2670 Read more about it in the 

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

2672 """ 

2673 ), 

2674 ] = None, 

2675 summary: Annotated[ 

2676 Optional[str], 

2677 Doc( 

2678 """ 

2679 A summary for the *path operation*. 

2680 

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

2682 

2683 Read more about it in the 

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

2685 """ 

2686 ), 

2687 ] = None, 

2688 description: Annotated[ 

2689 Optional[str], 

2690 Doc( 

2691 """ 

2692 A description for the *path operation*. 

2693 

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

2695 of the *path operation function*. 

2696 

2697 It can contain Markdown. 

2698 

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

2700 

2701 Read more about it in the 

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

2703 """ 

2704 ), 

2705 ] = None, 

2706 response_description: Annotated[ 

2707 str, 

2708 Doc( 

2709 """ 

2710 The description for the default response. 

2711 

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

2713 """ 

2714 ), 

2715 ] = "Successful Response", 

2716 responses: Annotated[ 

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

2718 Doc( 

2719 """ 

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

2721 

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

2723 """ 

2724 ), 

2725 ] = None, 

2726 deprecated: Annotated[ 

2727 Optional[bool], 

2728 Doc( 

2729 """ 

2730 Mark this *path operation* as deprecated. 

2731 

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

2733 """ 

2734 ), 

2735 ] = None, 

2736 operation_id: Annotated[ 

2737 Optional[str], 

2738 Doc( 

2739 """ 

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

2741 

2742 By default, it is generated automatically. 

2743 

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

2745 unique for the whole API. 

2746 

2747 You can customize the 

2748 operation ID generation with the parameter 

2749 `generate_unique_id_function` in the `FastAPI` class. 

2750 

2751 Read more about it in the 

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

2753 """ 

2754 ), 

2755 ] = None, 

2756 response_model_include: Annotated[ 

2757 Optional[IncEx], 

2758 Doc( 

2759 """ 

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

2761 response data. 

2762 

2763 Read more about it in the 

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

2765 """ 

2766 ), 

2767 ] = None, 

2768 response_model_exclude: Annotated[ 

2769 Optional[IncEx], 

2770 Doc( 

2771 """ 

2772 Configuration passed to Pydantic to exclude certain fields in the 

2773 response data. 

2774 

2775 Read more about it in the 

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

2777 """ 

2778 ), 

2779 ] = None, 

2780 response_model_by_alias: Annotated[ 

2781 bool, 

2782 Doc( 

2783 """ 

2784 Configuration passed to Pydantic to define if the response model 

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

2786 

2787 Read more about it in the 

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

2789 """ 

2790 ), 

2791 ] = True, 

2792 response_model_exclude_unset: Annotated[ 

2793 bool, 

2794 Doc( 

2795 """ 

2796 Configuration passed to Pydantic to define if the response data 

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

2798 have their default values. This is different from 

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

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

2801 as the default. 

2802 

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

2804 

2805 Read more about it in the 

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

2807 """ 

2808 ), 

2809 ] = False, 

2810 response_model_exclude_defaults: Annotated[ 

2811 bool, 

2812 Doc( 

2813 """ 

2814 Configuration passed to Pydantic to define if the response data 

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

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

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

2818 they will be excluded from the response. 

2819 

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

2821 

2822 Read more about it in the 

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

2824 """ 

2825 ), 

2826 ] = False, 

2827 response_model_exclude_none: Annotated[ 

2828 bool, 

2829 Doc( 

2830 """ 

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

2832 exclude fields set to `None`. 

2833 

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

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

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

2837 when it makes sense. 

2838 

2839 Read more about it in the 

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

2841 """ 

2842 ), 

2843 ] = False, 

2844 include_in_schema: Annotated[ 

2845 bool, 

2846 Doc( 

2847 """ 

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

2849 

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

2851 

2852 Read more about it in the 

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

2854 """ 

2855 ), 

2856 ] = True, 

2857 response_class: Annotated[ 

2858 Type[Response], 

2859 Doc( 

2860 """ 

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

2862 

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

2864 

2865 Read more about it in the 

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

2867 """ 

2868 ), 

2869 ] = Default(JSONResponse), 

2870 name: Annotated[ 

2871 Optional[str], 

2872 Doc( 

2873 """ 

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

2875 """ 

2876 ), 

2877 ] = None, 

2878 callbacks: Annotated[ 

2879 Optional[List[BaseRoute]], 

2880 Doc( 

2881 """ 

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

2883 

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

2885 directly. 

2886 

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

2888 

2889 Read more about it in the 

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

2891 """ 

2892 ), 

2893 ] = None, 

2894 openapi_extra: Annotated[ 

2895 Optional[Dict[str, Any]], 

2896 Doc( 

2897 """ 

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

2899 operation*. 

2900 

2901 Read more about it in the 

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

2903 """ 

2904 ), 

2905 ] = None, 

2906 generate_unique_id_function: Annotated[ 

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

2908 Doc( 

2909 """ 

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

2911 operations* shown in the generated OpenAPI. 

2912 

2913 This is particularly useful when automatically generating clients or 

2914 SDKs for your API. 

2915 

2916 Read more about it in the 

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

2918 """ 

2919 ), 

2920 ] = Default(generate_unique_id), 

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

2922 """ 

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

2924 

2925 ## Example 

2926 

2927 ```python 

2928 from fastapi import FastAPI 

2929 

2930 app = FastAPI() 

2931 

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

2933 def delete_item(item_id: str): 

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

2935 ``` 

2936 """ 

2937 return self.router.delete( 1abcde

2938 path, 

2939 response_model=response_model, 

2940 status_code=status_code, 

2941 tags=tags, 

2942 dependencies=dependencies, 

2943 summary=summary, 

2944 description=description, 

2945 response_description=response_description, 

2946 responses=responses, 

2947 deprecated=deprecated, 

2948 operation_id=operation_id, 

2949 response_model_include=response_model_include, 

2950 response_model_exclude=response_model_exclude, 

2951 response_model_by_alias=response_model_by_alias, 

2952 response_model_exclude_unset=response_model_exclude_unset, 

2953 response_model_exclude_defaults=response_model_exclude_defaults, 

2954 response_model_exclude_none=response_model_exclude_none, 

2955 include_in_schema=include_in_schema, 

2956 response_class=response_class, 

2957 name=name, 

2958 callbacks=callbacks, 

2959 openapi_extra=openapi_extra, 

2960 generate_unique_id_function=generate_unique_id_function, 

2961 ) 

2962 

2963 def options( 1abcde

2964 self, 

2965 path: Annotated[ 

2966 str, 

2967 Doc( 

2968 """ 

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

2970 

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

2972 """ 

2973 ), 

2974 ], 

2975 *, 

2976 response_model: Annotated[ 

2977 Any, 

2978 Doc( 

2979 """ 

2980 The type to use for the response. 

2981 

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

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

2984 etc. 

2985 

2986 It will be used for: 

2987 

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

2989 show it as the response (JSON Schema). 

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

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

2992 corresponding JSON. 

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

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

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

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

2997 that `password`. 

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

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

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

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

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

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

3004 

3005 Read more about it in the 

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

3007 """ 

3008 ), 

3009 ] = Default(None), 

3010 status_code: Annotated[ 

3011 Optional[int], 

3012 Doc( 

3013 """ 

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

3015 

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

3017 

3018 Read more about it in the 

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

3020 """ 

3021 ), 

3022 ] = None, 

3023 tags: Annotated[ 

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

3025 Doc( 

3026 """ 

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

3028 

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

3030 

3031 Read more about it in the 

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

3033 """ 

3034 ), 

3035 ] = None, 

3036 dependencies: Annotated[ 

3037 Optional[Sequence[Depends]], 

3038 Doc( 

3039 """ 

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

3041 *path operation*. 

3042 

3043 Read more about it in the 

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

3045 """ 

3046 ), 

3047 ] = None, 

3048 summary: Annotated[ 

3049 Optional[str], 

3050 Doc( 

3051 """ 

3052 A summary for the *path operation*. 

3053 

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

3055 

3056 Read more about it in the 

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

3058 """ 

3059 ), 

3060 ] = None, 

3061 description: Annotated[ 

3062 Optional[str], 

3063 Doc( 

3064 """ 

3065 A description for the *path operation*. 

3066 

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

3068 of the *path operation function*. 

3069 

3070 It can contain Markdown. 

3071 

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

3073 

3074 Read more about it in the 

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

3076 """ 

3077 ), 

3078 ] = None, 

3079 response_description: Annotated[ 

3080 str, 

3081 Doc( 

3082 """ 

3083 The description for the default response. 

3084 

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

3086 """ 

3087 ), 

3088 ] = "Successful Response", 

3089 responses: Annotated[ 

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

3091 Doc( 

3092 """ 

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

3094 

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

3096 """ 

3097 ), 

3098 ] = None, 

3099 deprecated: Annotated[ 

3100 Optional[bool], 

3101 Doc( 

3102 """ 

3103 Mark this *path operation* as deprecated. 

3104 

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

3106 """ 

3107 ), 

3108 ] = None, 

3109 operation_id: Annotated[ 

3110 Optional[str], 

3111 Doc( 

3112 """ 

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

3114 

3115 By default, it is generated automatically. 

3116 

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

3118 unique for the whole API. 

3119 

3120 You can customize the 

3121 operation ID generation with the parameter 

3122 `generate_unique_id_function` in the `FastAPI` class. 

3123 

3124 Read more about it in the 

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

3126 """ 

3127 ), 

3128 ] = None, 

3129 response_model_include: Annotated[ 

3130 Optional[IncEx], 

3131 Doc( 

3132 """ 

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

3134 response data. 

3135 

3136 Read more about it in the 

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

3138 """ 

3139 ), 

3140 ] = None, 

3141 response_model_exclude: Annotated[ 

3142 Optional[IncEx], 

3143 Doc( 

3144 """ 

3145 Configuration passed to Pydantic to exclude certain fields in the 

3146 response data. 

3147 

3148 Read more about it in the 

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

3150 """ 

3151 ), 

3152 ] = None, 

3153 response_model_by_alias: Annotated[ 

3154 bool, 

3155 Doc( 

3156 """ 

3157 Configuration passed to Pydantic to define if the response model 

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

3159 

3160 Read more about it in the 

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

3162 """ 

3163 ), 

3164 ] = True, 

3165 response_model_exclude_unset: Annotated[ 

3166 bool, 

3167 Doc( 

3168 """ 

3169 Configuration passed to Pydantic to define if the response data 

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

3171 have their default values. This is different from 

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

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

3174 as the default. 

3175 

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

3177 

3178 Read more about it in the 

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

3180 """ 

3181 ), 

3182 ] = False, 

3183 response_model_exclude_defaults: Annotated[ 

3184 bool, 

3185 Doc( 

3186 """ 

3187 Configuration passed to Pydantic to define if the response data 

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

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

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

3191 they will be excluded from the response. 

3192 

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

3194 

3195 Read more about it in the 

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

3197 """ 

3198 ), 

3199 ] = False, 

3200 response_model_exclude_none: Annotated[ 

3201 bool, 

3202 Doc( 

3203 """ 

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

3205 exclude fields set to `None`. 

3206 

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

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

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

3210 when it makes sense. 

3211 

3212 Read more about it in the 

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

3214 """ 

3215 ), 

3216 ] = False, 

3217 include_in_schema: Annotated[ 

3218 bool, 

3219 Doc( 

3220 """ 

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

3222 

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

3224 

3225 Read more about it in the 

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

3227 """ 

3228 ), 

3229 ] = True, 

3230 response_class: Annotated[ 

3231 Type[Response], 

3232 Doc( 

3233 """ 

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

3235 

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

3237 

3238 Read more about it in the 

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

3240 """ 

3241 ), 

3242 ] = Default(JSONResponse), 

3243 name: Annotated[ 

3244 Optional[str], 

3245 Doc( 

3246 """ 

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

3248 """ 

3249 ), 

3250 ] = None, 

3251 callbacks: Annotated[ 

3252 Optional[List[BaseRoute]], 

3253 Doc( 

3254 """ 

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

3256 

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

3258 directly. 

3259 

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

3261 

3262 Read more about it in the 

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

3264 """ 

3265 ), 

3266 ] = None, 

3267 openapi_extra: Annotated[ 

3268 Optional[Dict[str, Any]], 

3269 Doc( 

3270 """ 

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

3272 operation*. 

3273 

3274 Read more about it in the 

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

3276 """ 

3277 ), 

3278 ] = None, 

3279 generate_unique_id_function: Annotated[ 

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

3281 Doc( 

3282 """ 

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

3284 operations* shown in the generated OpenAPI. 

3285 

3286 This is particularly useful when automatically generating clients or 

3287 SDKs for your API. 

3288 

3289 Read more about it in the 

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

3291 """ 

3292 ), 

3293 ] = Default(generate_unique_id), 

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

3295 """ 

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

3297 

3298 ## Example 

3299 

3300 ```python 

3301 from fastapi import FastAPI 

3302 

3303 app = FastAPI() 

3304 

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

3306 def get_item_options(): 

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

3308 ``` 

3309 """ 

3310 return self.router.options( 1abcde

3311 path, 

3312 response_model=response_model, 

3313 status_code=status_code, 

3314 tags=tags, 

3315 dependencies=dependencies, 

3316 summary=summary, 

3317 description=description, 

3318 response_description=response_description, 

3319 responses=responses, 

3320 deprecated=deprecated, 

3321 operation_id=operation_id, 

3322 response_model_include=response_model_include, 

3323 response_model_exclude=response_model_exclude, 

3324 response_model_by_alias=response_model_by_alias, 

3325 response_model_exclude_unset=response_model_exclude_unset, 

3326 response_model_exclude_defaults=response_model_exclude_defaults, 

3327 response_model_exclude_none=response_model_exclude_none, 

3328 include_in_schema=include_in_schema, 

3329 response_class=response_class, 

3330 name=name, 

3331 callbacks=callbacks, 

3332 openapi_extra=openapi_extra, 

3333 generate_unique_id_function=generate_unique_id_function, 

3334 ) 

3335 

3336 def head( 1abcde

3337 self, 

3338 path: Annotated[ 

3339 str, 

3340 Doc( 

3341 """ 

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

3343 

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

3345 """ 

3346 ), 

3347 ], 

3348 *, 

3349 response_model: Annotated[ 

3350 Any, 

3351 Doc( 

3352 """ 

3353 The type to use for the response. 

3354 

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

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

3357 etc. 

3358 

3359 It will be used for: 

3360 

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

3362 show it as the response (JSON Schema). 

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

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

3365 corresponding JSON. 

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

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

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

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

3370 that `password`. 

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

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

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

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

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

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

3377 

3378 Read more about it in the 

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

3380 """ 

3381 ), 

3382 ] = Default(None), 

3383 status_code: Annotated[ 

3384 Optional[int], 

3385 Doc( 

3386 """ 

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

3388 

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

3390 

3391 Read more about it in the 

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

3393 """ 

3394 ), 

3395 ] = None, 

3396 tags: Annotated[ 

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

3398 Doc( 

3399 """ 

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

3401 

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

3403 

3404 Read more about it in the 

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

3406 """ 

3407 ), 

3408 ] = None, 

3409 dependencies: Annotated[ 

3410 Optional[Sequence[Depends]], 

3411 Doc( 

3412 """ 

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

3414 *path operation*. 

3415 

3416 Read more about it in the 

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

3418 """ 

3419 ), 

3420 ] = None, 

3421 summary: Annotated[ 

3422 Optional[str], 

3423 Doc( 

3424 """ 

3425 A summary for the *path operation*. 

3426 

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

3428 

3429 Read more about it in the 

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

3431 """ 

3432 ), 

3433 ] = None, 

3434 description: Annotated[ 

3435 Optional[str], 

3436 Doc( 

3437 """ 

3438 A description for the *path operation*. 

3439 

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

3441 of the *path operation function*. 

3442 

3443 It can contain Markdown. 

3444 

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

3446 

3447 Read more about it in the 

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

3449 """ 

3450 ), 

3451 ] = None, 

3452 response_description: Annotated[ 

3453 str, 

3454 Doc( 

3455 """ 

3456 The description for the default response. 

3457 

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

3459 """ 

3460 ), 

3461 ] = "Successful Response", 

3462 responses: Annotated[ 

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

3464 Doc( 

3465 """ 

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

3467 

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

3469 """ 

3470 ), 

3471 ] = None, 

3472 deprecated: Annotated[ 

3473 Optional[bool], 

3474 Doc( 

3475 """ 

3476 Mark this *path operation* as deprecated. 

3477 

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

3479 """ 

3480 ), 

3481 ] = None, 

3482 operation_id: Annotated[ 

3483 Optional[str], 

3484 Doc( 

3485 """ 

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

3487 

3488 By default, it is generated automatically. 

3489 

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

3491 unique for the whole API. 

3492 

3493 You can customize the 

3494 operation ID generation with the parameter 

3495 `generate_unique_id_function` in the `FastAPI` class. 

3496 

3497 Read more about it in the 

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

3499 """ 

3500 ), 

3501 ] = None, 

3502 response_model_include: Annotated[ 

3503 Optional[IncEx], 

3504 Doc( 

3505 """ 

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

3507 response data. 

3508 

3509 Read more about it in the 

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

3511 """ 

3512 ), 

3513 ] = None, 

3514 response_model_exclude: Annotated[ 

3515 Optional[IncEx], 

3516 Doc( 

3517 """ 

3518 Configuration passed to Pydantic to exclude certain fields in the 

3519 response data. 

3520 

3521 Read more about it in the 

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

3523 """ 

3524 ), 

3525 ] = None, 

3526 response_model_by_alias: Annotated[ 

3527 bool, 

3528 Doc( 

3529 """ 

3530 Configuration passed to Pydantic to define if the response model 

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

3532 

3533 Read more about it in the 

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

3535 """ 

3536 ), 

3537 ] = True, 

3538 response_model_exclude_unset: Annotated[ 

3539 bool, 

3540 Doc( 

3541 """ 

3542 Configuration passed to Pydantic to define if the response data 

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

3544 have their default values. This is different from 

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

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

3547 as the default. 

3548 

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

3550 

3551 Read more about it in the 

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

3553 """ 

3554 ), 

3555 ] = False, 

3556 response_model_exclude_defaults: Annotated[ 

3557 bool, 

3558 Doc( 

3559 """ 

3560 Configuration passed to Pydantic to define if the response data 

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

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

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

3564 they will be excluded from the response. 

3565 

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

3567 

3568 Read more about it in the 

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

3570 """ 

3571 ), 

3572 ] = False, 

3573 response_model_exclude_none: Annotated[ 

3574 bool, 

3575 Doc( 

3576 """ 

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

3578 exclude fields set to `None`. 

3579 

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

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

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

3583 when it makes sense. 

3584 

3585 Read more about it in the 

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

3587 """ 

3588 ), 

3589 ] = False, 

3590 include_in_schema: Annotated[ 

3591 bool, 

3592 Doc( 

3593 """ 

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

3595 

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

3597 

3598 Read more about it in the 

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

3600 """ 

3601 ), 

3602 ] = True, 

3603 response_class: Annotated[ 

3604 Type[Response], 

3605 Doc( 

3606 """ 

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

3608 

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

3610 

3611 Read more about it in the 

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

3613 """ 

3614 ), 

3615 ] = Default(JSONResponse), 

3616 name: Annotated[ 

3617 Optional[str], 

3618 Doc( 

3619 """ 

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

3621 """ 

3622 ), 

3623 ] = None, 

3624 callbacks: Annotated[ 

3625 Optional[List[BaseRoute]], 

3626 Doc( 

3627 """ 

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

3629 

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

3631 directly. 

3632 

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

3634 

3635 Read more about it in the 

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

3637 """ 

3638 ), 

3639 ] = None, 

3640 openapi_extra: Annotated[ 

3641 Optional[Dict[str, Any]], 

3642 Doc( 

3643 """ 

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

3645 operation*. 

3646 

3647 Read more about it in the 

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

3649 """ 

3650 ), 

3651 ] = None, 

3652 generate_unique_id_function: Annotated[ 

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

3654 Doc( 

3655 """ 

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

3657 operations* shown in the generated OpenAPI. 

3658 

3659 This is particularly useful when automatically generating clients or 

3660 SDKs for your API. 

3661 

3662 Read more about it in the 

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

3664 """ 

3665 ), 

3666 ] = Default(generate_unique_id), 

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

3668 """ 

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

3670 

3671 ## Example 

3672 

3673 ```python 

3674 from fastapi import FastAPI, Response 

3675 

3676 app = FastAPI() 

3677 

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

3679 def get_items_headers(response: Response): 

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

3681 ``` 

3682 """ 

3683 return self.router.head( 1abcde

3684 path, 

3685 response_model=response_model, 

3686 status_code=status_code, 

3687 tags=tags, 

3688 dependencies=dependencies, 

3689 summary=summary, 

3690 description=description, 

3691 response_description=response_description, 

3692 responses=responses, 

3693 deprecated=deprecated, 

3694 operation_id=operation_id, 

3695 response_model_include=response_model_include, 

3696 response_model_exclude=response_model_exclude, 

3697 response_model_by_alias=response_model_by_alias, 

3698 response_model_exclude_unset=response_model_exclude_unset, 

3699 response_model_exclude_defaults=response_model_exclude_defaults, 

3700 response_model_exclude_none=response_model_exclude_none, 

3701 include_in_schema=include_in_schema, 

3702 response_class=response_class, 

3703 name=name, 

3704 callbacks=callbacks, 

3705 openapi_extra=openapi_extra, 

3706 generate_unique_id_function=generate_unique_id_function, 

3707 ) 

3708 

3709 def patch( 1abcde

3710 self, 

3711 path: Annotated[ 

3712 str, 

3713 Doc( 

3714 """ 

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

3716 

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

3718 """ 

3719 ), 

3720 ], 

3721 *, 

3722 response_model: Annotated[ 

3723 Any, 

3724 Doc( 

3725 """ 

3726 The type to use for the response. 

3727 

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

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

3730 etc. 

3731 

3732 It will be used for: 

3733 

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

3735 show it as the response (JSON Schema). 

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

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

3738 corresponding JSON. 

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

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

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

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

3743 that `password`. 

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

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

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

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

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

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

3750 

3751 Read more about it in the 

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

3753 """ 

3754 ), 

3755 ] = Default(None), 

3756 status_code: Annotated[ 

3757 Optional[int], 

3758 Doc( 

3759 """ 

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

3761 

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

3763 

3764 Read more about it in the 

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

3766 """ 

3767 ), 

3768 ] = None, 

3769 tags: Annotated[ 

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

3771 Doc( 

3772 """ 

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

3774 

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

3776 

3777 Read more about it in the 

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

3779 """ 

3780 ), 

3781 ] = None, 

3782 dependencies: Annotated[ 

3783 Optional[Sequence[Depends]], 

3784 Doc( 

3785 """ 

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

3787 *path operation*. 

3788 

3789 Read more about it in the 

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

3791 """ 

3792 ), 

3793 ] = None, 

3794 summary: Annotated[ 

3795 Optional[str], 

3796 Doc( 

3797 """ 

3798 A summary for the *path operation*. 

3799 

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

3801 

3802 Read more about it in the 

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

3804 """ 

3805 ), 

3806 ] = None, 

3807 description: Annotated[ 

3808 Optional[str], 

3809 Doc( 

3810 """ 

3811 A description for the *path operation*. 

3812 

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

3814 of the *path operation function*. 

3815 

3816 It can contain Markdown. 

3817 

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

3819 

3820 Read more about it in the 

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

3822 """ 

3823 ), 

3824 ] = None, 

3825 response_description: Annotated[ 

3826 str, 

3827 Doc( 

3828 """ 

3829 The description for the default response. 

3830 

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

3832 """ 

3833 ), 

3834 ] = "Successful Response", 

3835 responses: Annotated[ 

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

3837 Doc( 

3838 """ 

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

3840 

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

3842 """ 

3843 ), 

3844 ] = None, 

3845 deprecated: Annotated[ 

3846 Optional[bool], 

3847 Doc( 

3848 """ 

3849 Mark this *path operation* as deprecated. 

3850 

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

3852 """ 

3853 ), 

3854 ] = None, 

3855 operation_id: Annotated[ 

3856 Optional[str], 

3857 Doc( 

3858 """ 

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

3860 

3861 By default, it is generated automatically. 

3862 

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

3864 unique for the whole API. 

3865 

3866 You can customize the 

3867 operation ID generation with the parameter 

3868 `generate_unique_id_function` in the `FastAPI` class. 

3869 

3870 Read more about it in the 

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

3872 """ 

3873 ), 

3874 ] = None, 

3875 response_model_include: Annotated[ 

3876 Optional[IncEx], 

3877 Doc( 

3878 """ 

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

3880 response data. 

3881 

3882 Read more about it in the 

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

3884 """ 

3885 ), 

3886 ] = None, 

3887 response_model_exclude: Annotated[ 

3888 Optional[IncEx], 

3889 Doc( 

3890 """ 

3891 Configuration passed to Pydantic to exclude certain fields in the 

3892 response data. 

3893 

3894 Read more about it in the 

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

3896 """ 

3897 ), 

3898 ] = None, 

3899 response_model_by_alias: Annotated[ 

3900 bool, 

3901 Doc( 

3902 """ 

3903 Configuration passed to Pydantic to define if the response model 

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

3905 

3906 Read more about it in the 

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

3908 """ 

3909 ), 

3910 ] = True, 

3911 response_model_exclude_unset: Annotated[ 

3912 bool, 

3913 Doc( 

3914 """ 

3915 Configuration passed to Pydantic to define if the response data 

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

3917 have their default values. This is different from 

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

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

3920 as the default. 

3921 

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

3923 

3924 Read more about it in the 

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

3926 """ 

3927 ), 

3928 ] = False, 

3929 response_model_exclude_defaults: Annotated[ 

3930 bool, 

3931 Doc( 

3932 """ 

3933 Configuration passed to Pydantic to define if the response data 

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

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

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

3937 they will be excluded from the response. 

3938 

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

3940 

3941 Read more about it in the 

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

3943 """ 

3944 ), 

3945 ] = False, 

3946 response_model_exclude_none: Annotated[ 

3947 bool, 

3948 Doc( 

3949 """ 

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

3951 exclude fields set to `None`. 

3952 

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

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

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

3956 when it makes sense. 

3957 

3958 Read more about it in the 

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

3960 """ 

3961 ), 

3962 ] = False, 

3963 include_in_schema: Annotated[ 

3964 bool, 

3965 Doc( 

3966 """ 

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

3968 

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

3970 

3971 Read more about it in the 

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

3973 """ 

3974 ), 

3975 ] = True, 

3976 response_class: Annotated[ 

3977 Type[Response], 

3978 Doc( 

3979 """ 

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

3981 

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

3983 

3984 Read more about it in the 

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

3986 """ 

3987 ), 

3988 ] = Default(JSONResponse), 

3989 name: Annotated[ 

3990 Optional[str], 

3991 Doc( 

3992 """ 

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

3994 """ 

3995 ), 

3996 ] = None, 

3997 callbacks: Annotated[ 

3998 Optional[List[BaseRoute]], 

3999 Doc( 

4000 """ 

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

4002 

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

4004 directly. 

4005 

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

4007 

4008 Read more about it in the 

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

4010 """ 

4011 ), 

4012 ] = None, 

4013 openapi_extra: Annotated[ 

4014 Optional[Dict[str, Any]], 

4015 Doc( 

4016 """ 

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

4018 operation*. 

4019 

4020 Read more about it in the 

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

4022 """ 

4023 ), 

4024 ] = None, 

4025 generate_unique_id_function: Annotated[ 

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

4027 Doc( 

4028 """ 

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

4030 operations* shown in the generated OpenAPI. 

4031 

4032 This is particularly useful when automatically generating clients or 

4033 SDKs for your API. 

4034 

4035 Read more about it in the 

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

4037 """ 

4038 ), 

4039 ] = Default(generate_unique_id), 

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

4041 """ 

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

4043 

4044 ## Example 

4045 

4046 ```python 

4047 from fastapi import FastAPI 

4048 from pydantic import BaseModel 

4049 

4050 class Item(BaseModel): 

4051 name: str 

4052 description: str | None = None 

4053 

4054 app = FastAPI() 

4055 

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

4057 def update_item(item: Item): 

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

4059 ``` 

4060 """ 

4061 return self.router.patch( 1abcde

4062 path, 

4063 response_model=response_model, 

4064 status_code=status_code, 

4065 tags=tags, 

4066 dependencies=dependencies, 

4067 summary=summary, 

4068 description=description, 

4069 response_description=response_description, 

4070 responses=responses, 

4071 deprecated=deprecated, 

4072 operation_id=operation_id, 

4073 response_model_include=response_model_include, 

4074 response_model_exclude=response_model_exclude, 

4075 response_model_by_alias=response_model_by_alias, 

4076 response_model_exclude_unset=response_model_exclude_unset, 

4077 response_model_exclude_defaults=response_model_exclude_defaults, 

4078 response_model_exclude_none=response_model_exclude_none, 

4079 include_in_schema=include_in_schema, 

4080 response_class=response_class, 

4081 name=name, 

4082 callbacks=callbacks, 

4083 openapi_extra=openapi_extra, 

4084 generate_unique_id_function=generate_unique_id_function, 

4085 ) 

4086 

4087 def trace( 1abcde

4088 self, 

4089 path: Annotated[ 

4090 str, 

4091 Doc( 

4092 """ 

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

4094 

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

4096 """ 

4097 ), 

4098 ], 

4099 *, 

4100 response_model: Annotated[ 

4101 Any, 

4102 Doc( 

4103 """ 

4104 The type to use for the response. 

4105 

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

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

4108 etc. 

4109 

4110 It will be used for: 

4111 

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

4113 show it as the response (JSON Schema). 

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

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

4116 corresponding JSON. 

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

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

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

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

4121 that `password`. 

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

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

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

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

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

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

4128 

4129 Read more about it in the 

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

4131 """ 

4132 ), 

4133 ] = Default(None), 

4134 status_code: Annotated[ 

4135 Optional[int], 

4136 Doc( 

4137 """ 

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

4139 

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

4141 

4142 Read more about it in the 

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

4144 """ 

4145 ), 

4146 ] = None, 

4147 tags: Annotated[ 

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

4149 Doc( 

4150 """ 

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

4152 

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

4154 

4155 Read more about it in the 

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

4157 """ 

4158 ), 

4159 ] = None, 

4160 dependencies: Annotated[ 

4161 Optional[Sequence[Depends]], 

4162 Doc( 

4163 """ 

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

4165 *path operation*. 

4166 

4167 Read more about it in the 

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

4169 """ 

4170 ), 

4171 ] = None, 

4172 summary: Annotated[ 

4173 Optional[str], 

4174 Doc( 

4175 """ 

4176 A summary for the *path operation*. 

4177 

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

4179 

4180 Read more about it in the 

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

4182 """ 

4183 ), 

4184 ] = None, 

4185 description: Annotated[ 

4186 Optional[str], 

4187 Doc( 

4188 """ 

4189 A description for the *path operation*. 

4190 

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

4192 of the *path operation function*. 

4193 

4194 It can contain Markdown. 

4195 

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

4197 

4198 Read more about it in the 

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

4200 """ 

4201 ), 

4202 ] = None, 

4203 response_description: Annotated[ 

4204 str, 

4205 Doc( 

4206 """ 

4207 The description for the default response. 

4208 

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

4210 """ 

4211 ), 

4212 ] = "Successful Response", 

4213 responses: Annotated[ 

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

4215 Doc( 

4216 """ 

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

4218 

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

4220 """ 

4221 ), 

4222 ] = None, 

4223 deprecated: Annotated[ 

4224 Optional[bool], 

4225 Doc( 

4226 """ 

4227 Mark this *path operation* as deprecated. 

4228 

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

4230 """ 

4231 ), 

4232 ] = None, 

4233 operation_id: Annotated[ 

4234 Optional[str], 

4235 Doc( 

4236 """ 

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

4238 

4239 By default, it is generated automatically. 

4240 

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

4242 unique for the whole API. 

4243 

4244 You can customize the 

4245 operation ID generation with the parameter 

4246 `generate_unique_id_function` in the `FastAPI` class. 

4247 

4248 Read more about it in the 

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

4250 """ 

4251 ), 

4252 ] = None, 

4253 response_model_include: Annotated[ 

4254 Optional[IncEx], 

4255 Doc( 

4256 """ 

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

4258 response data. 

4259 

4260 Read more about it in the 

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

4262 """ 

4263 ), 

4264 ] = None, 

4265 response_model_exclude: Annotated[ 

4266 Optional[IncEx], 

4267 Doc( 

4268 """ 

4269 Configuration passed to Pydantic to exclude certain fields in the 

4270 response data. 

4271 

4272 Read more about it in the 

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

4274 """ 

4275 ), 

4276 ] = None, 

4277 response_model_by_alias: Annotated[ 

4278 bool, 

4279 Doc( 

4280 """ 

4281 Configuration passed to Pydantic to define if the response model 

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

4283 

4284 Read more about it in the 

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

4286 """ 

4287 ), 

4288 ] = True, 

4289 response_model_exclude_unset: Annotated[ 

4290 bool, 

4291 Doc( 

4292 """ 

4293 Configuration passed to Pydantic to define if the response data 

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

4295 have their default values. This is different from 

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

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

4298 as the default. 

4299 

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

4301 

4302 Read more about it in the 

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

4304 """ 

4305 ), 

4306 ] = False, 

4307 response_model_exclude_defaults: Annotated[ 

4308 bool, 

4309 Doc( 

4310 """ 

4311 Configuration passed to Pydantic to define if the response data 

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

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

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

4315 they will be excluded from the response. 

4316 

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

4318 

4319 Read more about it in the 

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

4321 """ 

4322 ), 

4323 ] = False, 

4324 response_model_exclude_none: Annotated[ 

4325 bool, 

4326 Doc( 

4327 """ 

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

4329 exclude fields set to `None`. 

4330 

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

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

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

4334 when it makes sense. 

4335 

4336 Read more about it in the 

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

4338 """ 

4339 ), 

4340 ] = False, 

4341 include_in_schema: Annotated[ 

4342 bool, 

4343 Doc( 

4344 """ 

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

4346 

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

4348 

4349 Read more about it in the 

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

4351 """ 

4352 ), 

4353 ] = True, 

4354 response_class: Annotated[ 

4355 Type[Response], 

4356 Doc( 

4357 """ 

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

4359 

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

4361 

4362 Read more about it in the 

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

4364 """ 

4365 ), 

4366 ] = Default(JSONResponse), 

4367 name: Annotated[ 

4368 Optional[str], 

4369 Doc( 

4370 """ 

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

4372 """ 

4373 ), 

4374 ] = None, 

4375 callbacks: Annotated[ 

4376 Optional[List[BaseRoute]], 

4377 Doc( 

4378 """ 

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

4380 

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

4382 directly. 

4383 

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

4385 

4386 Read more about it in the 

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

4388 """ 

4389 ), 

4390 ] = None, 

4391 openapi_extra: Annotated[ 

4392 Optional[Dict[str, Any]], 

4393 Doc( 

4394 """ 

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

4396 operation*. 

4397 

4398 Read more about it in the 

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

4400 """ 

4401 ), 

4402 ] = None, 

4403 generate_unique_id_function: Annotated[ 

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

4405 Doc( 

4406 """ 

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

4408 operations* shown in the generated OpenAPI. 

4409 

4410 This is particularly useful when automatically generating clients or 

4411 SDKs for your API. 

4412 

4413 Read more about it in the 

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

4415 """ 

4416 ), 

4417 ] = Default(generate_unique_id), 

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

4419 """ 

4420 Add a *path operation* using an HTTP TRACE operation. 

4421 

4422 ## Example 

4423 

4424 ```python 

4425 from fastapi import FastAPI 

4426 

4427 app = FastAPI() 

4428 

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

4430 def trace_item(item_id: str): 

4431 return None 

4432 ``` 

4433 """ 

4434 return self.router.trace( 1abcde

4435 path, 

4436 response_model=response_model, 

4437 status_code=status_code, 

4438 tags=tags, 

4439 dependencies=dependencies, 

4440 summary=summary, 

4441 description=description, 

4442 response_description=response_description, 

4443 responses=responses, 

4444 deprecated=deprecated, 

4445 operation_id=operation_id, 

4446 response_model_include=response_model_include, 

4447 response_model_exclude=response_model_exclude, 

4448 response_model_by_alias=response_model_by_alias, 

4449 response_model_exclude_unset=response_model_exclude_unset, 

4450 response_model_exclude_defaults=response_model_exclude_defaults, 

4451 response_model_exclude_none=response_model_exclude_none, 

4452 include_in_schema=include_in_schema, 

4453 response_class=response_class, 

4454 name=name, 

4455 callbacks=callbacks, 

4456 openapi_extra=openapi_extra, 

4457 generate_unique_id_function=generate_unique_id_function, 

4458 ) 

4459 

4460 def websocket_route( 1abcde

4461 self, path: str, name: Union[str, None] = None 

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

4463 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde

4464 self.router.add_websocket_route(path, func, name=name) 1abcde

4465 return func 1abcde

4466 

4467 return decorator 1abcde

4468 

4469 @deprecated( 1abcde

4470 """ 

4471 on_event is deprecated, use lifespan event handlers instead. 

4472 

4473 Read more about it in the 

4474 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/). 

4475 """ 

4476 ) 

4477 def on_event( 1abcde

4478 self, 

4479 event_type: Annotated[ 

4480 str, 

4481 Doc( 

4482 """ 

4483 The type of event. `startup` or `shutdown`. 

4484 """ 

4485 ), 

4486 ], 

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

4488 """ 

4489 Add an event handler for the application. 

4490 

4491 `on_event` is deprecated, use `lifespan` event handlers instead. 

4492 

4493 Read more about it in the 

4494 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated). 

4495 """ 

4496 return self.router.on_event(event_type) 2a , ^ b - bbc . lbd / vbe : Fb

4497 

4498 def middleware( 1abcde

4499 self, 

4500 middleware_type: Annotated[ 

4501 str, 

4502 Doc( 

4503 """ 

4504 The type of middleware. Currently only supports `http`. 

4505 """ 

4506 ), 

4507 ], 

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

4509 """ 

4510 Add a middleware to the application. 

4511 

4512 Read more about it in the 

4513 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/). 

4514 

4515 ## Example 

4516 

4517 ```python 

4518 import time 

4519 

4520 from fastapi import FastAPI, Request 

4521 

4522 app = FastAPI() 

4523 

4524 

4525 @app.middleware("http") 

4526 async def add_process_time_header(request: Request, call_next): 

4527 start_time = time.time() 

4528 response = await call_next(request) 

4529 process_time = time.time() - start_time 

4530 response.headers["X-Process-Time"] = str(process_time) 

4531 return response 

4532 ``` 

4533 """ 

4534 

4535 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde

4536 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcde

4537 return func 1abcde

4538 

4539 return decorator 1abcde

4540 

4541 def exception_handler( 1abcde

4542 self, 

4543 exc_class_or_status_code: Annotated[ 

4544 Union[int, Type[Exception]], 

4545 Doc( 

4546 """ 

4547 The Exception class this would handle, or a status code. 

4548 """ 

4549 ), 

4550 ], 

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

4552 """ 

4553 Add an exception handler to the app. 

4554 

4555 Read more about it in the 

4556 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/). 

4557 

4558 ## Example 

4559 

4560 ```python 

4561 from fastapi import FastAPI, Request 

4562 from fastapi.responses import JSONResponse 

4563 

4564 

4565 class UnicornException(Exception): 

4566 def __init__(self, name: str): 

4567 self.name = name 

4568 

4569 

4570 app = FastAPI() 

4571 

4572 

4573 @app.exception_handler(UnicornException) 

4574 async def unicorn_exception_handler(request: Request, exc: UnicornException): 

4575 return JSONResponse( 

4576 status_code=418, 

4577 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."}, 

4578 ) 

4579 ``` 

4580 """ 

4581 

4582 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcde

4583 self.add_exception_handler(exc_class_or_status_code, func) 1abcde

4584 return func 1abcde

4585 

4586 return decorator 1abcde