without-asgi
without adapters that turn an ASGI application's
receive/send into typed event streams and back. This package is only the
boundary: it parses raw ASGI
event dicts into typed values, encodes typed values back into the dicts a server
expects, and exposes receive as a Stream and send as a Sink. Routing and
handlers are left to the application, and so is middleware apart from the few
pieces that need nothing but this vocabulary and therefore work under any router
and any server (concurrency and body-size limits, and negotiated response
compression). The one piece of protocol
the adapter does drive is lifespan, because that is boundary work, not app policy.
An ASGI app is async def app(scope, receive, send). The adapters let the body
of that callable read as plain without wiring:
from without_asgi import http_inbound, http_outbound, parse_http_scope
async def app(scope, receive, send):
head = parse_http_scope(scope)
handler = select(head) # your routing, your processor
outbound = handler(http_inbound(receive)) # Stream[Inbound] -> Stream[Outbound]
await http_outbound(send)(outbound) # drive ASGI send
make_asgi_app(lifespan, http=..., websocket=...) builds the ASGI app, driving
the lifespan protocol and wiring each connection's receive/send around the
Processor a router selects. The same typed vocabulary parses and encodes in
both directions, so a transport that owns the wire (like
without-http) can talk ASGI to any app in typed values; and
the optional without_asgi.routing submodule ships the unopinionated
Middleware / stack / wrap / buffered tools you assemble a router from,
with without_asgi.compression holding the negotiated response compression built
on them.
For a full, opinionated router you don't have to hand-roll, the sibling
without-web package snaps onto this boundary through nothing
but the HttpRouter type.
See the
without-asgi guide
(with the API reference)
for the full surface, including the codec's server direction and the middleware
body shapes.
Metadata
Release files for without-asgi 0.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| without_asgi-0.0.10.tar.gz | 72.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| without_asgi-0.0.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 153.8 kB
Release files / without_asgi-0.0.10.tar.gz
| Download URL | without_asgi-0.0.10.tar.gz |
|---|---|
| Size | 72.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
74c88490419b2b03b7bf09f736483bb957e9cb1c0f69f93522c9475b1fede000
|
|
BLAKE2b-256 checksum How to use checksums |
a64f27ad06274b36955d036aa494a24c16b1ecfe45c9adb06f34f756ef209042
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / without_asgi-0.0.10-py3-none-any.whl
| Download URL | without_asgi-0.0.10-py3-none-any.whl |
|---|---|
| Size | 81.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dad0aaf44f659659f43bc750ed3d4e729c54e2190d7437696b4b7c4fdab5ce5c
|
|
BLAKE2b-256 checksum How to use checksums |
6fa287a34348908f2e4ba9dc81bf5450268637df4972d7148f36b0fbfbbb1eb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|