diff --git a/brand/build/projects.py b/brand/build/projects.py index 3a47edb..c9bdb0c 100644 --- a/brand/build/projects.py +++ b/brand/build/projects.py @@ -18,13 +18,13 @@ # dependency injection "modern-di": lambda: sym.graph(_CX, _CY, R, dashed=True), "that-depends": lambda: sym.graph(_CX, _CY, R, dashed=False), + "modern-di-aiohttp": lambda: sym.async_loop(_CX, _CY, R), "modern-di-fastapi": lambda: sym.bolt_disc(_CX, _CY, R), + "modern-di-faststream": lambda: sym.faststream(_CX, _CY, R), "modern-di-litestar": lambda: sym.star_disc(_CX, _CY, R), + "modern-di-pytest": lambda: sym.bars(_CX, _CY, R), "modern-di-starlette": lambda: sym.sparkle_cluster(_CX, _CY, R), - "modern-di-aiohttp": lambda: sym.async_loop(_CX, _CY, R), - "modern-di-faststream": lambda: sym.faststream(_CX, _CY, R), "modern-di-typer": lambda: sym.terminal(_CX, _CY, R), - "modern-di-pytest": lambda: sym.bars(_CX, _CY, R), # templates — reuse the org chevron "fastapi-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), "litestar-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), diff --git a/docs/index.md b/docs/index.md index 3b572c4..c4e2a6c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -67,7 +67,7 @@ production Python services. Use one piece or all of them — each is independent - **Wire your dependencies** with [`modern-di`](https://github.com/modern-python/modern-di) — typed, scoped dependency injection with one wiring shared across FastAPI, Litestar, - Starlette, FastStream, and Typer. + Starlette, aiohttp, FastStream, and Typer. ([`that-depends`](https://github.com/modern-python/that-depends), its production-proven predecessor, is still maintained.) - **Call other services reliably** with @@ -96,12 +96,13 @@ catalog below. ## Dependency injection { #di } - [`modern-di`](https://github.com/modern-python/modern-di) — powerful DI framework with scopes. +- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. - [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) — `modern-di` integration for FastAPI. +- [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) — `modern-di` integration for FastStream. - [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) — `modern-di` integration for Litestar. +- [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) — `modern-di` integration for pytest. - [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) — `modern-di` integration for Starlette. -- [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) — `modern-di` integration for FastStream. - [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) — `modern-di` integration for Typer. -- [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) — `modern-di` integration for pytest. - [`that-depends`](https://github.com/modern-python/that-depends) — predecessor DI framework, still actively maintained. ## Microservices, HTTP & messaging { #services } diff --git a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md new file mode 100644 index 0000000..c66622f --- /dev/null +++ b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md @@ -0,0 +1,108 @@ +--- +summary: Ready-to-fire — add modern-di-aiohttp to the profile README, docs site, and its GitHub repo settings once the repo is public. +--- + +# Change: modern-di-aiohttp public surfaces (deferred) + +## Status + +**Partially applied.** The repo went public before the package was published to +PyPI. Progress so far: + +- **GitHub repo settings — DONE.** Applied once the repo was public: description + was already `modern-di integration for aiohttp`; homepage set to + `https://modern-di.modern-python.org`; topics set to `python, + dependency-injection, di, ioc-container, modern-di, aiohttp`. Verified via + `gh repo view`. +- **Profile README row + docs-site listing — DONE (shipped ahead of PyPI).** + Maintainer chose to ship the listing now even though the package is not on + PyPI yet (`/pypi/modern-di-aiohttp/json` → 404). Consequence: the pepy + Downloads badge on the new profile row 404s until the package is published to + PyPI and pepy indexes it — same self-healing lag pattern seen for + `modern-di-starlette`. All other elements (repo link, Stars badge) resolve. +- **DI section sorted alphabetically (folded in).** Per maintainer request, the + Dependency injection integrations are now ordered alphabetically across the + profile table, the docs DI list, and the `MANIFEST` (`modern-di` stays first, + `that-depends` last). This supersedes the earlier "insert after Starlette" + placement — `modern-di-aiohttp` now lands in its alphabetical slot. Future + integrations slot in alphabetically, no insertion-point decision needed. + +The brand mark and assets are already done and merged (bundle +`2026-07-02.02-aiohttp-brand`, PR #31) — `brand/projects/modern-di-aiohttp/` +exists on `main`. + +## Precondition check (run first, all must pass) + +```bash +gh repo view modern-python/modern-di-aiohttp --json name # resolves +curl -s -o /dev/null -w '%{http_code}' https://pypi.org/pypi/modern-di-aiohttp/json # 200 +``` + +## Edits + +Canonical one-liner, used verbatim: **`modern-di integration for aiohttp`** +(note lowercase `aiohttp`). Insert everywhere immediately **after** +`modern-di-starlette` (order: fastapi -> litestar -> starlette -> aiohttp). + +### 1. `profile/README.md` — Dependency injection table + +Insert after the `modern-di-starlette` row. Match the current 4-column format +(`| Project | What it is | Stars | Downloads |`, post-#30 — no PyPI/Context7): + +```markdown +| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | +``` + +### 2. `docs/index.md` — DI list (`## Dependency injection { #di }`) + +Insert after the `modern-di-starlette` bullet: + +```markdown +- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. +``` + +### 3. `docs/index.md` — "The stack" sentence + +Add `aiohttp,` after `Starlette,`. Replace: + +``` + dependency injection with one wiring shared across FastAPI, Litestar, + Starlette, FastStream, and Typer. +``` + +with: + +``` + dependency injection with one wiring shared across FastAPI, Litestar, + Starlette, aiohttp, FastStream, and Typer. +``` + +### 4. GitHub repo settings (read-then-diff, apply only what's missing) + +```bash +gh repo view modern-python/modern-di-aiohttp --json description,homepageUrl,repositoryTopics +gh repo edit modern-python/modern-di-aiohttp \ + --description "modern-di integration for aiohttp" \ + --homepage "https://modern-di.modern-python.org" \ + --add-topic python --add-topic dependency-injection --add-topic di \ + --add-topic ioc-container --add-topic modern-di --add-topic aiohttp +``` + +## Verification (post-publish) + +- `just check-planning` -> `planning: OK`; `just test` green (no code touched, + but run the gate). +- `grep -c modern-di-aiohttp profile/README.md` -> 1; `... docs/index.md` -> 1 + (the DI bullet; the stack sentence names "aiohttp", not the slug). +- Badge/link resolve: `curl -sI` the Stars + Downloads badge URLs and the repo + link return 200 (Downloads may lag until pepy indexes the new package — the + same self-healing lag seen for modern-di-starlette; note it, do not block). +- `gh repo view` reflects the intended description, homepage, and topics. +- The `modern-di-aiohttp` README's brand images already resolve (assets on + `main` since #31). + +## Notes + +Ship as one PR (this bundle finalized + the two file edits) once unblocked; the +GitHub-settings step is out-of-repo and applied alongside. Independent of any +other pending work. diff --git a/profile/README.md b/profile/README.md index 5f768d2..1e59a18 100644 --- a/profile/README.md +++ b/profile/README.md @@ -24,12 +24,13 @@ Open-source templates and libraries for building production-ready Python applica | Project | What it is | Stars | Downloads | |---|---|---|---| | [`modern-di`](https://github.com/modern-python/modern-di) | Powerful DI framework with scopes | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di)](https://github.com/modern-python/modern-di/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di/month)](https://pepy.tech/projects/modern-di) | +| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | | [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) | modern-di integration for FastAPI | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-fastapi)](https://github.com/modern-python/modern-di-fastapi/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-fastapi/month)](https://pepy.tech/projects/modern-di-fastapi) | +| [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) | modern-di integration for FastStream | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-faststream)](https://github.com/modern-python/modern-di-faststream/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-faststream/month)](https://pepy.tech/projects/modern-di-faststream) | | [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) | modern-di integration for Litestar | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-litestar)](https://github.com/modern-python/modern-di-litestar/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-litestar/month)](https://pepy.tech/projects/modern-di-litestar) | +| [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) | modern-di integration for pytest | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-pytest)](https://github.com/modern-python/modern-di-pytest/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-pytest/month)](https://pepy.tech/projects/modern-di-pytest) | | [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) | modern-di integration for Starlette | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-starlette)](https://github.com/modern-python/modern-di-starlette/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-starlette/month)](https://pepy.tech/projects/modern-di-starlette) | -| [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) | modern-di integration for FastStream | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-faststream)](https://github.com/modern-python/modern-di-faststream/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-faststream/month)](https://pepy.tech/projects/modern-di-faststream) | | [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) | modern-di integration for Typer | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-typer)](https://github.com/modern-python/modern-di-typer/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-typer/month)](https://pepy.tech/projects/modern-di-typer) | -| [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) | modern-di integration for pytest | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-pytest)](https://github.com/modern-python/modern-di-pytest/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-pytest/month)](https://pepy.tech/projects/modern-di-pytest) | | [`that-depends`](https://github.com/modern-python/that-depends) | Predecessor DI framework, still actively maintained | [![Stars](https://img.shields.io/github/stars/modern-python/that-depends)](https://github.com/modern-python/that-depends/stargazers) | [![Downloads](https://static.pepy.tech/badge/that-depends/month)](https://pepy.tech/projects/that-depends) | ### Microservices, HTTP & messaging