Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,17 @@ dependencies = [
"aiodns==3.2",
"aiohttp==3.11.13",
"aleph-message>=1.0.4",
"aleph-sdk-python @ git+https://github.com/aleph-im/aleph-sdk-python@1yam-credits-system",
"base58==2.1.1", # Needed now as default with _load_account changement
"aleph-sdk-python @ git+https://github.com/aleph-im/aleph-sdk-python@1yam-new-message-states",
"base58==2.1.1", # Needed now as default with _load_account changement
"click<8.2",
"py-sr25519-bindings==0.2", # Needed for DOT signatures
"py-sr25519-bindings==0.2", # Needed for DOT signatures
"pydantic>=2",
"pygments==2.19.1",
"pynacl==1.5", # Needed now as default with _load_account changement
"pynacl==1.5", # Needed now as default with _load_account changement
"python-magic==0.4.27",
"rich==13.9.*",
"setuptools>=65.5",
"substrate-interface==1.7.11", # Needed for DOT signatures
"substrate-interface==1.7.11", # Needed for DOT signatures
"textual==0.73",
"typer==0.15.2",
]
Expand Down
10 changes: 9 additions & 1 deletion src/aleph_client/commands/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
from aleph.sdk import AlephHttpClient, AuthenticatedAlephHttpClient
from aleph.sdk.account import _load_account
from aleph.sdk.conf import settings
from aleph.sdk.exceptions import ForgottenMessageError, MessageNotFoundError
from aleph.sdk.exceptions import (
ForgottenMessageError,
MessageNotFoundError,
RemovedMessageError,
)
from aleph.sdk.query.filters import MessageFilter
from aleph.sdk.query.responses import MessagesResponse
from aleph.sdk.types import AccountFromPrivateKey, StorageEnum
Expand Down Expand Up @@ -48,12 +52,16 @@ async def get(
typer.echo("Message does not exist on aleph.im")
except ForgottenMessageError:
typer.echo("Message has been forgotten on aleph.im")
except RemovedMessageError:
typer.echo("Message has been removed on aleph.im")
if message:
typer.echo(f"Message Status: {colorized_status(status)}")
if status == MessageStatus.REJECTED:
reason = await client.get_message_error(item_hash=ItemHash(item_hash))
typer.echo(colorful_json(json.dumps(reason, indent=4)))
else:
if status == "removing":
typer.echo(f"Removing reason : {message['reason']}")
typer.echo(colorful_json(json.dumps(message.model_dump(), indent=4, default=extended_json_encoder)))


Expand Down
2 changes: 2 additions & 0 deletions src/aleph_client/commands/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ def colorized_status(status: MessageStatus) -> str:
MessageStatus.PROCESSED: colors.GREEN,
MessageStatus.PENDING: colors.YELLOW,
MessageStatus.FORGOTTEN: colors.BRIGHT_BLACK,
MessageStatus.REMOVING: colors.YELLOW,
MessageStatus.REMOVED: colors.RED,
}
color = status_colors.get(status, colors.WHITE)
return style(status, fg=color, bold=True)
Expand Down
111 changes: 111 additions & 0 deletions tests/unit/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
import pytest
from aleph.sdk.chains.ethereum import ETHAccount
from aleph.sdk.conf import settings
from aleph.sdk.exceptions import (
ForgottenMessageError,
MessageNotFoundError,
RemovedMessageError,
)
from aleph.sdk.query.responses import MessagesResponse
from aleph.sdk.types import StoredContent
from aleph_message.models import PostMessage, StoreMessage
Expand Down Expand Up @@ -313,6 +318,112 @@ def test_message_get(mocker, store_message_fixture):
assert FAKE_STORE_HASH_PUBLISHER in result.stdout


def test_message_get_with_reject(mocker, store_message_fixture):
message = StoreMessage.model_validate(store_message_fixture)
mocker.patch("aleph.sdk.AlephHttpClient.get_message", return_value=[message, "rejected"])
mocker.patch(
"aleph.sdk.AlephHttpClient.get_message_error",
return_value={
"error_code": 100,
"details": {"errors": ["File not found: Could not retrieve file from storage at this time"]},
},
)
result = runner.invoke(
app,
[
"message",
"get",
FAKE_STORE_HASH,
],
)
assert result.exit_code == 0
assert "Message Status: rejected" in result.stdout


def test_message_get_with_forgotten(mocker):
"""Test the behavior when a message has been forgotten."""
# Mock the get_message method to raise ForgottenMessageError
mocker.patch(
"aleph.sdk.AlephHttpClient.get_message",
side_effect=ForgottenMessageError(
f"The requested message {FAKE_STORE_HASH} has been forgotten by node1, node2"
),
)

result = runner.invoke(
app,
[
"message",
"get",
FAKE_STORE_HASH,
],
)

# Verify output matches expected response for forgotten messages
assert result.exit_code == 0
assert "Message has been forgotten on aleph.im" in result.stdout


def test_message_get_with_removing(mocker, store_message_fixture):
message = StoreMessage.model_validate(store_message_fixture)
mocker.patch("aleph.sdk.AlephHttpClient.get_message", return_value=[message, "removing"])
mocker.patch("aleph.sdk.AlephHttpClient.get_message_error", return_value={"reason": "balance_insufficient"})
result = runner.invoke(
app,
[
"message",
"get",
FAKE_STORE_HASH,
],
)
assert result.exit_code == 0
assert "Message Status: removing" in result.stdout
assert "balance_insufficient" in result.stdout


def test_message_get_not_found(mocker):
"""Test the behavior when a message is not found."""
# Mock the get_message method to raise MessageNotFoundError
mocker.patch(
"aleph.sdk.AlephHttpClient.get_message", side_effect=MessageNotFoundError(f"No such hash {FAKE_STORE_HASH}")
)

result = runner.invoke(
app,
[
"message",
"get",
FAKE_STORE_HASH,
],
)

# Verify output matches expected response for not found messages
assert result.exit_code == 0
assert "Message does not exist on aleph.im" in result.stdout


def test_message_get_removed(mocker):
"""Test the behavior when a message has been removed."""
# Mock the get_message method to raise RemovedMessageError
mocker.patch(
"aleph.sdk.AlephHttpClient.get_message",
side_effect=RemovedMessageError(f"The requested message {FAKE_STORE_HASH} has been removed by admin"),
)

result = runner.invoke(
app,
[
"message",
"get",
FAKE_STORE_HASH,
],
)

# Verify output matches expected response for removed messages
assert result.exit_code == 0
assert "Message has been removed on aleph.im" in result.stdout


def test_message_find(mocker, store_message_fixture):
response = {
"messages": [store_message_fixture],
Expand Down
Loading