Clean up attributes of Overseerr event entity (#136251)

This commit is contained in:
Joost Lekkerkerker 2025-01-22 15:17:57 +01:00 committed by GitHub
parent eb20a00aa2
commit 7a78f87fa6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 10 deletions

View File

@ -55,6 +55,8 @@ async def async_setup_entry(
class OverseerrEvent(OverseerrEntity, EventEntity): class OverseerrEvent(OverseerrEntity, EventEntity):
"""Defines a Overseerr event entity.""" """Defines a Overseerr event entity."""
entity_description: OverseerrEventEntityDescription
def __init__( def __init__(
self, self,
coordinator: OverseerrCoordinator, coordinator: OverseerrCoordinator,
@ -76,7 +78,11 @@ class OverseerrEvent(OverseerrEntity, EventEntity):
"""Handle incoming event.""" """Handle incoming event."""
event_type = event["notification_type"].lower() event_type = event["notification_type"].lower()
if event_type.split("_")[0] == self.entity_description.key: if event_type.split("_")[0] == self.entity_description.key:
self._trigger_event(event_type[6:], event) self._attr_entity_picture = event.get("image")
self._trigger_event(
event_type[6:],
parse_event(event, self.entity_description.nullable_fields),
)
self.async_write_ha_state() self.async_write_ha_state()
@callback @callback
@ -94,6 +100,17 @@ class OverseerrEvent(OverseerrEntity, EventEntity):
def parse_event(event: dict[str, Any], nullable_fields: list[str]) -> dict[str, Any]: def parse_event(event: dict[str, Any], nullable_fields: list[str]) -> dict[str, Any]:
"""Parse event.""" """Parse event."""
event.pop("notification_type") event.pop("notification_type")
event.pop("image")
for field in nullable_fields: for field in nullable_fields:
event.pop(field) event.pop(field)
if (media := event.get("media")) is not None:
for field in ("status", "status4k"):
media[field] = media[field].lower()
for field in ("tmdb_id", "tvdb_id"):
if (value := media.get(field)) != "":
media[field] = int(value)
else:
media[field] = None
if (request := event.get("request")) is not None:
request["request_id"] = int(request["request_id"])
return event return event

View File

@ -44,7 +44,7 @@
# name: test_entities[event.overseerr_last_media_event-state] # name: test_entities[event.overseerr_last_media_event-state]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'comment': None, 'entity_picture': 'https://image.tmdb.org/t/p/w600_and_h900_bestv2/something.jpg',
'event_type': 'auto_approved', 'event_type': 'auto_approved',
'event_types': list([ 'event_types': list([
'pending', 'pending',
@ -55,19 +55,16 @@
'auto_approved', 'auto_approved',
]), ]),
'friendly_name': 'Overseerr Last media event', 'friendly_name': 'Overseerr Last media event',
'image': 'https://image.tmdb.org/t/p/w600_and_h900_bestv2/something.jpg',
'issue': None,
'media': dict({ 'media': dict({
'media_type': 'movie', 'media_type': 'movie',
'status': 'PENDING', 'status': 'pending',
'status4k': 'UNKNOWN', 'status4k': 'unknown',
'tmdb_id': '123', 'tmdb_id': 123,
'tvdb_id': '', 'tvdb_id': None,
}), }),
'message': 'Here is an interesting Linux ISO that was automatically approved.', 'message': 'Here is an interesting Linux ISO that was automatically approved.',
'notification_type': 'MEDIA_AUTO_APPROVED',
'request': dict({ 'request': dict({
'request_id': '16', 'request_id': 16,
'requested_by_avatar': 'https://plex.tv/users/abc/avatar?c=123', 'requested_by_avatar': 'https://plex.tv/users/abc/avatar?c=123',
'requested_by_email': 'my@email.com', 'requested_by_email': 'my@email.com',
'requested_by_settings_discord_id': '123', 'requested_by_settings_discord_id': '123',