From d30ded8be3d3d7b66b70348fc572ad27e8b8edd8 Mon Sep 17 00:00:00 2001 From: Alexander Egorov Date: Mon, 12 Oct 2026 21:31:05 +0200 Subject: [PATCH] docs: plan a winter.wsgi adapter next to winter.asgi Leaving Django needs Winter's own HTTP host, and WSGI is enough for that: the handlers are synchronous. ASGI stays planned for when async handlers, WebSockets or streaming are needed. Co-Authored-By: Claude Opus 5.5 --- docs/architecture.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 1ff3a7d4..581e97bf 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -16,6 +16,7 @@ block-beta openapi["winter.openapi"] sqlalchemy["winter.sqlalchemy"] redis["winter.redis"] + wsgi["winter.wsgi"] asgi["winter.asgi"] rabbitmq["winter.rabbitmq"] end @@ -28,6 +29,7 @@ block-beta space space space + space end block:foundations columns 1 @@ -38,10 +40,12 @@ block-beta pagination["winter.pagination"] typing["winter.typing"] space + space end style la fill:none,stroke:none style lm fill:none,stroke:none style lf fill:none,stroke:none + style wsgi stroke-dasharray: 5 5 style asgi stroke-dasharray: 5 5 style rabbitmq stroke-dasharray: 5 5 ``` @@ -51,7 +55,7 @@ independent of each other. Dashed packages are planned and do not exist yet. | Layer | Rule | Packages | |---|---|---| -| Adapters | Bind the models to external technologies and standards. Independent of each other. | `django`, `openapi`, `sqlalchemy`, `redis`, `asgi` (planned), `rabbitmq` (planned) | +| Adapters | Bind the models to external technologies and standards. Independent of each other. | `django`, `openapi`, `sqlalchemy`, `redis`, `wsgi` (planned), `asgi` (planned), `rabbitmq` (planned) | | Models | Framework-agnostic descriptions of what an application does. Independent of each other. | `web` (HTTP), `ddd` (domain: aggregates, repositories, domain events), `messaging` (events) | | Foundations | Shared vocabulary and mechanisms. Unaware of the layers above. May use each other. | `components` (declarative metadata), `application` (scope, injector, discovery), `json`, `pagination`, `typing` (what the stdlib `typing` lacks) | @@ -80,8 +84,8 @@ at least two of them. service locator, and the behavioural registries of `winter.web` and `winter.openapi` are module singletons. `tests/test_application_scope.py` states the intended behaviour and is marked `xfail` until an `Application` instance owns that state. -- **`winter.asgi` and `winter.rabbitmq` do not exist yet.** HTTP is served through `winter.django` - only, and `winter.messaging` has no transport adapter. +- **`winter.wsgi`, `winter.asgi` and `winter.rabbitmq` do not exist yet.** HTTP is served through + `winter.django` only, and `winter.messaging` has no transport adapter. - **All dependencies are mandatory.** Django, SQLAlchemy, Redis and pydantic are installed with `winter` even when their adapter is not used; extras are the intended shape. - **`winter.openapi` recognises Django's `HttpResponseBase`** as a raw response type when Django