Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions brand/build/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
7 changes: 4 additions & 3 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 }
Expand Down
108 changes: 108 additions & 0 deletions planning/changes/2026-07-02.04-aiohttp-surfaces/change.md
Original file line number Diff line number Diff line change
@@ -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.
5 changes: 3 additions & 2 deletions profile/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down