Skip to content

Commit 4315ac2

Browse files
committed
increase test coverage, add CACHE_FILES_PATH to settings
1 parent ffa92ba commit 4315ac2

File tree

6 files changed

+231
-218
lines changed

6 files changed

+231
-218
lines changed

src/aleph/sdk/cache.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ async def get_posts(
290290
conditions = []
291291

292292
if types:
293-
conditions.append(query_post_types(types))
293+
conditions.append(query_message_types(types))
294294
if refs:
295295
conditions.append(query_refs(refs))
296296
if addresses:
@@ -345,7 +345,7 @@ async def get_messages(
345345
conditions = []
346346

347347
if message_type:
348-
conditions.append(MessageModel.type == message_type.value)
348+
conditions.append(query_message_types(message_type))
349349
if content_types:
350350
conditions.append(query_content_types(content_types))
351351
if content_keys:
@@ -455,10 +455,10 @@ async def watch_messages(
455455
yield model_to_message(item)
456456

457457

458-
def query_post_types(types: Union[str, Iterable[str]]):
459-
if isinstance(types, str):
460-
return MessageModel.content_type == types
461-
return MessageModel.content_type.in_(types)
458+
def query_message_types(message_types: Union[str, Iterable[str]]):
459+
if isinstance(message_types, str):
460+
return MessageModel.type == message_types
461+
return MessageModel.type.in_(message_types)
462462

463463

464464
def query_content_types(content_types: Union[str, Iterable[str]]):

src/aleph/sdk/conf.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class Settings(BaseSettings):
3737
default=Path(":memory:"), # can also be :memory: for in-memory caching
3838
description="Path to the cache database",
3939
)
40+
CACHE_FILES_PATH: Path = Field(
41+
default=Path("cache", "files"),
42+
description="Path to the cache files",
43+
)
4044

4145
class Config:
4246
env_prefix = "ALEPH_"

src/aleph/sdk/node.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from aleph.sdk import AuthenticatedAlephClient
1717
from aleph.sdk.base import AuthenticatedAlephClientBase
1818
from aleph.sdk.cache import MessageCache
19+
from aleph.sdk.conf import settings
1920
from aleph.sdk.types import StorageEnum
2021

2122

@@ -107,13 +108,14 @@ async def download_file(self, file_hash: str) -> bytes:
107108
return f.read()
108109
except FileNotFoundError:
109110
file = await self.session.download_file(file_hash)
111+
self._file_path(file_hash).parent.mkdir(parents=True, exist_ok=True)
110112
with open(self._file_path(file_hash), "wb") as f:
111113
f.write(file)
112114
return file
113115

114-
def _file_path(self, file_hash: str) -> Path:
115-
# TODO: Make this configurable (and not be an ugly hack)
116-
return Path("cache", "files", file_hash)
116+
@staticmethod
117+
def _file_path(file_hash: str) -> Path:
118+
return settings.CACHE_FILES_PATH / Path(file_hash)
117119

118120
async def create_post(
119121
self,
@@ -271,5 +273,5 @@ async def submit(
271273
)
272274
# TODO: this can cause inconsistencies if the message is dropped
273275
if status in [MessageStatus.PROCESSED, MessageStatus.PENDING]:
274-
self.add(resp["message"])
276+
self.add(resp)
275277
return resp, status

tests/unit/conftest.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from pathlib import Path
22
from tempfile import NamedTemporaryFile
3+
from typing import List
34

45
import pytest as pytest
6+
from aleph_message.models import AggregateMessage, AlephMessage, PostMessage
57

68
import aleph.sdk.chains.ethereum as ethereum
79
import aleph.sdk.chains.sol as solana
@@ -34,3 +36,71 @@ def tezos_account() -> tezos.TezosAccount:
3436
with NamedTemporaryFile(delete=False) as private_key_file:
3537
private_key_file.close()
3638
yield tezos.get_fallback_account(path=Path(private_key_file.name))
39+
40+
41+
@pytest.fixture
42+
def messages() -> List[AlephMessage]:
43+
return [
44+
AggregateMessage.parse_obj(
45+
{
46+
"item_hash": "5b26d949fe05e38f535ef990a89da0473f9d700077cced228f2d36e73fca1fd6",
47+
"type": "AGGREGATE",
48+
"chain": "ETH",
49+
"sender": "0x51A58800b26AA1451aaA803d1746687cB88E0501",
50+
"signature": "0xca5825b6b93390482b436cb7f28b4628f8c9f56dc6af08260c869b79dd6017c94248839bd9fd0ffa1230dc3b1f4f7572a8d1f6fed6c6e1fb4d70ccda0ab5d4f21b",
51+
"item_type": "inline",
52+
"item_content": '{"address":"0x51A58800b26AA1451aaA803d1746687cB88E0501","key":"0xce844d79e5c0c325490c530aa41e8f602f0b5999binance","content":{"1692026263168":{"version":"x25519-xsalsa20-poly1305","nonce":"RT4Lbqs7Xzk+op2XC+VpXgwOgg21BotN","ephemPublicKey":"CVW8ECE3m8BepytHMTLan6/jgIfCxGdnKmX47YirF08=","ciphertext":"VuGJ9vMkJSbaYZCCv6Zemx4ixeb+9IW8H1vFB9vLtz1a8d87R4BfYUisLoCQxRkeUXqfW0/KIGQ5idVjr8Yj7QnKglW5AJ8UX7wEWMhiRFLatpWP8P9FI2n8Z7Rblu7Oz/OeKnuljKL3KsalcUQSsFa/1qACsIoycPZ6Wq6t1mXxVxxJWzClLyKRihv1pokZGT9UWxh7+tpoMGlRdYainyAt0/RygFw+r8iCMOilHnyv4ndLkKQJXyttb0tdNr/gr57+9761+trioGSysLQKZQWW6Ih6aE8V9t3BenfzYwiCnfFw3YAAKBPMdm9QdIETyrOi7YhD/w==","sha256":"bbeb499f681aed2bc18b6f3b6a30d25254bd30fbfde43444e9085f3bcd075c3c"}},"time":1692026263.662}',
53+
"content": {
54+
"key": "0xce844d79e5c0c325490c530aa41e8f602f0b5999binance",
55+
"time": 1692026263.662,
56+
"address": "0x51A58800b26AA1451aaA803d1746687cB88E0501",
57+
"content": {
58+
"hello": "world",
59+
},
60+
},
61+
"time": 1692026263.662,
62+
"channel": "UNSLASHED",
63+
"size": 734,
64+
"confirmations": [],
65+
"confirmed": False,
66+
}
67+
),
68+
PostMessage.parse_obj(
69+
{
70+
"item_hash": "70f3798fdc68ce0ee03715a5547ee24e2c3e259bf02e3f5d1e4bf5a6f6a5e99f",
71+
"type": "POST",
72+
"chain": "SOL",
73+
"sender": "0x4D52380D3191274a04846c89c069E6C3F2Ed94e4",
74+
"signature": "0x91616ee45cfba55742954ff87ebf86db4988bcc5e3334b49a4caa6436e28e28d4ab38667cbd4bfb8903abf8d71f70d9ceb2c0a8d0a15c04fc1af5657f0050c101b",
75+
"item_type": "storage",
76+
"item_content": None,
77+
"content": {
78+
"time": 1692026021.1257718,
79+
"type": "aleph-network-metrics",
80+
"address": "0x4D52380D3191274a04846c89c069E6C3F2Ed94e4",
81+
"ref": "0123456789abcdef",
82+
"content": {
83+
"tags": ["mainnet"],
84+
"hello": "world",
85+
"version": "1.0",
86+
},
87+
},
88+
"time": 1692026021.132849,
89+
"channel": "aleph-scoring",
90+
"size": 122537,
91+
"confirmations": [],
92+
"confirmed": False,
93+
}
94+
),
95+
]
96+
97+
98+
@pytest.fixture
99+
def raw_messages_response(messages):
100+
return {
101+
"messages": [message.dict() for message in messages],
102+
"pagination_item": "messages",
103+
"pagination_page": 1,
104+
"pagination_per_page": 20,
105+
"pagination_total": 2,
106+
}

tests/unit/test_cache.py

Lines changed: 6 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import pytest
66
from aleph_message.models import (
7-
AggregateMessage,
87
AlephMessage,
98
Chain,
109
MessageType,
@@ -16,63 +15,6 @@
1615
from aleph.sdk.chains.ethereum import get_fallback_account
1716

1817

19-
@pytest.fixture(scope="session")
20-
def messages():
21-
return [
22-
AggregateMessage.parse_obj(
23-
{
24-
"item_hash": "5b26d949fe05e38f535ef990a89da0473f9d700077cced228f2d36e73fca1fd6",
25-
"type": "AGGREGATE",
26-
"chain": "ETH",
27-
"sender": "0x51A58800b26AA1451aaA803d1746687cB88E0501",
28-
"signature": "0xca5825b6b93390482b436cb7f28b4628f8c9f56dc6af08260c869b79dd6017c94248839bd9fd0ffa1230dc3b1f4f7572a8d1f6fed6c6e1fb4d70ccda0ab5d4f21b",
29-
"item_type": "inline",
30-
"item_content": '{"address":"0x51A58800b26AA1451aaA803d1746687cB88E0501","key":"0xce844d79e5c0c325490c530aa41e8f602f0b5999binance","content":{"1692026263168":{"version":"x25519-xsalsa20-poly1305","nonce":"RT4Lbqs7Xzk+op2XC+VpXgwOgg21BotN","ephemPublicKey":"CVW8ECE3m8BepytHMTLan6/jgIfCxGdnKmX47YirF08=","ciphertext":"VuGJ9vMkJSbaYZCCv6Zemx4ixeb+9IW8H1vFB9vLtz1a8d87R4BfYUisLoCQxRkeUXqfW0/KIGQ5idVjr8Yj7QnKglW5AJ8UX7wEWMhiRFLatpWP8P9FI2n8Z7Rblu7Oz/OeKnuljKL3KsalcUQSsFa/1qACsIoycPZ6Wq6t1mXxVxxJWzClLyKRihv1pokZGT9UWxh7+tpoMGlRdYainyAt0/RygFw+r8iCMOilHnyv4ndLkKQJXyttb0tdNr/gr57+9761+trioGSysLQKZQWW6Ih6aE8V9t3BenfzYwiCnfFw3YAAKBPMdm9QdIETyrOi7YhD/w==","sha256":"bbeb499f681aed2bc18b6f3b6a30d25254bd30fbfde43444e9085f3bcd075c3c"}},"time":1692026263.662}',
31-
"content": {
32-
"key": "0xce844d79e5c0c325490c530aa41e8f602f0b5999binance",
33-
"time": 1692026263.662,
34-
"address": "0x51A58800b26AA1451aaA803d1746687cB88E0501",
35-
"content": {
36-
"hello": "world",
37-
},
38-
},
39-
"time": 1692026263.662,
40-
"channel": "UNSLASHED",
41-
"size": 734,
42-
"confirmations": [],
43-
"confirmed": False,
44-
}
45-
),
46-
PostMessage.parse_obj(
47-
{
48-
"item_hash": "70f3798fdc68ce0ee03715a5547ee24e2c3e259bf02e3f5d1e4bf5a6f6a5e99f",
49-
"type": "POST",
50-
"chain": "SOL",
51-
"sender": "0x4D52380D3191274a04846c89c069E6C3F2Ed94e4",
52-
"signature": "0x91616ee45cfba55742954ff87ebf86db4988bcc5e3334b49a4caa6436e28e28d4ab38667cbd4bfb8903abf8d71f70d9ceb2c0a8d0a15c04fc1af5657f0050c101b",
53-
"item_type": "storage",
54-
"item_content": None,
55-
"content": {
56-
"time": 1692026021.1257718,
57-
"type": "aleph-network-metrics",
58-
"address": "0x4D52380D3191274a04846c89c069E6C3F2Ed94e4",
59-
"ref": "0123456789abcdef",
60-
"content": {
61-
"tags": ["mainnet"],
62-
"hello": "world",
63-
"version": "1.0",
64-
},
65-
},
66-
"time": 1692026021.132849,
67-
"channel": "aleph-scoring",
68-
"size": 122537,
69-
"confirmations": [],
70-
"confirmed": False,
71-
}
72-
),
73-
]
74-
75-
7618
@pytest.mark.asyncio
7719
async def test_base(messages):
7820
# test add_many
@@ -171,6 +113,12 @@ async def test_chains(self):
171113
0
172114
] == self.messages[1]
173115

116+
@pytest.mark.asyncio
117+
async def test_content_keys(self):
118+
assert (
119+
await self.cache.get_messages(content_keys=self.messages[0].content.key)
120+
).messages[0] == self.messages[0]
121+
174122

175123
@pytest.mark.asyncio
176124
async def test_message_cache_listener():

0 commit comments

Comments
 (0)