requires,
)
from starlette.endpoints import HTTPEndpoint
+from starlette.middleware import Middleware
from starlette.middleware.authentication import AuthenticationMiddleware
from starlette.requests import Request
from starlette.responses import JSONResponse
+from starlette.routing import Route, WebSocketRoute
from starlette.websockets import WebSocketDisconnect
return AuthCredentials(["authenticated"]), SimpleUser(username)
-app = Starlette()
-app.add_middleware(AuthenticationMiddleware, backend=BasicAuth())
-
-
-@app.route("/")
def homepage(request):
return JSONResponse(
{
)
-@app.route("/dashboard")
@requires("authenticated")
async def dashboard(request):
return JSONResponse(
)
-@app.route("/admin")
@requires("authenticated", redirect="homepage")
async def admin(request):
return JSONResponse(
)
-@app.route("/dashboard/sync")
@requires("authenticated")
def dashboard_sync(request):
return JSONResponse(
)
-@app.route("/dashboard/class")
class Dashboard(HTTPEndpoint):
@requires("authenticated")
def get(self, request):
)
-@app.route("/admin/sync")
@requires("authenticated", redirect="homepage")
def admin_sync(request):
return JSONResponse(
)
-@app.websocket_route("/ws")
@requires("authenticated")
async def websocket_endpoint(websocket):
await websocket.accept()
return wrapper
-@app.route("/dashboard/decorated")
@async_inject_decorator(additional="payload")
@requires("authenticated")
async def decorated_async(request, additional):
return wrapper
-@app.route("/dashboard/decorated/sync")
@sync_inject_decorator(additional="payload")
@requires("authenticated")
def decorated_sync(request, additional):
return wrapper
-@app.websocket_route("/ws/decorated")
@ws_inject_decorator(additional="payload")
@requires("authenticated")
async def websocket_endpoint_decorated(websocket, additional):
)
+app = Starlette(
+ middleware=[Middleware(AuthenticationMiddleware, backend=BasicAuth())],
+ routes=[
+ Route("/", endpoint=homepage),
+ Route("/dashboard", endpoint=dashboard),
+ Route("/admin", endpoint=admin),
+ Route("/dashboard/sync", endpoint=dashboard_sync),
+ Route("/dashboard/class", endpoint=Dashboard),
+ Route("/admin/sync", endpoint=admin_sync),
+ Route("/dashboard/decorated", endpoint=decorated_async),
+ Route("/dashboard/decorated/sync", endpoint=decorated_sync),
+ WebSocketRoute("/ws", endpoint=websocket_endpoint),
+ WebSocketRoute("/ws/decorated", endpoint=websocket_endpoint_decorated),
+ ],
+)
+
+
def test_invalid_decorator_usage():
with pytest.raises(Exception):