mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Add strict typing of post to Mastodon (#140299)
* Type post API * Update quality scale
This commit is contained in:
parent
6b601b9aad
commit
cdff2e4648
@ -5,7 +5,7 @@ from __future__ import annotations
|
|||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
from mastodon import Mastodon
|
from mastodon import Mastodon
|
||||||
from mastodon.Mastodon import MastodonAPIError
|
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.notify import (
|
from homeassistant.components.notify import (
|
||||||
@ -114,7 +114,7 @@ class MastodonNotificationService(BaseNotificationService):
|
|||||||
message,
|
message,
|
||||||
visibility=target,
|
visibility=target,
|
||||||
spoiler_text=content_warning,
|
spoiler_text=content_warning,
|
||||||
media_ids=mediadata["id"],
|
media_ids=mediadata.id,
|
||||||
sensitive=sensitive,
|
sensitive=sensitive,
|
||||||
)
|
)
|
||||||
except MastodonAPIError as err:
|
except MastodonAPIError as err:
|
||||||
@ -134,12 +134,14 @@ class MastodonNotificationService(BaseNotificationService):
|
|||||||
translation_key="unable_to_send_message",
|
translation_key="unable_to_send_message",
|
||||||
) from err
|
) from err
|
||||||
|
|
||||||
def _upload_media(self, media_path: Any = None) -> Any:
|
def _upload_media(self, media_path: Any = None) -> MediaAttachment:
|
||||||
"""Upload media."""
|
"""Upload media."""
|
||||||
with open(media_path, "rb"):
|
with open(media_path, "rb"):
|
||||||
media_type = get_media_type(media_path)
|
media_type = get_media_type(media_path)
|
||||||
try:
|
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:
|
except MastodonAPIError as err:
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
translation_domain=DOMAIN,
|
translation_domain=DOMAIN,
|
||||||
|
@ -93,7 +93,4 @@ rules:
|
|||||||
# Platinum
|
# Platinum
|
||||||
async-dependency: todo
|
async-dependency: todo
|
||||||
inject-websession: todo
|
inject-websession: todo
|
||||||
strict-typing:
|
strict-typing: done
|
||||||
status: todo
|
|
||||||
comment: |
|
|
||||||
Requirement 'Mastodon.py==1.8.1' appears untyped
|
|
||||||
|
@ -5,7 +5,7 @@ from functools import partial
|
|||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
from mastodon import Mastodon
|
from mastodon import Mastodon
|
||||||
from mastodon.Mastodon import MastodonAPIError
|
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
@ -104,7 +104,7 @@ def setup_services(hass: HomeAssistant) -> None:
|
|||||||
def _post(client: Mastodon, **kwargs: Any) -> None:
|
def _post(client: Mastodon, **kwargs: Any) -> None:
|
||||||
"""Post to Mastodon."""
|
"""Post to Mastodon."""
|
||||||
|
|
||||||
media_data: dict[str, Any] | None = None
|
media_data: MediaAttachment | None = None
|
||||||
|
|
||||||
media_path = kwargs.get("media_path")
|
media_path = kwargs.get("media_path")
|
||||||
if media_path:
|
if media_path:
|
||||||
@ -137,7 +137,7 @@ def setup_services(hass: HomeAssistant) -> None:
|
|||||||
try:
|
try:
|
||||||
media_ids: str | None = None
|
media_ids: str | None = None
|
||||||
if media_data:
|
if media_data:
|
||||||
media_ids = media_data["id"]
|
media_ids = media_data.id
|
||||||
client.status_post(media_ids=media_ids, **kwargs)
|
client.status_post(media_ids=media_ids, **kwargs)
|
||||||
except MastodonAPIError as err:
|
except MastodonAPIError as err:
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from unittest.mock import AsyncMock, Mock, patch
|
from unittest.mock import AsyncMock, Mock, patch
|
||||||
|
|
||||||
from mastodon.Mastodon import MastodonAPIError
|
from mastodon.Mastodon import MastodonAPIError, MediaAttachment
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.mastodon.const import (
|
from homeassistant.components.mastodon.const import (
|
||||||
@ -106,7 +106,9 @@ async def test_service_post(
|
|||||||
|
|
||||||
with (
|
with (
|
||||||
patch.object(hass.config, "is_allowed_path", return_value=True),
|
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(
|
await hass.services.async_call(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
@ -163,7 +165,7 @@ async def test_post_service_failed(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
hass.config.is_allowed_path = Mock(return_value=True)
|
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
|
mock_mastodon_client.status_post.side_effect = MastodonAPIError
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user