Refactor hardware.async_info to return list[HardwareInfo] (#77183)

This commit is contained in:
Erik Montnemery 2022-08-29 08:45:39 +02:00 committed by GitHub
parent 0154a1cecb
commit 067d21a307
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 81 additions and 74 deletions

View File

@ -17,7 +17,7 @@ BOARD_NAMES = {
@callback
def async_info(hass: HomeAssistant) -> HardwareInfo:
def async_info(hass: HomeAssistant) -> list[HardwareInfo]:
"""Return board info."""
if (os_info := get_os_info(hass)) is None:
raise HomeAssistantError
@ -27,14 +27,16 @@ def async_info(hass: HomeAssistant) -> HardwareInfo:
if not board.startswith("odroid"):
raise HomeAssistantError
return HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=DOMAIN,
model=board,
revision=None,
),
dongles=None,
name=BOARD_NAMES.get(board, f"Unknown hardkernel Odroid model '{board}'"),
url=None,
)
return [
HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=DOMAIN,
model=board,
revision=None,
),
dongle=None,
name=BOARD_NAMES.get(board, f"Unknown hardkernel Odroid model '{board}'"),
url=None,
)
]

View File

@ -34,7 +34,7 @@ class HardwareInfo:
name: str | None
board: BoardInfo | None
dongles: list[USBInfo] | None
dongle: USBInfo | None
url: str | None
@ -42,5 +42,5 @@ class HardwareProtocol(Protocol):
"""Define the format of hardware platforms."""
@callback
def async_info(self, hass: HomeAssistant) -> HardwareInfo:
def async_info(self, hass: HomeAssistant) -> list[HardwareInfo]:
"""Return info."""

View File

@ -42,6 +42,6 @@ async def ws_info(
for platform in hardware_platform.values():
if hasattr(platform, "async_info"):
with contextlib.suppress(HomeAssistantError):
hardware_info.append(asdict(platform.async_info(hass)))
hardware_info.extend([asdict(hw) for hw in platform.async_info(hass)])
connection.send_result(msg["id"], {"hardware": hardware_info})

View File

@ -10,24 +10,22 @@ DONGLE_NAME = "Home Assistant Sky Connect"
@callback
def async_info(hass: HomeAssistant) -> HardwareInfo:
def async_info(hass: HomeAssistant) -> list[HardwareInfo]:
"""Return board info."""
entries = hass.config_entries.async_entries(DOMAIN)
dongles = [
USBInfo(
vid=entry.data["vid"],
pid=entry.data["pid"],
serial_number=entry.data["serial_number"],
manufacturer=entry.data["manufacturer"],
description=entry.data["description"],
return [
HardwareInfo(
board=None,
dongle=USBInfo(
vid=entry.data["vid"],
pid=entry.data["pid"],
serial_number=entry.data["serial_number"],
manufacturer=entry.data["manufacturer"],
description=entry.data["description"],
),
name=DONGLE_NAME,
url=None,
)
for entry in entries
]
return HardwareInfo(
board=None,
dongles=dongles,
name=DONGLE_NAME,
url=None,
)

View File

@ -12,7 +12,7 @@ MODEL = "yellow"
@callback
def async_info(hass: HomeAssistant) -> HardwareInfo:
def async_info(hass: HomeAssistant) -> list[HardwareInfo]:
"""Return board info."""
if (os_info := get_os_info(hass)) is None:
raise HomeAssistantError
@ -22,14 +22,16 @@ def async_info(hass: HomeAssistant) -> HardwareInfo:
if not board == "yellow":
raise HomeAssistantError
return HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=MANUFACTURER,
model=MODEL,
revision=None,
),
dongles=None,
name=BOARD_NAME,
url=None,
)
return [
HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=MANUFACTURER,
model=MODEL,
revision=None,
),
dongle=None,
name=BOARD_NAME,
url=None,
)
]

View File

@ -32,7 +32,7 @@ MODELS = {
@callback
def async_info(hass: HomeAssistant) -> HardwareInfo:
def async_info(hass: HomeAssistant) -> list[HardwareInfo]:
"""Return board info."""
if (os_info := get_os_info(hass)) is None:
raise HomeAssistantError
@ -42,14 +42,16 @@ def async_info(hass: HomeAssistant) -> HardwareInfo:
if not board.startswith("rpi"):
raise HomeAssistantError
return HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=DOMAIN,
model=MODELS.get(board),
revision=None,
),
dongles=None,
name=BOARD_NAMES.get(board, f"Unknown Raspberry Pi model '{board}'"),
url=None,
)
return [
HardwareInfo(
board=BoardInfo(
hassio_board_id=board,
manufacturer=DOMAIN,
model=MODELS.get(board),
revision=None,
),
dongle=None,
name=BOARD_NAMES.get(board, f"Unknown Raspberry Pi model '{board}'"),
url=None,
)
]

View File

@ -48,7 +48,7 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
"model": "odroid-n2",
"revision": None,
},
"dongles": None,
"dongle": None,
"name": "Home Assistant Blue / Hardkernel Odroid-N2",
"url": None,
}

View File

@ -62,24 +62,27 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
"hardware": [
{
"board": None,
"dongles": [
{
"vid": "bla_vid",
"pid": "bla_pid",
"serial_number": "bla_serial_number",
"manufacturer": "bla_manufacturer",
"description": "bla_description",
},
{
"vid": "bla_vid_2",
"pid": "bla_pid_2",
"serial_number": "bla_serial_number_2",
"manufacturer": "bla_manufacturer_2",
"description": "bla_description_2",
},
],
"dongle": {
"vid": "bla_vid",
"pid": "bla_pid",
"serial_number": "bla_serial_number",
"manufacturer": "bla_manufacturer",
"description": "bla_description",
},
"name": "Home Assistant Sky Connect",
"url": None,
}
},
{
"board": None,
"dongle": {
"vid": "bla_vid_2",
"pid": "bla_pid_2",
"serial_number": "bla_serial_number_2",
"manufacturer": "bla_manufacturer_2",
"description": "bla_description_2",
},
"name": "Home Assistant Sky Connect",
"url": None,
},
]
}

View File

@ -48,7 +48,7 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
"model": "yellow",
"revision": None,
},
"dongles": None,
"dongle": None,
"name": "Home Assistant Yellow",
"url": None,
}

View File

@ -48,7 +48,7 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
"model": "1",
"revision": None,
},
"dongles": None,
"dongle": None,
"name": "Raspberry Pi",
"url": None,
}