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 @callback
def async_info(hass: HomeAssistant) -> HardwareInfo: def async_info(hass: HomeAssistant) -> list[HardwareInfo]:
"""Return board info.""" """Return board info."""
if (os_info := get_os_info(hass)) is None: if (os_info := get_os_info(hass)) is None:
raise HomeAssistantError raise HomeAssistantError
@ -27,14 +27,16 @@ def async_info(hass: HomeAssistant) -> HardwareInfo:
if not board.startswith("odroid"): if not board.startswith("odroid"):
raise HomeAssistantError raise HomeAssistantError
return HardwareInfo( return [
board=BoardInfo( HardwareInfo(
hassio_board_id=board, board=BoardInfo(
manufacturer=DOMAIN, hassio_board_id=board,
model=board, manufacturer=DOMAIN,
revision=None, model=board,
), revision=None,
dongles=None, ),
name=BOARD_NAMES.get(board, f"Unknown hardkernel Odroid model '{board}'"), dongle=None,
url=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 name: str | None
board: BoardInfo | None board: BoardInfo | None
dongles: list[USBInfo] | None dongle: USBInfo | None
url: str | None url: str | None
@ -42,5 +42,5 @@ class HardwareProtocol(Protocol):
"""Define the format of hardware platforms.""" """Define the format of hardware platforms."""
@callback @callback
def async_info(self, hass: HomeAssistant) -> HardwareInfo: def async_info(self, hass: HomeAssistant) -> list[HardwareInfo]:
"""Return info.""" """Return info."""

View File

@ -42,6 +42,6 @@ async def ws_info(
for platform in hardware_platform.values(): for platform in hardware_platform.values():
if hasattr(platform, "async_info"): if hasattr(platform, "async_info"):
with contextlib.suppress(HomeAssistantError): 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}) connection.send_result(msg["id"], {"hardware": hardware_info})

View File

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

View File

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

View File

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

View File

@ -62,24 +62,27 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
"hardware": [ "hardware": [
{ {
"board": None, "board": None,
"dongles": [ "dongle": {
{ "vid": "bla_vid",
"vid": "bla_vid", "pid": "bla_pid",
"pid": "bla_pid", "serial_number": "bla_serial_number",
"serial_number": "bla_serial_number", "manufacturer": "bla_manufacturer",
"manufacturer": "bla_manufacturer", "description": "bla_description",
"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",
},
],
"name": "Home Assistant Sky Connect", "name": "Home Assistant Sky Connect",
"url": None, "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", "model": "yellow",
"revision": None, "revision": None,
}, },
"dongles": None, "dongle": None,
"name": "Home Assistant Yellow", "name": "Home Assistant Yellow",
"url": None, "url": None,
} }

View File

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