]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
⬆️ Bump Starlette from 0.22.0 to 0.23.0 (#5739)
authorMarcelo Trylesinski <marcelotryle@gmail.com>
Wed, 8 Feb 2023 10:23:07 +0000 (11:23 +0100)
committerGitHub <noreply@github.com>
Wed, 8 Feb 2023 10:23:07 +0000 (11:23 +0100)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
docs_src/app_testing/tutorial002.py
fastapi/applications.py
fastapi/routing.py
pyproject.toml
tests/test_route_scope.py

index b4a9c0586d78d2e750475eb01cbbad16d78e4552..71c898b3cfeaba8ac2c0e05b91bddb66f23e1eaf 100644 (file)
@@ -10,7 +10,7 @@ async def read_main():
     return {"msg": "Hello World"}
 
 
-@app.websocket_route("/ws")
+@app.websocket("/ws")
 async def websocket(websocket: WebSocket):
     await websocket.accept()
     await websocket.send_json({"msg": "Hello WebSocket"})
index 36dc2605d53c8f74eebcc960f46f864b7b314e9a..160d663015a654f14b070f7c4b2361117c996a84 100644 (file)
@@ -35,6 +35,7 @@ from starlette.applications import Starlette
 from starlette.datastructures import State
 from starlette.exceptions import HTTPException
 from starlette.middleware import Middleware
+from starlette.middleware.base import BaseHTTPMiddleware
 from starlette.middleware.errors import ServerErrorMiddleware
 from starlette.middleware.exceptions import ExceptionMiddleware
 from starlette.requests import Request
@@ -870,3 +871,35 @@ class FastAPI(Starlette):
             openapi_extra=openapi_extra,
             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
index f131fa903e46fbb262c7f43093f6248afc3326ae..7ab6275b67799fab7053cdd38db700ff258fc3b3 100644 (file)
@@ -522,6 +522,25 @@ class APIRouter(routing.Router):
         self.default_response_class = default_response_class
         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(
         self,
         path: str,
@@ -686,6 +705,15 @@ class APIRouter(routing.Router):
 
         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(
         self,
         router: "APIRouter",
@@ -1247,3 +1275,12 @@ class APIRouter(routing.Router):
             openapi_extra=openapi_extra,
             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
index 7fb8078f95f2954cf9345df99ed33f928c2b31b0..4498f94320e66a008f971c9e7d202c31804ab9ea 100644 (file)
@@ -39,7 +39,7 @@ classifiers = [
     "Topic :: Internet :: WWW/HTTP",
 ]
 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",
 ]
 dynamic = ["version"]
index a188e9a5fe5b9e1ddc66c33f8342340ee5f89c69..2021c828f4937767a61aab76d693d5912d5613eb 100644 (file)
@@ -46,5 +46,5 @@ def test_websocket():
 
 def test_websocket_invalid_path_doesnt_match():
     with pytest.raises(WebSocketDisconnect):
-        with client.websocket_connect("/itemsx/portal-gun") as websocket:
-            websocket.receive_json()
+        with client.websocket_connect("/itemsx/portal-gun"):
+            pass