Skip to content

Commit b494a59

Browse files
committed
fix: fix linter errors
1 parent 5dbf238 commit b494a59

File tree

9 files changed

+56
-45
lines changed

9 files changed

+56
-45
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ lines-after-imports = 2
7676
"src/tgdb/entities/*" = ["PLR2004"]
7777
"src/tgdb/application/*" = ["PLR0917"]
7878
"src/tgdb/infrastructure/adapters/*" = ["RUF029"]
79+
"src/tgdb/infrastructure/*" = ["S403", "S301"]
7980
"tests/*" = ["PLR0124", "PLR0917", "S106", "C901", "PLR2004"]
8081
"__init__.py" = ["PLC0414"]
8182

src/tgdb/entities/horizon/horizon.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def commit_transaction(
140140
self,
141141
time: LogicTime,
142142
xid: XID,
143-
effects: Sequence[HorizonWriteEffect] | None,
143+
effects: Sequence[HorizonWriteEffect],
144144
) -> Commit | PreparedCommit:
145145
"""
146146
:raises tgdb.entities.horizon.horizon.NotMonotonicTimeError:

src/tgdb/entities/relation/tuple.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ def matches(self, schema: Schema) -> bool:
3737
def __getitem__(self, index: int, /) -> Scalar: ...
3838

3939
@overload
40-
def __getitem__(self, sclice: "slice[Any, Any, Any]", /) -> Sequence[Scalar]:
40+
def __getitem__(
41+
self, sclice: "slice[Any, Any, Any]", /
42+
) -> Sequence[Scalar]:
4143
...
4244

4345
def __getitem__(

src/tgdb/infrastructure/adapters/tuples.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@
1818
MutatedTuple,
1919
NewTuple,
2020
)
21-
from tgdb.infrastructure.heap_tuple_encoding import HeapTupleEncoding
22-
from tgdb.infrastructure.telethon.client_pool import TelegramClientPool
2321
from tgdb.infrastructure.telethon.in_telegram_heap import InTelegramHeap
24-
from tgdb.infrastructure.telethon.lazy_message_map import LazyMessageMap
2522

2623

2724
@dataclass(frozen=True, unsafe_hash=False)
@@ -97,7 +94,9 @@ async def tuples_with_attribute(
9794
attribute_number: Number,
9895
attribute_scalar: Scalar,
9996
) -> Sequence[Tuple]:
100-
97+
return await self._heap.tuples_with_attribute(
98+
relation_number, attribute_number, attribute_scalar
99+
)
101100

102101
async def map(
103102
self, transaction_effects: Sequence[TransactionEffect]

src/tgdb/infrastructure/heap_tuple_encoding.py

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616

1717

1818
class Separator(Enum):
19-
first_level = "\uffff"
20-
second_level = "\ufffe"
19+
top_tuple = "\uffff"
20+
top_metadata = "\ufffe"
21+
top_attribute = "\ufffd"
2122

2223

2324
heap_tuple_table = ReversibleTranslationTable({
@@ -28,32 +29,35 @@ class Separator(Enum):
2829
class HeapTupleEncoding:
2930
@staticmethod
3031
def encoded_tuple(tuple_: Tuple) -> str:
31-
encoded_metadata = HeapTupleMetadataEncoding.encoded_metadata(tuple_)
32+
encoded_metadata = _HeapTupleMetadataEncoding.encoded_metadata(
33+
int(tuple_.relation_version_id.relation_version_number),
34+
int(tuple_.relation_version_id.relation_number),
35+
tuple_.tid,
36+
)
3237
encoded_attributes = (
33-
HeapTupleAttributeEncoding.encoded_attribute(
38+
_HeapTupleAttributeEncoding.encoded_attribute(
3439
int(tuple_.relation_version_id.relation_number),
3540
attribute_number,
3641
tuple_[attribute_number],
3742
)
3843
for attribute_number in range(len(tuple_))
3944
)
4045

41-
encoded_tuple_without_end = Separator.first_level.value.join(
46+
return Separator.top_tuple.value.join(
4247
(encoded_metadata, *encoded_attributes)
4348
)
44-
return f"{encoded_tuple_without_end}{Separator.first_level.value}"
4549

4650
@staticmethod
4751
def decoded_tuple(encoded_tuple: str) -> Tuple:
4852
encoded_metadata, *encoded_attributes = (
49-
encoded_tuple.split(Separator.first_level.value)
53+
encoded_tuple.split(Separator.top_tuple.value)
5054
)
5155

52-
tid, relation_version_id = HeapTupleMetadataEncoding.decoded_metadata(
56+
tid, relation_version_id = _HeapTupleMetadataEncoding.decoded_metadata(
5357
encoded_metadata
5458
)
5559
scalars = tuple(map(
56-
HeapTupleAttributeEncoding.decoded_scalar, encoded_attributes
60+
_HeapTupleAttributeEncoding.decoded_scalar, encoded_attributes
5761
))
5862

5963
return Tuple(tid, relation_version_id, scalars)
@@ -64,35 +68,35 @@ def id_of_encoded_tuple_with_attribute(
6468
attribute_number: int,
6569
attribute_scalar: Scalar,
6670
) -> str:
67-
encoded_attribute = HeapTupleAttributeEncoding.encoded_attribute(
71+
return _HeapTupleAttributeEncoding.encoded_attribute(
6872
relation_number,
6973
attribute_number,
7074
attribute_scalar
7175
)
7276

73-
return (
74-
f"{Separator.first_level.value}"
75-
f"{encoded_attribute}"
76-
f"{Separator.first_level.value}"
77-
)
77+
@staticmethod
78+
def id_of_encoded_tuple_with_tid(tid: TID) -> str:
79+
return _HeapTupleMetadataEncoding.id_of_encoded_tuple_with_tid(tid)
7880

7981

80-
type HeapTupleMetadata = tuple[TID, RelationVersionID]
82+
type _HeapTupleMetadata = tuple[TID, RelationVersionID]
8183

8284

83-
class HeapTupleMetadataEncoding:
85+
class _HeapTupleMetadataEncoding:
8486
@staticmethod
85-
def encoded_metadata(tuple: Tuple) -> str:
86-
return Separator.second_level.value.join((
87-
encoded_int(int(tuple.relation_version_id.relation_version_number)),
88-
encoded_int(int(tuple.relation_version_id.relation_number)),
89-
encoded_uuid(tuple.tid),
87+
def encoded_metadata(
88+
relation_number: int, relation_version_number: int, tid: TID
89+
) -> str:
90+
return Separator.top_metadata.value.join((
91+
encoded_int(relation_version_number),
92+
encoded_int(relation_number),
93+
encoded_uuid(tid),
9094
))
9195

9296
@staticmethod
93-
def decoded_metadata(encoded_metadata: str) -> HeapTupleMetadata:
97+
def decoded_metadata(encoded_metadata: str) -> _HeapTupleMetadata:
9498
encoded_version_number, encoded_relation_number, encoded_tid = (
95-
encoded_metadata.split(Separator.second_level.value)
99+
encoded_metadata.split(Separator.top_metadata.value)
96100
)
97101

98102
relation_version_number = (Number(decoded_int(encoded_version_number)))
@@ -103,15 +107,19 @@ def decoded_metadata(encoded_metadata: str) -> HeapTupleMetadata:
103107

104108
return tid, version_id
105109

110+
@staticmethod
111+
def id_of_encoded_tuple_with_tid(tid: TID) -> str:
112+
return f"{Separator.top_metadata.value}{encoded_uuid(tid)}"
113+
106114

107-
class HeapTupleAttributeEncoding:
115+
class _HeapTupleAttributeEncoding:
108116
@staticmethod
109117
def encoded_attribute(
110118
relation_number: int,
111119
attribute_number: int,
112120
scalar: Scalar,
113121
) -> str:
114-
return Separator.second_level.value.join((
122+
return Separator.top_attribute.value.join((
115123
encoded_int(relation_number),
116124
encoded_int(attribute_number),
117125
encoded_primitive_with_type(scalar, heap_tuple_table),
@@ -120,7 +128,7 @@ def encoded_attribute(
120128
@staticmethod
121129
def decoded_scalar(encoded_attribute: str) -> Scalar:
122130
_, _, encoded_scalar = encoded_attribute.split(
123-
Separator.second_level.value
131+
Separator.top_attribute.value
124132
)
125133

126134
return decoded_primitive_with_type(encoded_scalar, heap_tuple_table)

src/tgdb/infrastructure/lazy_map.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
@dataclass(frozen=True, unsafe_hash=False)
88
class LazyMap[KeyT, ValueT]:
99
_computed_map_max_len: int
10-
value_by_key: Callable[[KeyT], Awaitable[ValueT | None]]
10+
_external_value: Callable[[KeyT], Awaitable[ValueT | None]]
1111
_computed_map: OrderedDict[KeyT, ValueT] = field(
1212
init=False, default_factory=OrderedDict
1313
)
@@ -16,7 +16,7 @@ async def __getitem__(self, key: KeyT) -> ValueT | None:
1616
with suppress(KeyError):
1717
return self._computed_map[key]
1818

19-
value = await self.value_by_key(key)
19+
value = await self._external_value(key)
2020

2121
if value is None:
2222
return None

src/tgdb/infrastructure/primitive_encoding.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from collections.abc import Callable, Iterable, Mapping
1+
from collections.abc import Callable, Mapping
22
from dataclasses import dataclass, field
33
from datetime import datetime
4-
from typing import cast
4+
from typing import Any, cast
55
from uuid import UUID
66

77

@@ -127,7 +127,7 @@ def decoded_none(encoded_value: str) -> None:
127127
raise ValueError(encoded_value)
128128

129129

130-
_decoded_body_func_by_type = {
130+
_decoded_body_func_by_type: dict[type[Any], Callable[[str], Primitive]] = {
131131
bool: decoded_bool,
132132
int: decoded_int,
133133
str: decoded_str,

src/tgdb/infrastructure/telethon/in_telegram_heap.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ async def insert_idempotently(self, tuple: Tuple) -> None:
5656

5757
async def insert(self, tuple: Tuple) -> None:
5858
new_message = await self._pool_to_insert().send_message(
59-
self._heap_id, HeapTupleEncoding.encoded_tuple(tuple.tuple)
59+
self._heap_id, HeapTupleEncoding.encoded_tuple(tuple)
6060
)
6161
self._message_map[tuple.tid] = new_message
6262

@@ -66,7 +66,7 @@ async def update(self, tuple: Tuple) -> None:
6666
if message is None:
6767
return
6868

69-
await self._pool_to_edit(message.sender_id).edit_message(
69+
await self._pool_to_edit(message.sender_id).edit_message( # type: ignore[attr-defined]
7070
self._heap_id, message.id, HeapTupleEncoding.encoded_tuple(tuple)
7171
)
7272

src/tgdb/infrastructure/telethon/lazy_message_map.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from telethon.tl.types import Message
55

66
from tgdb.entities.relation.tuple import TID
7+
from tgdb.infrastructure.heap_tuple_encoding import HeapTupleEncoding
78
from tgdb.infrastructure.lazy_map import LazyMap
89
from tgdb.infrastructure.telethon.client_pool import TelegramClientPool
910

@@ -14,16 +15,16 @@
1415
def lazy_message_map(
1516
chat_id: int, pool: TelegramClientPool, computed_map_max_len: int
1617
) -> LazyMessageMap:
17-
async def message_of_row(tid: TID) -> Message | None:
18-
query = row_with_id_query(tid)
18+
async def tuple_message(tid: TID) -> Message | None:
19+
search = HeapTupleEncoding.id_of_encoded_tuple_with_tid(tid)
1920

2021
messages = cast(TotalList, await pool().get_messages(
21-
chat_id, search=query, limit=1
22+
chat_id, search=search, limit=1
2223
))
2324

2425
if not messages:
2526
return None
2627

27-
return messages[0]
28+
return cast(Message | None, messages[0])
2829

29-
return LazyMap(computed_map_max_len, message_of_row)
30+
return LazyMap(computed_map_max_len, tuple_message)

0 commit comments

Comments
 (0)