Skip to content

Commit a170c47

Browse files
committed
new modern-di
1 parent 66b8d27 commit a170c47

File tree

6 files changed

+95
-77
lines changed

6 files changed

+95
-77
lines changed

app/application.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
import dataclasses
22

33
import litestar
4+
import modern_di
45
import modern_di_litestar
56
from advanced_alchemy.exceptions import DuplicateKeyError
67
from lite_bootstrap import LitestarBootstrapper
78
from litestar.config.app import AppConfig
89
from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor
910
from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
1011

11-
from app import exceptions, ioc
12+
from app import exceptions, ioc, repositories
1213
from app.api.decks import ROUTER
1314
from app.settings import settings
1415

1516

1617
def build_app() -> litestar.Litestar:
18+
di_container = modern_di.AsyncContainer(groups=[ioc.Dependencies])
1719
bootstrap_config = dataclasses.replace(
1820
settings.api_bootstrapper_config,
1921
application_config=AppConfig(
2022
exception_handlers={
2123
DuplicateKeyError: exceptions.duplicate_key_error_handler,
2224
},
2325
route_handlers=[ROUTER],
24-
plugins=[modern_di_litestar.ModernDIPlugin()],
26+
plugins=[modern_di_litestar.ModernDIPlugin(di_container)],
2527
dependencies={
26-
"decks_service": modern_di_litestar.FromDI(ioc.Dependencies.decks_service),
27-
"cards_service": modern_di_litestar.FromDI(ioc.Dependencies.cards_service),
28+
"decks_service": modern_di_litestar.FromDI(repositories.DecksService),
29+
"cards_service": modern_di_litestar.FromDI(repositories.CardsService),
2830
},
2931
request_max_body_size=settings.request_max_body_size,
3032
),

app/ioc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
from modern_di import BaseGraph, Scope, providers
1+
from modern_di import Group, Scope, providers
22

33
from app import repositories
44
from app.resources.db import create_sa_engine, create_session
55

66

7-
class Dependencies(BaseGraph):
7+
class Dependencies(Group):
88
database_engine = providers.Resource(Scope.APP, create_sa_engine)
99
session = providers.Resource(Scope.REQUEST, create_session, engine=database_engine.cast)
1010

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ license = "MIT License"
1111
dependencies = [
1212
"litestar",
1313
"lite-bootstrap[litestar-all]",
14-
"modern-di-litestar",
14+
"modern-di-litestar>=1",
1515
"advanced-alchemy",
1616
"pydantic-settings",
1717
"granian[uvloop]",

tests/conftest.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ async def client(app: litestar.Litestar) -> typing.AsyncIterator[AsyncClient]:
2929

3030

3131
@pytest.fixture
32-
def di_container(app: litestar.Litestar) -> modern_di.Container:
32+
def di_container(app: litestar.Litestar) -> modern_di.AsyncContainer:
3333
return modern_di_litestar.fetch_di_container(app)
3434

3535

3636
@pytest.fixture(autouse=True)
37-
async def db_session(di_container: modern_di.Container) -> typing.AsyncIterator[AsyncSession]:
38-
engine = await ioc.Dependencies.database_engine.async_resolve(di_container)
37+
async def db_session(di_container: modern_di.AsyncContainer) -> typing.AsyncIterator[AsyncSession]:
38+
engine = await di_container.resolve_provider(ioc.Dependencies.database_engine)
3939
connection = await engine.connect()
4040
transaction = await connection.begin()
4141
await connection.begin_nested()
42-
ioc.Dependencies.database_engine.override(connection, di_container)
42+
di_container.override(ioc.Dependencies.database_engine, connection)
4343

4444
try:
4545
yield AsyncSession(connection, expire_on_commit=False, autoflush=False)

tests/test_main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_main(monkeypatch: pytest.MonkeyPatch) -> None:
1414

1515
async def test_session() -> None:
1616
async with (
17-
modern_di.Container(scope=modern_di.Scope.APP) as container,
17+
modern_di.AsyncContainer() as container,
1818
container.build_child_container(scope=modern_di.Scope.REQUEST) as request_container,
1919
):
20-
await ioc.Dependencies.session.async_resolve(request_container)
20+
await request_container.resolve_provider(ioc.Dependencies.session)

0 commit comments

Comments
 (0)