Skip to content

Commit

Permalink
Use enums
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewsayre committed Jan 10, 2025
1 parent e010df1 commit 063cfac
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 21 deletions.
6 changes: 6 additions & 0 deletions pyheos/command/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,12 @@
TEnum = TypeVar("TEnum", bound=ReprEnum)


def optional_int(value: str | None) -> int | None:
if value is not None:
return int(value)
return None


def parse_enum(
key: str, data: dict[str, Any], enum_type: type[TEnum], default: TEnum
) -> TEnum:
Expand Down
25 changes: 6 additions & 19 deletions pyheos/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from datetime import datetime
from typing import TYPE_CHECKING, Any, Final, Optional, cast

from pyheos.command import parse_enum
from pyheos.command import optional_int, parse_enum
from pyheos.dispatch import DisconnectType, EventCallbackType, callback_wrapper
from pyheos.media import MediaItem, QueueItem, ServiceOption
from pyheos.message import HeosMessage
Expand Down Expand Up @@ -98,7 +98,7 @@ class HeosNowPlayingMedia:
current_position: int | None = None
current_position_updated: datetime | None = None
duration: int | None = None
supported_controls: Sequence[str] = field(
supported_controls: Sequence[ControlType] = field(
default_factory=lambda: CONTROLS_ALL, init=False
)
options: Sequence[ServiceOption] = field(
Expand All @@ -120,19 +120,12 @@ def _update_from_message(self, message: HeosMessage) -> None:
self.image_url = data.get(c.ATTR_IMAGE_URL)
self.album_id = data.get(c.ATTR_ALBUM_ID)
self.media_id = data.get(c.ATTR_MEDIA_ID)
self.queue_id = self.__get_optional_int(data.get(c.ATTR_QUEUE_ID))
self.source_id = self.__get_optional_int(data.get(c.ATTR_SOURCE_ID))
self.queue_id = optional_int(data.get(c.ATTR_QUEUE_ID))
self.source_id = optional_int(data.get(c.ATTR_SOURCE_ID))
self.options = ServiceOption._from_options(message.options)
self._update_supported_controls()
self.clear_progress()

@staticmethod
def __get_optional_int(value: Any) -> int | None:
try:
return int(str(value))
except (TypeError, ValueError):
return None

def _update_supported_controls(self) -> None:
"""Updates the supported controls based on the source and type."""
new_supported_controls = CONTROLS_ALL if self.source_id is not None else []
Expand Down Expand Up @@ -205,12 +198,6 @@ class HeosPlayer:
group_id: int | None = field(repr=False, hash=False, compare=False, default=None)
heos: Optional["Heos"] = field(repr=False, hash=False, compare=False, default=None)

@staticmethod
def __get_optional_int(value: str | None) -> int | None:
if value is not None:
return int(value)
return None

@staticmethod
def _from_data(
data: dict[str, Any],
Expand All @@ -232,7 +219,7 @@ def _from_data(
control=parse_enum(
c.ATTR_CONTROL, data, VolumeControlType, VolumeControlType.UNKNOWN
),
group_id=HeosPlayer.__get_optional_int(data.get(c.ATTR_GROUP_ID)),
group_id=optional_int(data.get(c.ATTR_GROUP_ID)),
heos=heos,
)

Expand All @@ -253,7 +240,7 @@ def _update_from_data(self, data: dict[str, Any]) -> None:
self.control = parse_enum(
c.ATTR_CONTROL, data, VolumeControlType, VolumeControlType.UNKNOWN
)
self.group_id = HeosPlayer.__get_optional_int(data.get(c.ATTR_GROUP_ID))
self.group_id = optional_int(data.get(c.ATTR_GROUP_ID))

async def _on_event(self, event: HeosMessage, all_progress_events: bool) -> bool:
"""Updates the player based on the received HEOS event.
Expand Down
4 changes: 2 additions & 2 deletions pyheos/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class HeosHost:
serial: str | None
version: str
ip_address: str
network: str
network: NetworkType

@classmethod
def from_data(cls, data: dict[str, str]) -> "HeosHost":
Expand All @@ -37,7 +37,7 @@ def from_data(cls, data: dict[str, str]) -> "HeosHost":
data.get(c.ATTR_SERIAL),
data[c.ATTR_VERSION],
data[c.ATTR_IP_ADDRESS],
data[c.ATTR_NETWORK],
c.parse_enum(c.ATTR_NETWORK, data, NetworkType, NetworkType.UNKNOWN),
)


Expand Down

0 comments on commit 063cfac

Please sign in to comment.