mirror of https://github.com/tiangolo/fastapi.git
⬆️ Bump Starlette from 0.22.0 to 0.23.0 (#5739)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
This commit is contained in:
parent
58757f63af
commit
9293795e99
|
|
@ -10,7 +10,7 @@ async def read_main():
|
||||||
return {"msg": "Hello World"}
|
return {"msg": "Hello World"}
|
||||||
|
|
||||||
|
|
||||||
@app.websocket_route("/ws")
|
@app.websocket("/ws")
|
||||||
async def websocket(websocket: WebSocket):
|
async def websocket(websocket: WebSocket):
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
await websocket.send_json({"msg": "Hello WebSocket"})
|
await websocket.send_json({"msg": "Hello WebSocket"})
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ from starlette.applications import Starlette
|
||||||
from starlette.datastructures import State
|
from starlette.datastructures import State
|
||||||
from starlette.exceptions import HTTPException
|
from starlette.exceptions import HTTPException
|
||||||
from starlette.middleware import Middleware
|
from starlette.middleware import Middleware
|
||||||
|
from starlette.middleware.base import BaseHTTPMiddleware
|
||||||
from starlette.middleware.errors import ServerErrorMiddleware
|
from starlette.middleware.errors import ServerErrorMiddleware
|
||||||
from starlette.middleware.exceptions import ExceptionMiddleware
|
from starlette.middleware.exceptions import ExceptionMiddleware
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
|
|
@ -870,3 +871,35 @@ class FastAPI(Starlette):
|
||||||
openapi_extra=openapi_extra,
|
openapi_extra=openapi_extra,
|
||||||
generate_unique_id_function=generate_unique_id_function,
|
generate_unique_id_function=generate_unique_id_function,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def websocket_route(
|
||||||
|
self, path: str, name: Union[str, None] = None
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.router.add_websocket_route(path, func, name=name)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
def on_event(
|
||||||
|
self, event_type: str
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
return self.router.on_event(event_type)
|
||||||
|
|
||||||
|
def middleware(
|
||||||
|
self, middleware_type: str
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.add_middleware(BaseHTTPMiddleware, dispatch=func)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
def exception_handler(
|
||||||
|
self, exc_class_or_status_code: Union[int, Type[Exception]]
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.add_exception_handler(exc_class_or_status_code, func)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
|
||||||
|
|
@ -522,6 +522,25 @@ class APIRouter(routing.Router):
|
||||||
self.default_response_class = default_response_class
|
self.default_response_class = default_response_class
|
||||||
self.generate_unique_id_function = generate_unique_id_function
|
self.generate_unique_id_function = generate_unique_id_function
|
||||||
|
|
||||||
|
def route(
|
||||||
|
self,
|
||||||
|
path: str,
|
||||||
|
methods: Optional[List[str]] = None,
|
||||||
|
name: Optional[str] = None,
|
||||||
|
include_in_schema: bool = True,
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.add_route(
|
||||||
|
path,
|
||||||
|
func,
|
||||||
|
methods=methods,
|
||||||
|
name=name,
|
||||||
|
include_in_schema=include_in_schema,
|
||||||
|
)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
def add_api_route(
|
def add_api_route(
|
||||||
self,
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
|
|
@ -686,6 +705,15 @@ class APIRouter(routing.Router):
|
||||||
|
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
def websocket_route(
|
||||||
|
self, path: str, name: Union[str, None] = None
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.add_websocket_route(path, func, name=name)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
def include_router(
|
def include_router(
|
||||||
self,
|
self,
|
||||||
router: "APIRouter",
|
router: "APIRouter",
|
||||||
|
|
@ -1247,3 +1275,12 @@ class APIRouter(routing.Router):
|
||||||
openapi_extra=openapi_extra,
|
openapi_extra=openapi_extra,
|
||||||
generate_unique_id_function=generate_unique_id_function,
|
generate_unique_id_function=generate_unique_id_function,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def on_event(
|
||||||
|
self, event_type: str
|
||||||
|
) -> Callable[[DecoratedCallable], DecoratedCallable]:
|
||||||
|
def decorator(func: DecoratedCallable) -> DecoratedCallable:
|
||||||
|
self.add_event_handler(event_type, func)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ classifiers = [
|
||||||
"Topic :: Internet :: WWW/HTTP",
|
"Topic :: Internet :: WWW/HTTP",
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"starlette==0.22.0",
|
"starlette>=0.22.0,<=0.23.0",
|
||||||
"pydantic >=1.6.2,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0",
|
"pydantic >=1.6.2,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0",
|
||||||
]
|
]
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
|
||||||
|
|
@ -46,5 +46,5 @@ def test_websocket():
|
||||||
|
|
||||||
def test_websocket_invalid_path_doesnt_match():
|
def test_websocket_invalid_path_doesnt_match():
|
||||||
with pytest.raises(WebSocketDisconnect):
|
with pytest.raises(WebSocketDisconnect):
|
||||||
with client.websocket_connect("/itemsx/portal-gun") as websocket:
|
with client.websocket_connect("/itemsx/portal-gun"):
|
||||||
websocket.receive_json()
|
pass
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue