[Web-SIG] WSGI Middleware Dependancy Graphing (was: PEP 444 / WSGI 2 Async)
Alice Bevan–McGregor
alice at gothcandy.com
Thu Jan 6 22:59:54 CET 2011
On 2011-01-06 13:08:04 -0800, Robert Brewer said:
> Or, if you had actually read what I wrote weeks ago...
I did. Apologies for forgetting the detail of the implementation being
deprecated.
> We don't need Yet Another Way of hooking in processing components; if
> anything, we need a standard mechanism to compose existing middleware
> graphs so that invariant orderings are explicit and guaranteed. For
> example, "encode, then gzip, then cache". By introducing egress filters
> as described in PEP 444 (which mentions gzip as a candidate for an
> egress filter), you're then stuck in a tug-of-war as to whether to
> build a new caching component as middleware, as an egress filter, or
> (most likely, in order to compete) both.
I do, in fact, have a proposal for declaring dependancies, however such
declaration is utterly useless unless differing middleware-based
implementations (e.g. sessions) can agree on a common API for their
feature sets. I feel strongly that this idea does not belong in PEP
444; it's one of the few things I think should be its own PEP.
My mechanism (for which I do have a working implementation against WSGI
1; my web framework uses it) involves middleware layers declaring
several attributes on themselves:
provides - abstract API names
uses - ordering hint, no dependancy
needs - die if dependancy is not met
before - explicit ordering, including "*"
after - explicit ordering, including "*"
For this to really work, however, it'd also need either an
entrypoint-based way of looking up components (making the graph truly
dynamic), or it needs to be combined with explicit packages a la
setuptools.require. In that instance, you've already done the ordering
yourself, so dependancy graphing is moot.
- Alice.
More information about the Web-SIG
mailing list