regenmaschine/endpoints/machine.py
"""Define an object to interact with machine info."""
from __future__ import annotations
from contextlib import suppress
from typing import Any
from regenmaschine.endpoints import EndpointManager
from regenmaschine.errors import UnknownAPICallError
class Machine(EndpointManager):
"""Define an API object."""
@EndpointManager.raise_on_gen1_controller
async def _check_firmware_update_status(self) -> dict[str, Any]:
"""Check for new firmware update information.
Returns:
An API response payload.
"""
return await self.controller.request("post", "machine/update/check")
async def get_firmware_update_status(self) -> dict[str, Any]:
"""Get the status of any pending firmware updates.
Returns:
An API response payload.
"""
with suppress(UnknownAPICallError):
# 1st generation controllers don't support the POST /machine/update/check
# endpoint, so if that call fails because of an UnknownAPICallError, swallow
# it (with the assumption that GET /machine/update will return the needed
# information):
await self._check_firmware_update_status()
return await self.controller.request("get", "machine/update")
async def reboot(self) -> dict[str, Any]:
"""Reboot the controller.
Returns:
An API response payload.
"""
return await self.controller.request("post", "machine/reboot")
async def update_firmware(self) -> dict[str, Any]:
"""Attempt to start the firmware update.
Returns:
An API response payload.
"""
return await self.controller.request("post", "machine/update")