Add strict typing of post to Mastodon (#140299)

* Type post API

* Update quality scale
This commit is contained in:
Andrew Jackson 2025-03-11 08:11:46 +00:00 committed by GitHub
parent 6b601b9aad
commit cdff2e4648
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 15 additions and 14 deletions

View File

@ -5,7 +5,7 @@ from __future__ import annotations
from typing import Any, cast
from mastodon import Mastodon
from mastodon.Mastodon import MastodonAPIError
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
import voluptuous as vol
from homeassistant.components.notify import (
@ -114,7 +114,7 @@ class MastodonNotificationService(BaseNotificationService):
message,
visibility=target,
spoiler_text=content_warning,
media_ids=mediadata["id"],
media_ids=mediadata.id,
sensitive=sensitive,
)
except MastodonAPIError as err:
@ -134,12 +134,14 @@ class MastodonNotificationService(BaseNotificationService):
translation_key="unable_to_send_message",
) from err
def _upload_media(self, media_path: Any = None) -> Any:
def _upload_media(self, media_path: Any = None) -> MediaAttachment:
"""Upload media."""
with open(media_path, "rb"):
media_type = get_media_type(media_path)
try:
mediadata = self.client.media_post(media_path, mime_type=media_type)
mediadata: MediaAttachment = self.client.media_post(
media_path, mime_type=media_type
)
except MastodonAPIError as err:
raise HomeAssistantError(
translation_domain=DOMAIN,

View File

@ -93,7 +93,4 @@ rules:
# Platinum
async-dependency: todo
inject-websession: todo
strict-typing:
status: todo
comment: |
Requirement 'Mastodon.py==1.8.1' appears untyped
strict-typing: done

View File

@ -5,7 +5,7 @@ from functools import partial
from typing import Any, cast
from mastodon import Mastodon
from mastodon.Mastodon import MastodonAPIError
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
import voluptuous as vol
from homeassistant.config_entries import ConfigEntryState
@ -104,7 +104,7 @@ def setup_services(hass: HomeAssistant) -> None:
def _post(client: Mastodon, **kwargs: Any) -> None:
"""Post to Mastodon."""
media_data: dict[str, Any] | None = None
media_data: MediaAttachment | None = None
media_path = kwargs.get("media_path")
if media_path:
@ -137,7 +137,7 @@ def setup_services(hass: HomeAssistant) -> None:
try:
media_ids: str | None = None
if media_data:
media_ids = media_data["id"]
media_ids = media_data.id
client.status_post(media_ids=media_ids, **kwargs)
except MastodonAPIError as err:
raise HomeAssistantError(

View File

@ -2,7 +2,7 @@
from unittest.mock import AsyncMock, Mock, patch
from mastodon.Mastodon import MastodonAPIError
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
import pytest
from homeassistant.components.mastodon.const import (
@ -106,7 +106,9 @@ async def test_service_post(
with (
patch.object(hass.config, "is_allowed_path", return_value=True),
patch.object(mock_mastodon_client, "media_post", return_value={"id": "1"}),
patch.object(
mock_mastodon_client, "media_post", return_value=MediaAttachment(id="1")
),
):
await hass.services.async_call(
DOMAIN,
@ -163,7 +165,7 @@ async def test_post_service_failed(
await hass.async_block_till_done()
hass.config.is_allowed_path = Mock(return_value=True)
mock_mastodon_client.media_post.return_value = {"id": "1"}
mock_mastodon_client.media_post.return_value = MediaAttachment(id="1")
mock_mastodon_client.status_post.side_effect = MastodonAPIError