1import warnings23import pytest4from fastapi import APIRouter, Depends, FastAPI, Response5from fastapi.responses import JSONResponse6from fastapi.testclient import TestClient7from inline_snapshot import snapshot8910class ResponseLevel0(JSONResponse):11 media_type = "application/x-level-0"121314class ResponseLevel1(JSONResponse):15 media_type = "application/x-level-1"161718class ResponseLevel2(JSONResponse):19 media_type = "application/x-level-2"202122class ResponseLevel3(JSONResponse):23 media_type = "application/x-level-3"242526class ResponseLevel4(JSONResponse):27 media_type = "application/x-level-4"282930class ResponseLevel5(JSONResponse):31 media_type = "application/x-level-5"323334async def dep0(response: Response):35 response.headers["x-level0"] = "True"363738async def dep1(response: Response):39 response.headers["x-level1"] = "True"404142async def dep2(response: Response):43 response.headers["x-level2"] = "True"444546async def dep3(response: Response):47 response.headers["x-level3"] = "True"484950async def dep4(response: Response):51 response.headers["x-level4"] = "True"525354async def dep5(response: Response):55 response.headers["x-level5"] = "True"565758callback_router0 = APIRouter()596061@callback_router0.get("/")62async def callback0(level0: str):63 pass # pragma: nocover646566callback_router1 = APIRouter()676869@callback_router1.get("/")70async def callback1(level1: str):71 pass # pragma: nocover727374callback_router2 = APIRouter()757677@callback_router2.get("/")78async def callback2(level2: str):79 pass # pragma: nocover808182callback_router3 = APIRouter()838485@callback_router3.get("/")86async def callback3(level3: str):87 pass # pragma: nocover888990callback_router4 = APIRouter()919293@callback_router4.get("/")94async def callback4(level4: str):95 pass # pragma: nocover969798callback_router5 = APIRouter()99100101@callback_router5.get("/")102async def callback5(level5: str):103 pass # pragma: nocover104105106app = FastAPI(107 dependencies=[Depends(dep0)],108 responses={109 400: {"description": "Client error level 0"},110 500: {"description": "Server error level 0"},111 },112 default_response_class=ResponseLevel0,113 callbacks=callback_router0.routes,114)115116router2_override = APIRouter(117 prefix="/level2",118 tags=["level2a", "level2b"],119 dependencies=[Depends(dep2)],120 responses={121 402: {"description": "Client error level 2"},122 502: {"description": "Server error level 2"},123 },124 default_response_class=ResponseLevel2,125 callbacks=callback_router2.routes,126 deprecated=True,127)128router2_default = APIRouter()129router4_override = APIRouter(130 prefix="/level4",131 tags=["level4a", "level4b"],132 dependencies=[Depends(dep4)],133 responses={134 404: {"description": "Client error level 4"},135 504: {"description": "Server error level 4"},136 },137 default_response_class=ResponseLevel4,138 callbacks=callback_router4.routes,139 deprecated=True,140)141router4_default = APIRouter()142143144@app.get(145 "/override1",146 tags=["path1a", "path1b"],147 responses={148 401: {"description": "Client error level 1"},149 501: {"description": "Server error level 1"},150 },151 deprecated=True,152 callbacks=callback_router1.routes,153 dependencies=[Depends(dep1)],154 response_class=ResponseLevel1,155)156async def path1_override(level1: str):157 return level1158159160@app.get("/default1")161async def path1_default(level1: str):162 return level1163164165@router2_override.get(166 "/override3",167 tags=["path3a", "path3b"],168 responses={169 403: {"description": "Client error level 3"},170 503: {"description": "Server error level 3"},171 },172 deprecated=True,173 callbacks=callback_router3.routes,174 dependencies=[Depends(dep3)],175 response_class=ResponseLevel3,176)177async def path3_override_router2_override(level3: str):178 return level3179180181@router2_override.get("/default3")182async def path3_default_router2_override(level3: str):183 return level3184185186@router2_default.get(187 "/override3",188 tags=["path3a", "path3b"],189 responses={190 403: {"description": "Client error level 3"},191 503: {"description": "Server error level 3"},192 },193 deprecated=True,194 callbacks=callback_router3.routes,195 dependencies=[Depends(dep3)],196 response_class=ResponseLevel3,197)198async def path3_override_router2_default(level3: str):199 return level3200201202@router2_default.get("/default3")203async def path3_default_router2_default(level3: str):204 return level3205206207@router4_override.get(208 "/override5",209 tags=["path5a", "path5b"],210 responses={211 405: {"description": "Client error level 5"},212 505: {"description": "Server error level 5"},213 },214 deprecated=True,215 callbacks=callback_router5.routes,216 dependencies=[Depends(dep5)],217 response_class=ResponseLevel5,218)219async def path5_override_router4_override(level5: str):220 return level5221222223@router4_override.get(224 "/default5",225)226async def path5_default_router4_override(level5: str):227 return level5228229230@router4_default.get(231 "/override5",232 tags=["path5a", "path5b"],233 responses={234 405: {"description": "Client error level 5"},235 505: {"description": "Server error level 5"},236 },237 deprecated=True,238 callbacks=callback_router5.routes,239 dependencies=[Depends(dep5)],240 response_class=ResponseLevel5,241)242async def path5_override_router4_default(level5: str):243 return level5244245246@router4_default.get(247 "/default5",248)249async def path5_default_router4_default(level5: str):250 return level5251252253router2_override.include_router(254 router4_override,255 prefix="/level3",256 tags=["level3a", "level3b"],257 dependencies=[Depends(dep3)],258 responses={259 403: {"description": "Client error level 3"},260 503: {"description": "Server error level 3"},261 },262 default_response_class=ResponseLevel3,263 callbacks=callback_router3.routes,264)265266router2_override.include_router(267 router4_default,268 prefix="/level3",269 tags=["level3a", "level3b"],270 dependencies=[Depends(dep3)],271 responses={272 403: {"description": "Client error level 3"},273 503: {"description": "Server error level 3"},274 },275 default_response_class=ResponseLevel3,276 callbacks=callback_router3.routes,277)278279router2_override.include_router(router4_override)280281router2_override.include_router(router4_default)282283router2_default.include_router(284 router4_override,285 prefix="/level3",286 tags=["level3a", "level3b"],287 dependencies=[Depends(dep3)],288 responses={289 403: {"description": "Client error level 3"},290 503: {"description": "Server error level 3"},291 },292 default_response_class=ResponseLevel3,293 callbacks=callback_router3.routes,294)295296router2_default.include_router(297 router4_default,298 prefix="/level3",299 tags=["level3a", "level3b"],300 dependencies=[Depends(dep3)],301 responses={302 403: {"description": "Client error level 3"},303 503: {"description": "Server error level 3"},304 },305 default_response_class=ResponseLevel3,306 callbacks=callback_router3.routes,307)308309router2_default.include_router(router4_override)310311router2_default.include_router(router4_default)312313314app.include_router(315 router2_override,316 prefix="/level1",317 tags=["level1a", "level1b"],318 dependencies=[Depends(dep1)],319 responses={320 401: {"description": "Client error level 1"},321 501: {"description": "Server error level 1"},322 },323 default_response_class=ResponseLevel1,324 callbacks=callback_router1.routes,325)326327app.include_router(328 router2_default,329 prefix="/level1",330 tags=["level1a", "level1b"],331 dependencies=[Depends(dep1)],332 responses={333 401: {"description": "Client error level 1"},334 501: {"description": "Server error level 1"},335 },336 default_response_class=ResponseLevel1,337 callbacks=callback_router1.routes,338)339340app.include_router(router2_override)341342app.include_router(router2_default)343344client = TestClient(app)345346347def test_level1_override():348 response = client.get("/override1?level1=foo")349 assert response.json() == "foo"350 assert response.headers["content-type"] == "application/x-level-1"351 assert "x-level0" in response.headers352 assert "x-level1" in response.headers353 assert "x-level2" not in response.headers354 assert "x-level3" not in response.headers355 assert "x-level4" not in response.headers356 assert "x-level5" not in response.headers357358359def test_level1_default():360 response = client.get("/default1?level1=foo")361 assert response.json() == "foo"362 assert response.headers["content-type"] == "application/x-level-0"363 assert "x-level0" in response.headers364 assert "x-level1" not in response.headers365 assert "x-level2" not in response.headers366 assert "x-level3" not in response.headers367 assert "x-level4" not in response.headers368 assert "x-level5" not in response.headers369370371@pytest.mark.parametrize("override1", [True, False])372@pytest.mark.parametrize("override2", [True, False])373@pytest.mark.parametrize("override3", [True, False])374def test_paths_level3(override1, override2, override3):375 url = ""376 content_type_level = "0"377 if override1:378 url += "/level1"379 content_type_level = "1"380 if override2:381 url += "/level2"382 content_type_level = "2"383 if override3:384 url += "/override3"385 content_type_level = "3"386 else:387 url += "/default3"388 url += "?level3=foo"389 response = client.get(url)390 assert response.json() == "foo"391 assert (392 response.headers["content-type"] == f"application/x-level-{content_type_level}"393 )394 assert "x-level0" in response.headers395 assert not override1 or "x-level1" in response.headers396 assert not override2 or "x-level2" in response.headers397 assert not override3 or "x-level3" in response.headers398399400@pytest.mark.parametrize("override1", [True, False])401@pytest.mark.parametrize("override2", [True, False])402@pytest.mark.parametrize("override3", [True, False])403@pytest.mark.parametrize("override4", [True, False])404@pytest.mark.parametrize("override5", [True, False])405def test_paths_level5(override1, override2, override3, override4, override5):406 url = ""407 content_type_level = "0"408 if override1:409 url += "/level1"410 content_type_level = "1"411 if override2:412 url += "/level2"413 content_type_level = "2"414 if override3:415 url += "/level3"416 content_type_level = "3"417 if override4:418 url += "/level4"419 content_type_level = "4"420 if override5:421 url += "/override5"422 content_type_level = "5"423 else:424 url += "/default5"425 url += "?level5=foo"426 response = client.get(url)427 assert response.json() == "foo"428 assert (429 response.headers["content-type"] == f"application/x-level-{content_type_level}"430 )431 assert "x-level0" in response.headers432 assert not override1 or "x-level1" in response.headers433 assert not override2 or "x-level2" in response.headers434 assert not override3 or "x-level3" in response.headers435 assert not override4 or "x-level4" in response.headers436 assert not override5 or "x-level5" in response.headers437438439def test_openapi():440 client = TestClient(app)441 with warnings.catch_warnings(record=True) as w:442 warnings.simplefilter("always")443 response = client.get("/openapi.json")444 assert issubclass(w[-1].category, UserWarning)445 assert "Duplicate Operation ID" in str(w[-1].message)446 assert response.json() == snapshot(447 {448 "openapi": "3.1.0",449 "info": {"title": "FastAPI", "version": "0.1.0"},450 "paths": {451 "/override1": {452 "get": {453 "tags": ["path1a", "path1b"],454 "summary": "Path1 Override",455 "operationId": "path1_override_override1_get",456 "parameters": [457 {458 "required": True,459 "schema": {"title": "Level1", "type": "string"},460 "name": "level1",461 "in": "query",462 }463 ],464 "responses": {465 "200": {466 "description": "Successful Response",467 "content": {"application/x-level-1": {"schema": {}}},468 },469 "400": {"description": "Client error level 0"},470 "401": {"description": "Client error level 1"},471 "422": {472 "description": "Validation Error",473 "content": {474 "application/json": {475 "schema": {476 "$ref": "#/components/schemas/HTTPValidationError"477 }478 }479 },480 },481 "500": {"description": "Server error level 0"},482 "501": {"description": "Server error level 1"},483 },484 "callbacks": {485 "callback0": {486 "/": {487 "get": {488 "summary": "Callback0",489 "operationId": "callback0__get",490 "parameters": [491 {492 "name": "level0",493 "in": "query",494 "required": True,495 "schema": {496 "title": "Level0",497 "type": "string",498 },499 }500 ],501 "responses": {502 "200": {503 "description": "Successful Response",504 "content": {505 "application/json": {"schema": {}}506 },507 },508 "422": {509 "description": "Validation Error",510 "content": {511 "application/json": {512 "schema": {513 "$ref": "#/components/schemas/HTTPValidationError"514 }515 }516 },517 },518 },519 }520 }521 },522 "callback1": {523 "/": {524 "get": {525 "summary": "Callback1",526 "operationId": "callback1__get",527 "parameters": [528 {529 "name": "level1",530 "in": "query",531 "required": True,532 "schema": {533 "title": "Level1",534 "type": "string",535 },536 }537 ],538 "responses": {539 "200": {540 "description": "Successful Response",541 "content": {542 "application/json": {"schema": {}}543 },544 },545 "422": {546 "description": "Validation Error",547 "content": {548 "application/json": {549 "schema": {550 "$ref": "#/components/schemas/HTTPValidationError"551 }552 }553 },554 },555 },556 }557 }558 },559 },560 "deprecated": True,561 }562 },563 "/default1": {564 "get": {565 "summary": "Path1 Default",566 "operationId": "path1_default_default1_get",567 "parameters": [568 {569 "required": True,570 "schema": {"title": "Level1", "type": "string"},571 "name": "level1",572 "in": "query",573 }574 ],575 "responses": {576 "200": {577 "description": "Successful Response",578 "content": {"application/x-level-0": {"schema": {}}},579 },580 "400": {"description": "Client error level 0"},581 "422": {582 "description": "Validation Error",583 "content": {584 "application/json": {585 "schema": {586 "$ref": "#/components/schemas/HTTPValidationError"587 }588 }589 },590 },591 "500": {"description": "Server error level 0"},592 },593 "callbacks": {594 "callback0": {595 "/": {596 "get": {597 "summary": "Callback0",598 "operationId": "callback0__get",599 "parameters": [600 {601 "name": "level0",602 "in": "query",603 "required": True,604 "schema": {605 "title": "Level0",606 "type": "string",607 },608 }609 ],610 "responses": {611 "200": {612 "description": "Successful Response",613 "content": {614 "application/json": {"schema": {}}615 },616 },617 "422": {618 "description": "Validation Error",619 "content": {620 "application/json": {621 "schema": {622 "$ref": "#/components/schemas/HTTPValidationError"623 }624 }625 },626 },627 },628 }629 }630 }631 },632 }633 },634 "/level1/level2/override3": {635 "get": {636 "tags": [637 "level1a",638 "level1b",639 "level2a",640 "level2b",641 "path3a",642 "path3b",643 ],644 "summary": "Path3 Override Router2 Override",645 "operationId": "path3_override_router2_override_level1_level2_override3_get",646 "parameters": [647 {648 "required": True,649 "schema": {"title": "Level3", "type": "string"},650 "name": "level3",651 "in": "query",652 }653 ],654 "responses": {655 "200": {656 "description": "Successful Response",657 "content": {"application/x-level-3": {"schema": {}}},658 },659 "400": {"description": "Client error level 0"},660 "401": {"description": "Client error level 1"},661 "402": {"description": "Client error level 2"},662 "403": {"description": "Client error level 3"},663 "422": {664 "description": "Validation Error",665 "content": {666 "application/json": {667 "schema": {668 "$ref": "#/components/schemas/HTTPValidationError"669 }670 }671 },672 },673 "500": {"description": "Server error level 0"},674 "501": {"description": "Server error level 1"},675 "502": {"description": "Server error level 2"},676 "503": {"description": "Server error level 3"},677 },678 "callbacks": {679 "callback0": {680 "/": {681 "get": {682 "summary": "Callback0",683 "operationId": "callback0__get",684 "parameters": [685 {686 "name": "level0",687 "in": "query",688 "required": True,689 "schema": {690 "title": "Level0",691 "type": "string",692 },693 }694 ],695 "responses": {696 "200": {697 "description": "Successful Response",698 "content": {699 "application/json": {"schema": {}}700 },701 },702 "422": {703 "description": "Validation Error",704 "content": {705 "application/json": {706 "schema": {707 "$ref": "#/components/schemas/HTTPValidationError"708 }709 }710 },711 },712 },713 }714 }715 },716 "callback1": {717 "/": {718 "get": {719 "summary": "Callback1",720 "operationId": "callback1__get",721 "parameters": [722 {723 "name": "level1",724 "in": "query",725 "required": True,726 "schema": {727 "title": "Level1",728 "type": "string",729 },730 }731 ],732 "responses": {733 "200": {734 "description": "Successful Response",735 "content": {736 "application/json": {"schema": {}}737 },738 },739 "422": {740 "description": "Validation Error",741 "content": {742 "application/json": {743 "schema": {744 "$ref": "#/components/schemas/HTTPValidationError"745 }746 }747 },748 },749 },750 }751 }752 },753 "callback2": {754 "/": {755 "get": {756 "summary": "Callback2",757 "operationId": "callback2__get",758 "parameters": [759 {760 "name": "level2",761 "in": "query",762 "required": True,763 "schema": {764 "title": "Level2",765 "type": "string",766 },767 }768 ],769 "responses": {770 "200": {771 "description": "Successful Response",772 "content": {773 "application/json": {"schema": {}}774 },775 },776 "422": {777 "description": "Validation Error",778 "content": {779 "application/json": {780 "schema": {781 "$ref": "#/components/schemas/HTTPValidationError"782 }783 }784 },785 },786 },787 }788 }789 },790 "callback3": {791 "/": {792 "get": {793 "summary": "Callback3",794 "operationId": "callback3__get",795 "parameters": [796 {797 "name": "level3",798 "in": "query",799 "required": True,800 "schema": {801 "title": "Level3",802 "type": "string",803 },804 }805 ],806 "responses": {807 "200": {808 "description": "Successful Response",809 "content": {810 "application/json": {"schema": {}}811 },812 },813 "422": {814 "description": "Validation Error",815 "content": {816 "application/json": {817 "schema": {818 "$ref": "#/components/schemas/HTTPValidationError"819 }820 }821 },822 },823 },824 }825 }826 },827 },828 "deprecated": True,829 }830 },831 "/level1/level2/default3": {832 "get": {833 "tags": ["level1a", "level1b", "level2a", "level2b"],834 "summary": "Path3 Default Router2 Override",835 "operationId": "path3_default_router2_override_level1_level2_default3_get",836 "parameters": [837 {838 "required": True,839 "schema": {"title": "Level3", "type": "string"},840 "name": "level3",841 "in": "query",842 }843 ],844 "responses": {845 "200": {846 "description": "Successful Response",847 "content": {"application/x-level-2": {"schema": {}}},848 },849 "400": {"description": "Client error level 0"},850 "401": {"description": "Client error level 1"},851 "402": {"description": "Client error level 2"},852 "422": {853 "description": "Validation Error",854 "content": {855 "application/json": {856 "schema": {857 "$ref": "#/components/schemas/HTTPValidationError"858 }859 }860 },861 },862 "500": {"description": "Server error level 0"},863 "501": {"description": "Server error level 1"},864 "502": {"description": "Server error level 2"},865 },866 "callbacks": {867 "callback0": {868 "/": {869 "get": {870 "summary": "Callback0",871 "operationId": "callback0__get",872 "parameters": [873 {874 "name": "level0",875 "in": "query",876 "required": True,877 "schema": {878 "title": "Level0",879 "type": "string",880 },881 }882 ],883 "responses": {884 "200": {885 "description": "Successful Response",886 "content": {887 "application/json": {"schema": {}}888 },889 },890 "422": {891 "description": "Validation Error",892 "content": {893 "application/json": {894 "schema": {895 "$ref": "#/components/schemas/HTTPValidationError"896 }897 }898 },899 },900 },901 }902 }903 },904 "callback1": {905 "/": {906 "get": {907 "summary": "Callback1",908 "operationId": "callback1__get",909 "parameters": [910 {911 "name": "level1",912 "in": "query",913 "required": True,914 "schema": {915 "title": "Level1",916 "type": "string",917 },918 }919 ],920 "responses": {921 "200": {922 "description": "Successful Response",923 "content": {924 "application/json": {"schema": {}}925 },926 },927 "422": {928 "description": "Validation Error",929 "content": {930 "application/json": {931 "schema": {932 "$ref": "#/components/schemas/HTTPValidationError"933 }934 }935 },936 },937 },938 }939 }940 },941 "callback2": {942 "/": {943 "get": {944 "summary": "Callback2",945 "operationId": "callback2__get",946 "parameters": [947 {948 "name": "level2",949 "in": "query",950 "required": True,951 "schema": {952 "title": "Level2",953 "type": "string",954 },955 }956 ],957 "responses": {958 "200": {959 "description": "Successful Response",960 "content": {961 "application/json": {"schema": {}}962 },963 },964 "422": {965 "description": "Validation Error",966 "content": {967 "application/json": {968 "schema": {969 "$ref": "#/components/schemas/HTTPValidationError"970 }971 }972 },973 },974 },975 }976 }977 },978 },979 "deprecated": True,980 }981 },982 "/level1/level2/level3/level4/override5": {983 "get": {984 "tags": [985 "level1a",986 "level1b",987 "level2a",988 "level2b",989 "level3a",990 "level3b",991 "level4a",992 "level4b",993 "path5a",994 "path5b",995 ],996 "summary": "Path5 Override Router4 Override",997 "operationId": "path5_override_router4_override_level1_level2_level3_level4_override5_get",998 "parameters": [999 {1000 "required": True,1001 "schema": {"title": "Level5", "type": "string"},1002 "name": "level5",1003 "in": "query",1004 }1005 ],1006 "responses": {1007 "200": {1008 "description": "Successful Response",1009 "content": {"application/x-level-5": {"schema": {}}},1010 },1011 "400": {"description": "Client error level 0"},1012 "401": {"description": "Client error level 1"},1013 "402": {"description": "Client error level 2"},1014 "403": {"description": "Client error level 3"},1015 "404": {"description": "Client error level 4"},1016 "405": {"description": "Client error level 5"},1017 "422": {1018 "description": "Validation Error",1019 "content": {1020 "application/json": {1021 "schema": {1022 "$ref": "#/components/schemas/HTTPValidationError"1023 }1024 }1025 },1026 },1027 "500": {"description": "Server error level 0"},1028 "501": {"description": "Server error level 1"},1029 "502": {"description": "Server error level 2"},1030 "503": {"description": "Server error level 3"},1031 "504": {"description": "Server error level 4"},1032 "505": {"description": "Server error level 5"},1033 },1034 "callbacks": {1035 "callback0": {1036 "/": {1037 "get": {1038 "summary": "Callback0",1039 "operationId": "callback0__get",1040 "parameters": [1041 {1042 "name": "level0",1043 "in": "query",1044 "required": True,1045 "schema": {1046 "title": "Level0",1047 "type": "string",1048 },1049 }1050 ],1051 "responses": {1052 "200": {1053 "description": "Successful Response",1054 "content": {1055 "application/json": {"schema": {}}1056 },1057 },1058 "422": {1059 "description": "Validation Error",1060 "content": {1061 "application/json": {1062 "schema": {1063 "$ref": "#/components/schemas/HTTPValidationError"1064 }1065 }1066 },1067 },1068 },1069 }1070 }1071 },1072 "callback1": {1073 "/": {1074 "get": {1075 "summary": "Callback1",1076 "operationId": "callback1__get",1077 "parameters": [1078 {1079 "name": "level1",1080 "in": "query",1081 "required": True,1082 "schema": {1083 "title": "Level1",1084 "type": "string",1085 },1086 }1087 ],1088 "responses": {1089 "200": {1090 "description": "Successful Response",1091 "content": {1092 "application/json": {"schema": {}}1093 },1094 },1095 "422": {1096 "description": "Validation Error",1097 "content": {1098 "application/json": {1099 "schema": {1100 "$ref": "#/components/schemas/HTTPValidationError"1101 }1102 }1103 },1104 },1105 },1106 }1107 }1108 },1109 "callback2": {1110 "/": {1111 "get": {1112 "summary": "Callback2",1113 "operationId": "callback2__get",1114 "parameters": [1115 {1116 "name": "level2",1117 "in": "query",1118 "required": True,1119 "schema": {1120 "title": "Level2",1121 "type": "string",1122 },1123 }1124 ],1125 "responses": {1126 "200": {1127 "description": "Successful Response",1128 "content": {1129 "application/json": {"schema": {}}1130 },1131 },1132 "422": {1133 "description": "Validation Error",1134 "content": {1135 "application/json": {1136 "schema": {1137 "$ref": "#/components/schemas/HTTPValidationError"1138 }1139 }1140 },1141 },1142 },1143 }1144 }1145 },1146 "callback3": {1147 "/": {1148 "get": {1149 "summary": "Callback3",1150 "operationId": "callback3__get",1151 "parameters": [1152 {1153 "name": "level3",1154 "in": "query",1155 "required": True,1156 "schema": {1157 "title": "Level3",1158 "type": "string",1159 },1160 }1161 ],1162 "responses": {1163 "200": {1164 "description": "Successful Response",1165 "content": {1166 "application/json": {"schema": {}}1167 },1168 },1169 "422": {1170 "description": "Validation Error",1171 "content": {1172 "application/json": {1173 "schema": {1174 "$ref": "#/components/schemas/HTTPValidationError"1175 }1176 }1177 },1178 },1179 },1180 }1181 }1182 },1183 "callback4": {1184 "/": {1185 "get": {1186 "summary": "Callback4",1187 "operationId": "callback4__get",1188 "parameters": [1189 {1190 "name": "level4",1191 "in": "query",1192 "required": True,1193 "schema": {1194 "title": "Level4",1195 "type": "string",1196 },1197 }1198 ],1199 "responses": {1200 "200": {1201 "description": "Successful Response",1202 "content": {1203 "application/json": {"schema": {}}1204 },1205 },1206 "422": {1207 "description": "Validation Error",1208 "content": {1209 "application/json": {1210 "schema": {1211 "$ref": "#/components/schemas/HTTPValidationError"1212 }1213 }1214 },1215 },1216 },1217 }1218 }1219 },1220 "callback5": {1221 "/": {1222 "get": {1223 "summary": "Callback5",1224 "operationId": "callback5__get",1225 "parameters": [1226 {1227 "name": "level5",1228 "in": "query",1229 "required": True,1230 "schema": {1231 "title": "Level5",1232 "type": "string",1233 },1234 }1235 ],1236 "responses": {1237 "200": {1238 "description": "Successful Response",1239 "content": {1240 "application/json": {"schema": {}}1241 },1242 },1243 "422": {1244 "description": "Validation Error",1245 "content": {1246 "application/json": {1247 "schema": {1248 "$ref": "#/components/schemas/HTTPValidationError"1249 }1250 }1251 },1252 },1253 },1254 }1255 }1256 },1257 },1258 "deprecated": True,1259 }1260 },1261 "/level1/level2/level3/level4/default5": {1262 "get": {1263 "tags": [1264 "level1a",1265 "level1b",1266 "level2a",1267 "level2b",1268 "level3a",1269 "level3b",1270 "level4a",1271 "level4b",1272 ],1273 "summary": "Path5 Default Router4 Override",1274 "operationId": "path5_default_router4_override_level1_level2_level3_level4_default5_get",1275 "parameters": [1276 {1277 "required": True,1278 "schema": {"title": "Level5", "type": "string"},1279 "name": "level5",1280 "in": "query",1281 }1282 ],1283 "responses": {1284 "200": {1285 "description": "Successful Response",1286 "content": {"application/x-level-4": {"schema": {}}},1287 },1288 "400": {"description": "Client error level 0"},1289 "401": {"description": "Client error level 1"},1290 "402": {"description": "Client error level 2"},1291 "403": {"description": "Client error level 3"},1292 "404": {"description": "Client error level 4"},1293 "422": {1294 "description": "Validation Error",1295 "content": {1296 "application/json": {1297 "schema": {1298 "$ref": "#/components/schemas/HTTPValidationError"1299 }1300 }1301 },1302 },1303 "500": {"description": "Server error level 0"},1304 "501": {"description": "Server error level 1"},1305 "502": {"description": "Server error level 2"},1306 "503": {"description": "Server error level 3"},1307 "504": {"description": "Server error level 4"},1308 },1309 "callbacks": {1310 "callback0": {1311 "/": {1312 "get": {1313 "summary": "Callback0",1314 "operationId": "callback0__get",1315 "parameters": [1316 {1317 "name": "level0",1318 "in": "query",1319 "required": True,1320 "schema": {1321 "title": "Level0",1322 "type": "string",1323 },1324 }1325 ],1326 "responses": {1327 "200": {1328 "description": "Successful Response",1329 "content": {1330 "application/json": {"schema": {}}1331 },1332 },1333 "422": {1334 "description": "Validation Error",1335 "content": {1336 "application/json": {1337 "schema": {1338 "$ref": "#/components/schemas/HTTPValidationError"1339 }1340 }1341 },1342 },1343 },1344 }1345 }1346 },1347 "callback1": {1348 "/": {1349 "get": {1350 "summary": "Callback1",1351 "operationId": "callback1__get",1352 "parameters": [1353 {1354 "name": "level1",1355 "in": "query",1356 "required": True,1357 "schema": {1358 "title": "Level1",1359 "type": "string",1360 },1361 }1362 ],1363 "responses": {1364 "200": {1365 "description": "Successful Response",1366 "content": {1367 "application/json": {"schema": {}}1368 },1369 },1370 "422": {1371 "description": "Validation Error",1372 "content": {1373 "application/json": {1374 "schema": {1375 "$ref": "#/components/schemas/HTTPValidationError"1376 }1377 }1378 },1379 },1380 },1381 }1382 }1383 },1384 "callback2": {1385 "/": {1386 "get": {1387 "summary": "Callback2",1388 "operationId": "callback2__get",1389 "parameters": [1390 {1391 "name": "level2",1392 "in": "query",1393 "required": True,1394 "schema": {1395 "title": "Level2",1396 "type": "string",1397 },1398 }1399 ],1400 "responses": {1401 "200": {1402 "description": "Successful Response",1403 "content": {1404 "application/json": {"schema": {}}1405 },1406 },1407 "422": {1408 "description": "Validation Error",1409 "content": {1410 "application/json": {1411 "schema": {1412 "$ref": "#/components/schemas/HTTPValidationError"1413 }1414 }1415 },1416 },1417 },1418 }1419 }1420 },1421 "callback3": {1422 "/": {1423 "get": {1424 "summary": "Callback3",1425 "operationId": "callback3__get",1426 "parameters": [1427 {1428 "name": "level3",1429 "in": "query",1430 "required": True,1431 "schema": {1432 "title": "Level3",1433 "type": "string",1434 },1435 }1436 ],1437 "responses": {1438 "200": {1439 "description": "Successful Response",1440 "content": {1441 "application/json": {"schema": {}}1442 },1443 },1444 "422": {1445 "description": "Validation Error",1446 "content": {1447 "application/json": {1448 "schema": {1449 "$ref": "#/components/schemas/HTTPValidationError"1450 }1451 }1452 },1453 },1454 },1455 }1456 }1457 },1458 "callback4": {1459 "/": {1460 "get": {1461 "summary": "Callback4",1462 "operationId": "callback4__get",1463 "parameters": [1464 {1465 "name": "level4",1466 "in": "query",1467 "required": True,1468 "schema": {1469 "title": "Level4",1470 "type": "string",1471 },1472 }1473 ],1474 "responses": {1475 "200": {1476 "description": "Successful Response",1477 "content": {1478 "application/json": {"schema": {}}1479 },1480 },1481 "422": {1482 "description": "Validation Error",1483 "content": {1484 "application/json": {1485 "schema": {1486 "$ref": "#/components/schemas/HTTPValidationError"1487 }1488 }1489 },1490 },1491 },1492 }1493 }1494 },1495 },1496 "deprecated": True,1497 }1498 },1499 "/level1/level2/level3/override5": {1500 "get": {1501 "tags": [1502 "level1a",1503 "level1b",1504 "level2a",1505 "level2b",1506 "level3a",1507 "level3b",1508 "path5a",1509 "path5b",1510 ],1511 "summary": "Path5 Override Router4 Default",1512 "operationId": "path5_override_router4_default_level1_level2_level3_override5_get",1513 "parameters": [1514 {1515 "required": True,1516 "schema": {"title": "Level5", "type": "string"},1517 "name": "level5",1518 "in": "query",1519 }1520 ],1521 "responses": {1522 "200": {1523 "description": "Successful Response",1524 "content": {"application/x-level-5": {"schema": {}}},1525 },1526 "400": {"description": "Client error level 0"},1527 "401": {"description": "Client error level 1"},1528 "402": {"description": "Client error level 2"},1529 "403": {"description": "Client error level 3"},1530 "405": {"description": "Client error level 5"},1531 "422": {1532 "description": "Validation Error",1533 "content": {1534 "application/json": {1535 "schema": {1536 "$ref": "#/components/schemas/HTTPValidationError"1537 }1538 }1539 },1540 },1541 "500": {"description": "Server error level 0"},1542 "501": {"description": "Server error level 1"},1543 "502": {"description": "Server error level 2"},1544 "503": {"description": "Server error level 3"},1545 "505": {"description": "Server error level 5"},1546 },1547 "callbacks": {1548 "callback0": {1549 "/": {1550 "get": {1551 "summary": "Callback0",1552 "operationId": "callback0__get",1553 "parameters": [1554 {1555 "name": "level0",1556 "in": "query",1557 "required": True,1558 "schema": {1559 "title": "Level0",1560 "type": "string",1561 },1562 }1563 ],1564 "responses": {1565 "200": {1566 "description": "Successful Response",1567 "content": {1568 "application/json": {"schema": {}}1569 },1570 },1571 "422": {1572 "description": "Validation Error",1573 "content": {1574 "application/json": {1575 "schema": {1576 "$ref": "#/components/schemas/HTTPValidationError"1577 }1578 }1579 },1580 },1581 },1582 }1583 }1584 },1585 "callback1": {1586 "/": {1587 "get": {1588 "summary": "Callback1",1589 "operationId": "callback1__get",1590 "parameters": [1591 {1592 "name": "level1",1593 "in": "query",1594 "required": True,1595 "schema": {1596 "title": "Level1",1597 "type": "string",1598 },1599 }1600 ],1601 "responses": {1602 "200": {1603 "description": "Successful Response",1604 "content": {1605 "application/json": {"schema": {}}1606 },1607 },1608 "422": {1609 "description": "Validation Error",1610 "content": {1611 "application/json": {1612 "schema": {1613 "$ref": "#/components/schemas/HTTPValidationError"1614 }1615 }1616 },1617 },1618 },1619 }1620 }1621 },1622 "callback2": {1623 "/": {1624 "get": {1625 "summary": "Callback2",1626 "operationId": "callback2__get",1627 "parameters": [1628 {1629 "name": "level2",1630 "in": "query",1631 "required": True,1632 "schema": {1633 "title": "Level2",1634 "type": "string",1635 },1636 }1637 ],1638 "responses": {1639 "200": {1640 "description": "Successful Response",1641 "content": {1642 "application/json": {"schema": {}}1643 },1644 },1645 "422": {1646 "description": "Validation Error",1647 "content": {1648 "application/json": {1649 "schema": {1650 "$ref": "#/components/schemas/HTTPValidationError"1651 }1652 }1653 },1654 },1655 },1656 }1657 }1658 },1659 "callback3": {1660 "/": {1661 "get": {1662 "summary": "Callback3",1663 "operationId": "callback3__get",1664 "parameters": [1665 {1666 "name": "level3",1667 "in": "query",1668 "required": True,1669 "schema": {1670 "title": "Level3",1671 "type": "string",1672 },1673 }1674 ],1675 "responses": {1676 "200": {1677 "description": "Successful Response",1678 "content": {1679 "application/json": {"schema": {}}1680 },1681 },1682 "422": {1683 "description": "Validation Error",1684 "content": {1685 "application/json": {1686 "schema": {1687 "$ref": "#/components/schemas/HTTPValidationError"1688 }1689 }1690 },1691 },1692 },1693 }1694 }1695 },1696 "callback5": {1697 "/": {1698 "get": {1699 "summary": "Callback5",1700 "operationId": "callback5__get",1701 "parameters": [1702 {1703 "name": "level5",1704 "in": "query",1705 "required": True,1706 "schema": {1707 "title": "Level5",1708 "type": "string",1709 },1710 }1711 ],1712 "responses": {1713 "200": {1714 "description": "Successful Response",1715 "content": {1716 "application/json": {"schema": {}}1717 },1718 },1719 "422": {1720 "description": "Validation Error",1721 "content": {1722 "application/json": {1723 "schema": {1724 "$ref": "#/components/schemas/HTTPValidationError"1725 }1726 }1727 },1728 },1729 },1730 }1731 }1732 },1733 },1734 "deprecated": True,1735 }1736 },1737 "/level1/level2/level3/default5": {1738 "get": {1739 "tags": [1740 "level1a",1741 "level1b",1742 "level2a",1743 "level2b",1744 "level3a",1745 "level3b",1746 ],1747 "summary": "Path5 Default Router4 Default",1748 "operationId": "path5_default_router4_default_level1_level2_level3_default5_get",1749 "parameters": [1750 {1751 "required": True,1752 "schema": {"title": "Level5", "type": "string"},1753 "name": "level5",1754 "in": "query",1755 }1756 ],1757 "responses": {1758 "200": {1759 "description": "Successful Response",1760 "content": {"application/x-level-3": {"schema": {}}},1761 },1762 "400": {"description": "Client error level 0"},1763 "401": {"description": "Client error level 1"},1764 "402": {"description": "Client error level 2"},1765 "403": {"description": "Client error level 3"},1766 "422": {1767 "description": "Validation Error",1768 "content": {1769 "application/json": {1770 "schema": {1771 "$ref": "#/components/schemas/HTTPValidationError"1772 }1773 }1774 },1775 },1776 "500": {"description": "Server error level 0"},1777 "501": {"description": "Server error level 1"},1778 "502": {"description": "Server error level 2"},1779 "503": {"description": "Server error level 3"},1780 },1781 "callbacks": {1782 "callback0": {1783 "/": {1784 "get": {1785 "summary": "Callback0",1786 "operationId": "callback0__get",1787 "parameters": [1788 {1789 "name": "level0",1790 "in": "query",1791 "required": True,1792 "schema": {1793 "title": "Level0",1794 "type": "string",1795 },1796 }1797 ],1798 "responses": {1799 "200": {1800 "description": "Successful Response",1801 "content": {1802 "application/json": {"schema": {}}1803 },1804 },1805 "422": {1806 "description": "Validation Error",1807 "content": {1808 "application/json": {1809 "schema": {1810 "$ref": "#/components/schemas/HTTPValidationError"1811 }1812 }1813 },1814 },1815 },1816 }1817 }1818 },1819 "callback1": {1820 "/": {1821 "get": {1822 "summary": "Callback1",1823 "operationId": "callback1__get",1824 "parameters": [1825 {1826 "name": "level1",1827 "in": "query",1828 "required": True,1829 "schema": {1830 "title": "Level1",1831 "type": "string",1832 },1833 }1834 ],1835 "responses": {1836 "200": {1837 "description": "Successful Response",1838 "content": {1839 "application/json": {"schema": {}}1840 },1841 },1842 "422": {1843 "description": "Validation Error",1844 "content": {1845 "application/json": {1846 "schema": {1847 "$ref": "#/components/schemas/HTTPValidationError"1848 }1849 }1850 },1851 },1852 },1853 }1854 }1855 },1856 "callback2": {1857 "/": {1858 "get": {1859 "summary": "Callback2",1860 "operationId": "callback2__get",1861 "parameters": [1862 {1863 "name": "level2",1864 "in": "query",1865 "required": True,1866 "schema": {1867 "title": "Level2",1868 "type": "string",1869 },1870 }1871 ],1872 "responses": {1873 "200": {1874 "description": "Successful Response",1875 "content": {1876 "application/json": {"schema": {}}1877 },1878 },1879 "422": {1880 "description": "Validation Error",1881 "content": {1882 "application/json": {1883 "schema": {1884 "$ref": "#/components/schemas/HTTPValidationError"1885 }1886 }1887 },1888 },1889 },1890 }1891 }1892 },1893 "callback3": {1894 "/": {1895 "get": {1896 "summary": "Callback3",1897 "operationId": "callback3__get",1898 "parameters": [1899 {1900 "name": "level3",1901 "in": "query",1902 "required": True,1903 "schema": {1904 "title": "Level3",1905 "type": "string",1906 },1907 }1908 ],1909 "responses": {1910 "200": {1911 "description": "Successful Response",1912 "content": {1913 "application/json": {"schema": {}}1914 },1915 },1916 "422": {1917 "description": "Validation Error",1918 "content": {1919 "application/json": {1920 "schema": {1921 "$ref": "#/components/schemas/HTTPValidationError"1922 }1923 }1924 },1925 },1926 },1927 }1928 }1929 },1930 },1931 "deprecated": True,1932 }1933 },1934 "/level1/level2/level4/override5": {1935 "get": {1936 "tags": [1937 "level1a",1938 "level1b",1939 "level2a",1940 "level2b",1941 "level4a",1942 "level4b",1943 "path5a",1944 "path5b",1945 ],1946 "summary": "Path5 Override Router4 Override",1947 "operationId": "path5_override_router4_override_level1_level2_level4_override5_get",1948 "parameters": [1949 {1950 "required": True,1951 "schema": {"title": "Level5", "type": "string"},1952 "name": "level5",1953 "in": "query",1954 }1955 ],1956 "responses": {1957 "200": {1958 "description": "Successful Response",1959 "content": {"application/x-level-5": {"schema": {}}},1960 },1961 "400": {"description": "Client error level 0"},1962 "401": {"description": "Client error level 1"},1963 "402": {"description": "Client error level 2"},1964 "404": {"description": "Client error level 4"},1965 "405": {"description": "Client error level 5"},1966 "422": {1967 "description": "Validation Error",1968 "content": {1969 "application/json": {1970 "schema": {1971 "$ref": "#/components/schemas/HTTPValidationError"1972 }1973 }1974 },1975 },1976 "500": {"description": "Server error level 0"},1977 "501": {"description": "Server error level 1"},1978 "502": {"description": "Server error level 2"},1979 "504": {"description": "Server error level 4"},1980 "505": {"description": "Server error level 5"},1981 },1982 "callbacks": {1983 "callback0": {1984 "/": {1985 "get": {1986 "summary": "Callback0",1987 "operationId": "callback0__get",1988 "parameters": [1989 {1990 "name": "level0",1991 "in": "query",1992 "required": True,1993 "schema": {1994 "title": "Level0",1995 "type": "string",1996 },1997 }1998 ],1999 "responses": {2000 "200": {
Findings
✓ No findings reported for this file.