Comments (1)
This is just a rough outline of something I have thought about before in regards to how an ASGI application could use a list of middleware passed to a main application. I've tailored it to a Starlette
-like application because this how I would use it - curious if something along these lines (or any part of it) could work here:
class Starlette:
def __init__(self, middlewares: Sequence[ASGIApp] = []) -> None:
self.middlewares = middlewares
def compose_middleware(self, app: ASGIApp, scope: Scope) -> ASGIApp:
# Apply `self.middlewares` here
# Perhaps something similar to how AuthMiddlewareStack works in channels?
return app
def add_middleware(self, app: ASGIApp) -> None:
# For when we want to `app.add_middleware(middleware)`
self.middlewares.append(app)
def __call__(self, scope: Scope) -> ASGIInstance:
scope["app"] = self
return self.compose_middleware(app, scope)
If we could identify a robust means of composing any list of ASGI application middleware, then I'd imagine it would be flexible enough to do things like:
from somepackage import generic_middleware
from mypackage import my_middleware_middleware, my_other_middleware_specific_middleware
my_middleware = Starlette(
middlewares=[my_middleware_middleware, my_other_middleware_specific_middleware]
)
app = Starlette(middlewares=[generic_middleware, my_middleware])
Obviously this is a strange example, but just wanted to illustrate the composability aspect.
from starlette.
Related Issues (20)
- I have a problem about livestreaming connection starlette.websockets.WebSocketDisconnect: 1006
- error, when open env file. contained non-ascii string HOT 1
- SystemError when using gradio==4.12.0 with starlette>=0.30.0 on Python3.8 HOT 1
- Drop `python-multipart` dependency
- Warn users if setting too large of a session object
- Typing error for app.add_exception_handler (Argument "handler" to "add_exception_handler" of "Starlette" has incompatible type) HOT 1
- TrustedHostMiddleware raises RuntimeError on sending response to websocket HOT 2
- typing map _RequestData in testclient.py might be missing type bytes HOT 2
- Enable `branch = true` for `coverage.run` HOT 4
- Fetching API docs occasionally fails at starlette framework middleware issue with streaming large responses
- links on the release-notes not found. HOT 1
- Add `Partitioned` cookie attribute HOT 2
- `RuntimeError("No response returned")` in `BaseHTTPMiddleware` HOT 3
- Incompatibility with anyio v3
- TestClient DeprecationWarning with httpx 0.27.0 HOT 4
- Bug: `_TemplateResponse` is still relying on `request` key from `context` which maybe different from `request` argument to `TemplateResponse`. HOT 4
- How to change the value of request body?
- A `RuntimeError: Stream consumed` error is raised when `request.body()` is read in the custom middleware
- CORSMiddleware always add access-control-allow-credentials regardless of Origin
- ValueError when null byte in URL HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from starlette.