Skip to content

Commit 2962755

Browse files
committed
feat(application): use buffers instead of logs
1 parent 42570cf commit 2962755

36 files changed

+497
-783
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[![Lines](https://img.shields.io/endpoint?url=https%3A%2F%2Fghloc.vercel.app%2Fapi%2Femptybutton%2Ftgdb%2Fbadge%3Ffilter%3D.py&logo=python&label=lines&color=blue)](https://github.com/search?q=repo%3Aemptybutton%2tgdb+language%3APython+&type=code)
66
[![Wakatime](https://wakatime.com/badge/user/0d3b7ff5-0547-4323-a43e-2a7308d973a0/project/2e316b92-fcf1-44d8-ad77-6c81e23cdfe2.svg)](https://wakatime.com/badge/user/0d3b7ff5-0547-4323-a43e-2a7308d973a0/project/2e316b92-fcf1-44d8-ad77-6c81e23cdfe2)
77

8-
ACID NoSQL РСУБД для хранения данных в телеграме.
8+
ACID NoSQL РСУБД поверх телеграма.
99

1010
```bash
1111
pip install tgdb

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "tgdb"
33
version = "0.1.0"
4-
description = "ACID NoSQL РСУБД для хранения данных в телеграме"
4+
description = "ACID NoSQL РСУБД поверх телеграма"
55
authors = [
66
{name = "Alexander Smolin", email = "[email protected]"}
77
]
@@ -15,6 +15,7 @@ dependencies = [
1515
"typenv>=0.2.0",
1616
"dishka>=1.4.2",
1717
"fastapi>=0.115.2",
18+
"pydantic>=2.11.4",
1819
"uvicorn[standard]>=0.30.6",
1920
]
2021

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
from collections.abc import AsyncIterable
1+
from collections.abc import Sequence
22
from dataclasses import dataclass
33

4-
from tgdb.application.ports.commit_serialization import CommitSerialization
4+
from tgdb.application.ports.buffer import Buffer
55
from tgdb.application.ports.queque import Queque
66
from tgdb.entities.transaction import TransactionCommit
77

88

9-
class InvalidOperatorError(Exception): ...
10-
11-
129
@dataclass(frozen=True)
13-
class OutputCommits[SerializedCommitT]:
14-
output_commits: Queque[TransactionCommit]
15-
commit_serialization: CommitSerialization[SerializedCommitT]
10+
class OutputCommits:
11+
commit_buffer: Buffer[TransactionCommit]
12+
output_commits: Queque[Sequence[TransactionCommit]]
1613

17-
async def __call__(self) -> AsyncIterable[SerializedCommitT]:
18-
async for commit in self.output_commits:
19-
yield await self.commit_serialization.serialized(commit)
14+
async def __call__(self) -> None:
15+
async for commits in self.commit_buffer:
16+
await self.output_commits.push(commits)
17+
await self.output_commits.sync()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from collections.abc import Sequence
2+
from dataclasses import dataclass
3+
4+
from tgdb.application.ports.notification import Notification
5+
from tgdb.application.ports.queque import Queque
6+
from tgdb.entities.transaction import TransactionCommit
7+
8+
9+
class InvalidOperatorError(Exception): ...
10+
11+
12+
@dataclass(frozen=True)
13+
class OutputCommitsToClients:
14+
output_commits: Queque[Sequence[TransactionCommit]]
15+
notification: Notification[Sequence[TransactionCommit]]
16+
17+
async def __call__(self) -> None:
18+
async for commits in self.output_commits:
19+
await self.notification.send(commits)
Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
1+
from collections.abc import Sequence
12
from dataclasses import dataclass
23

34
from tgdb.application.ports.heap import Heap
4-
from tgdb.application.ports.message import TransactionCommitMessage
55
from tgdb.application.ports.queque import Queque
6-
from tgdb.entities.transaction import TransactionOkCommit
6+
from tgdb.entities.transaction import TransactionCommit, TransactionOkCommit
77

88

99
@dataclass(frozen=True)
1010
class OutputCommitsToHeap:
1111
heap: Heap
12-
output_commit_messages: Queque[TransactionCommitMessage]
12+
output_commits: Queque[Sequence[TransactionCommit]]
1313

1414
async def __call__(self) -> None:
15-
async for message in self.output_commit_messages:
16-
if not isinstance(message.commit, TransactionOkCommit):
17-
return
15+
is_previous_map_partial = True
1816

19-
if message.is_commit_duplicate:
20-
await self.heap.map_as_duplicate(message.commit.effect)
17+
async for commits in self.output_commits:
18+
effects = tuple(
19+
commit.effect
20+
for commit in commits
21+
if isinstance(commit, TransactionOkCommit)
22+
)
23+
24+
if is_previous_map_partial:
25+
await self.heap.map_as_duplicate(effects)
26+
is_previous_map_partial = False
2127
else:
22-
await self.heap.map(message.commit.effect)
28+
await self.heap.map(effects)

src/tgdb/application/output_commits_to_log.py

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from abc import ABC, abstractmethod
2+
from collections.abc import AsyncIterable, Sequence
3+
4+
5+
class Buffer[ValueT](ABC, AsyncIterable[Sequence[ValueT]]):
6+
@abstractmethod
7+
async def add(self, value: ValueT, /) -> None: ...

src/tgdb/application/ports/commit_serialization.py

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

src/tgdb/application/ports/heap.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
from abc import ABC, abstractmethod
2+
from collections.abc import Sequence
23

34
from tgdb.entities.transaction import TransactionEffect
45

56

67
class Heap(ABC):
78
@abstractmethod
8-
async def map(self, effect: TransactionEffect, /) -> None: ...
9+
async def map(self, effects: Sequence[TransactionEffect], /) -> None: ...
910

1011
@abstractmethod
11-
async def map_as_duplicate(self, effect: TransactionEffect, /) -> None: ...
12+
async def map_as_duplicate(
13+
self, effects: Sequence[TransactionEffect], /
14+
) -> None: ...

src/tgdb/application/ports/log.py

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

0 commit comments

Comments
 (0)