Skip to content

Commit 76248eb

Browse files
committed
feat: use InMemoryDb via lib
1 parent 939b406 commit 76248eb

File tree

6 files changed

+27
-74
lines changed

6 files changed

+27
-74
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies = [
1919
"sqlalchemy==2.0.38",
2020
"psycopg[binary]==3.2.5",
2121
"alembic==1.14.1",
22+
"in-memory-db==0.2.0",
2223
]
2324

2425
[project.optional-dependencies]
Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
from collections.abc import AsyncIterator, Sequence
22
from contextlib import asynccontextmanager
3-
from typing import Any
43

4+
from in_memory_db import InMemoryDb
55
from sqlalchemy.ext.asyncio import AsyncSession
66

7-
from app_name_snake_case.infrastructure.in_memory_storage import (
8-
TransactionalInMemoryStorage,
9-
)
10-
117

128
@asynccontextmanager
139
async def in_postgres_transaction(session: AsyncSession) -> AsyncIterator[None]:
@@ -17,17 +13,17 @@ async def in_postgres_transaction(session: AsyncSession) -> AsyncIterator[None]:
1713

1814
@asynccontextmanager
1915
async def in_memory_transaction(
20-
storages: Sequence[TransactionalInMemoryStorage[Any]]
16+
dbs: Sequence[InMemoryDb]
2117
) -> AsyncIterator[None]:
22-
for storage in storages:
23-
storage.begin()
18+
for db in dbs:
19+
db.begin()
2420

2521
try:
2622
yield
2723
except Exception as error:
28-
for storage in storages:
29-
storage.rollback()
24+
for db in dbs:
25+
db.rollback()
3026
raise error from error
3127
else:
32-
for storage in storages:
33-
storage.commit()
28+
for db in dbs:
29+
db.commit()

src/app_name_snake_case/infrastructure/adapters/users.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
from dataclasses import dataclass
22
from uuid import UUID
33

4+
from in_memory_db import InMemoryDb
45
from sqlalchemy.ext.asyncio import AsyncSession
56

67
from app_name_snake_case.application.ports.users import Users
78
from app_name_snake_case.entities.core.user import User
8-
from app_name_snake_case.infrastructure.in_memory_storage import (
9-
TransactionalInMemoryStorage,
10-
)
119
from app_name_snake_case.infrastructure.sqlalchemy import orm # noqa: F401
1210

1311

14-
@dataclass(kw_only=True, slots=True)
15-
class InMemoryUsers(Users, TransactionalInMemoryStorage[User]):
12+
@dataclass(frozen=True)
13+
class InMemoryUsers(Users):
14+
db: InMemoryDb
15+
1616
async def user_with_id(self, id: UUID) -> User | None:
17-
return self.select_one(lambda user: user.id == id)
17+
return self.db.subset(User).select_one(lambda user: user.id == id)
1818

1919

20-
@dataclass(kw_only=True, frozen=True, slots=True)
20+
@dataclass(frozen=True)
2121
class InPostgresUsers(Users):
2222
session: AsyncSession
2323

src/app_name_snake_case/infrastructure/in_memory_storage.py

Lines changed: 0 additions & 51 deletions
This file was deleted.

src/app_name_snake_case/infrastructure/view.py

Lines changed: 0 additions & 4 deletions
This file was deleted.

uv.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)