Skip to content

Commit 3944da3

Browse files
committed
fix: fix data types
1 parent fd8e800 commit 3944da3

File tree

11 files changed

+58
-58
lines changed

11 files changed

+58
-58
lines changed

deploy/dev/tgdb/conf.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ conf:
1414
horizon:
1515
max_len: 10_000
1616
transaction:
17-
max_age_seconds: 10
17+
max_age_seconds: 120
1818

1919
message_cache:
2020
max_len: 1_000_000

src/tgdb/infrastructure/adapters/channel.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from asyncio import wait_for
12
from collections.abc import Mapping, Sequence
23
from dataclasses import dataclass
34

@@ -15,6 +16,7 @@ class AsyncMapChannel(Channel):
1516
_async_map: AsyncMap[
1617
XID, NoTransactionError | TransactionNotCommittingError | None
1718
]
19+
_timeout_seconds: int | float
1820

1921
async def publish(
2022
self,
@@ -32,5 +34,8 @@ async def publish(
3234
del self._async_map[error_commit_xid]
3335

3436
async def wait(self, xid: XID) -> Notification:
35-
notification_error = await self._async_map[xid]
37+
notification_error = await wait_for(
38+
self._async_map[xid], self._timeout_seconds
39+
)
40+
3641
return Notification(notification_error)

src/tgdb/infrastructure/adapters/relations.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ async def relation(self, relation_number: Number) -> Relation:
2424
lambda it: it.number() == relation_number
2525
)
2626
if relation is None:
27-
raise NoRelationError(relation_number)
27+
raise NoRelationError
2828

2929
return relation
3030

@@ -57,6 +57,9 @@ async def __aexit__(
5757
traceback: TracebackType | None,
5858
) -> None: ...
5959

60+
def cache(self) -> InMemoryDb[Relation]:
61+
return self._cached_relations
62+
6063
async def relation(self, relation_number: Number) -> Relation:
6164
"""
6265
:raises tgdb.application.relation.ports.relations.NoRelationError:
Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections.abc import Awaitable, Generator
2-
from dataclasses import dataclass, field
2+
from dataclasses import dataclass
33
from io import BytesIO
44
from typing import Any, cast
55

@@ -14,39 +14,23 @@ class InTelegramBytes(Awaitable[bytes | None]):
1414
_pool_to_select: TelegramClientPool
1515
_chat_id: int
1616

17-
_cached_stored_bytes: bytes | None = field(init=False, default=None)
18-
1917
def __await__(self) -> Generator[Any, Any, bytes | None]:
2018
return self._get().__await__()
2119

2220
async def set(self, bytes: bytes) -> None:
23-
client = self._pool_to_insert()
24-
25-
await client.send_message(
26-
self._chat_id, file=bytes
27-
)
28-
self._cached_stored_bytes = bytes
21+
await self._pool_to_insert().send_message(self._chat_id, file=bytes)
2922

3023
async def _get(self) -> bytes | None:
31-
if self._cached_stored_bytes is not None:
32-
return self._cached_stored_bytes
33-
34-
await self._refresh()
35-
return self._cached_stored_bytes
36-
37-
async def _refresh(self) -> None:
3824
messages = await self._pool_to_select().get_messages(
39-
self._chat_id, limit=1, min_id=1
25+
self._chat_id, min_id=1
4026
)
4127
messages = cast(TotalList, messages)
4228

4329
if not messages:
44-
return
30+
return None
4531

4632
last_message = messages[-1]
4733

4834
with BytesIO() as stream:
4935
await self._pool_to_select().download_file(last_message, stream)
50-
stored_bytes = stream.getvalue()
51-
52-
self._cached_stored_bytes = stored_bytes
36+
return stream.getvalue()

src/tgdb/main/common/di.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from collections.abc import AsyncIterator, Sequence
33
from typing import NewType
44

5-
from dishka import Provider, Scope, make_container, provide
5+
from dishka import AnyOf, Provider, Scope, make_container, provide
66
from in_memory_db import InMemoryDb
77

88
from tgdb.application.common.ports.buffer import Buffer
@@ -69,16 +69,17 @@ def provide_conf(self, envs: Envs) -> TgdbConfig:
6969
class CommonProvider(Provider):
7070
provide_clock = provide(PerfCounterClock, provides=Clock, scope=Scope.APP)
7171
provide_uuids = provide(UUIDs4, provides=UUIDs, scope=Scope.APP)
72-
provide_queque = provide(
72+
provide_commit_queque = provide(
7373
staticmethod(lambda: InMemoryQueque(AsyncQueque())),
7474
provides=Queque[Sequence[Commit | PreparedCommit]],
7575
scope=Scope.APP
7676
)
77-
provide_channel = provide(
78-
staticmethod(lambda: AsyncMapChannel(AsyncMap())),
79-
provides=Channel,
80-
scope=Scope.APP,
81-
)
77+
78+
@provide(scope=Scope.APP)
79+
def provide_channel(self, config: TgdbConfig) -> Channel:
80+
return AsyncMapChannel(
81+
AsyncMap(), config.horizon.transaction.max_age_seconds
82+
)
8283

8384
@provide(scope=Scope.APP)
8485
async def provide_bot_pool(
@@ -178,22 +179,17 @@ async def provide_buffer(
178179
async with biffer:
179180
yield biffer
180181

181-
@provide(scope=Scope.APP)
182-
def provide_relation_cache(self) -> RelationCache:
183-
return RelationCache(InMemoryDb())
184-
185-
@provide(scope=Scope.APP)
182+
@provide(scope=Scope.APP, )
186183
async def provide_relations(
187184
self,
188185
config: TgdbConfig,
189186
bot_pool: BotPool,
190187
user_bot_pool: UserBotPool,
191-
relation_cache: RelationCache,
192-
) -> AsyncIterator[Relations]:
188+
) -> AsyncIterator[AnyOf[Relations, InTelegramReplicableRelations]]:
193189
in_tg_bytes = InTelegramBytes(
194190
bot_pool, user_bot_pool, config.relations.chat
195191
)
196-
relations = InTelegramReplicableRelations(in_tg_bytes, relation_cache)
192+
relations = InTelegramReplicableRelations(in_tg_bytes, InMemoryDb())
197193

198194
async with relations:
199195
yield relations

src/tgdb/main/server/di.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from tgdb.application.relation.ports.relation_views import RelationViews
99
from tgdb.application.relation.view_all_relations import ViewAllRelations
1010
from tgdb.application.relation.view_relation import ViewRelation
11-
from tgdb.main.common.di import CommonProvider, MainIOProvider, RelationCache
11+
from tgdb.infrastructure.adapters.relations import InTelegramReplicableRelations
12+
from tgdb.main.common.di import CommonProvider, MainIOProvider
1213
from tgdb.presentation.adapters.relation_views import (
1314
RelationSchemasFromInMemoryDbAsRelationViews,
1415
)
@@ -27,9 +28,9 @@
2728
class FastAPIProvider(Provider):
2829
@provide(scope=Scope.APP)
2930
def provide_relation_views(
30-
self, relation_cache: RelationCache
31+
self, relations: InTelegramReplicableRelations
3132
) -> RelationViews[RelationListSchema, RelationSchema | None]:
32-
return RelationSchemasFromInMemoryDbAsRelationViews(relation_cache)
33+
return RelationSchemasFromInMemoryDbAsRelationViews(relations.cache())
3334

3435
provide_view_relation = provide(
3536
ViewRelation[RelationListSchema, RelationSchema | None],

src/tgdb/presentation/fastapi/common/schemas/operator.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
from typing import Literal
1+
from typing import Annotated, Literal
22
from uuid import UUID
33

4-
from pydantic import BaseModel, Field, PositiveInt
4+
from annotated_types import Ge
5+
from pydantic import BaseModel, Field
56

67
from tgdb.application.common.operator import (
78
DeletedTupleOperator,
@@ -16,7 +17,7 @@
1617

1718
class InsertOperatorSchema(BaseModel):
1819
action: Literal["insert"] = "insert"
19-
relation_number: PositiveInt = Field(alias="relationNumber")
20+
relation_number: Annotated[int, Ge(0)] = Field(alias="relationNumber")
2021
scalars: tuple[Scalar, ...]
2122

2223
def decoded(self) -> NewTupleOperator:
@@ -25,7 +26,7 @@ def decoded(self) -> NewTupleOperator:
2526

2627
class UpdateOperatorSchema(BaseModel):
2728
action: Literal["update"] = "update"
28-
relation_number: PositiveInt = Field(alias="relationNumber")
29+
relation_number: Annotated[int, Ge(0)] = Field(alias="relationNumber")
2930
tid: TID
3031
scalars: tuple[Scalar, ...]
3132

src/tgdb/presentation/fastapi/relation/routes/create_relation.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11

2+
from typing import Annotated
3+
4+
from annotated_types import Ge
25
from dishka.integrations.fastapi import FromDishka, inject
36
from fastapi import APIRouter, status
47
from fastapi.responses import Response
5-
from pydantic import BaseModel, Field, PositiveInt
8+
from pydantic import BaseModel, Field
69

710
from tgdb.application.relation.create_relation import CreateRelation
811
from tgdb.entities.numeration.number import Number
@@ -36,7 +39,7 @@ class CreateRelationSchema(BaseModel):
3639
@inject
3740
async def _(
3841
create_relation: FromDishka[CreateRelation],
39-
relation_number: PositiveInt,
42+
relation_number: Annotated[int, Ge(0)],
4043
request_body: CreateRelationSchema,
4144
) -> Response:
4245
await create_relation(

src/tgdb/presentation/fastapi/relation/routes/view_relation.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
from typing import Annotated
12

3+
from annotated_types import Ge
24
from dishka.integrations.fastapi import FromDishka, inject
35
from fastapi import APIRouter, status
46
from fastapi.responses import JSONResponse, Response
5-
from pydantic import PositiveInt
67

78
from tgdb.application.relation.view_relation import ViewRelation
89
from tgdb.entities.numeration.number import Number
@@ -32,7 +33,7 @@ async def _(
3233
view_relation: FromDishka[
3334
ViewRelation[RelationListSchema, RelationSchema | None]
3435
],
35-
relation_number: PositiveInt,
36+
relation_number: Annotated[int, Ge(0)],
3637
) -> Response:
3738
view = await view_relation(Number(relation_number))
3839

src/tgdb/presentation/fastapi/relation/routes/view_tuples.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from collections.abc import Iterable
2+
from typing import Annotated
23

4+
from annotated_types import Ge
35
from dishka.integrations.fastapi import FromDishka, inject
46
from fastapi import APIRouter, status
57
from fastapi.responses import JSONResponse, Response
6-
from pydantic import BaseModel, Field, PositiveInt
8+
from pydantic import BaseModel, Field
79

810
from tgdb.application.relation.view_tuples import ViewTuples
911
from tgdb.entities.horizon.transaction import XID
@@ -23,7 +25,7 @@
2325

2426

2527
class ViewTupleSchema(BaseModel):
26-
attribute_number: PositiveInt = Field(alias="attributeNumber")
28+
attribute_number: Annotated[int, Ge(0)] = Field(alias="attributeNumber")
2729
attribute_scalar: Scalar = Field(alias="attributeScalar")
2830

2931

@@ -54,7 +56,7 @@ def of(cls, tuples: Iterable[Tuple]) -> "ViewedTuplesSchema":
5456
@inject
5557
async def _(
5658
view_tuples: FromDishka[ViewTuples],
57-
relation_number: PositiveInt,
59+
relation_number: Annotated[int, Ge(0)],
5860
request_body: ViewTupleSchema,
5961
xid: XID | None = None,
6062
) -> Response:

0 commit comments

Comments
 (0)