bachya/regenmaschine

View on GitHub
regenmaschine/endpoints/restriction.py

Summary

Maintainability
A
0 mins
Test Coverage
"""Define an object to interact with restriction info."""

from __future__ import annotations

from typing import Any, cast

from regenmaschine.endpoints import EndpointManager


class Restriction(EndpointManager):
    """Define a restriction object."""

    @EndpointManager.raise_on_gen1_controller
    async def current(self) -> dict[str, Any]:
        """Get currently active restrictions.

        Returns:
            An API response payload.
        """
        return await self.controller.request("get", "restrictions/currently")

    @EndpointManager.raise_on_gen1_controller
    async def hourly(self) -> list[dict[str, Any]]:
        """Get a list of restrictions that are active over the next hour.

        Returns:
            An API response payload.
        """
        data = await self.controller.request("get", "restrictions/hourly")
        return cast(list[dict[str, Any]], data["hourlyRestrictions"])

    async def raindelay(self) -> dict[str, Any]:
        """Get restriction info related to rain delays.

        Returns:
            An API response payload.
        """
        return await self.controller.request("get", "restrictions/raindelay")

    @EndpointManager.raise_on_gen1_controller
    async def set_universal(self, payload: dict[str, Any]) -> dict[str, Any]:
        """Set global (always active) restrictions based on a payload.

        Args:
            payload: An API request payload.

        Returns:
            An API response payload.
        """
        return await self.controller.request(
            "post", "restrictions/global", json=payload
        )

    @EndpointManager.raise_on_gen1_controller
    async def universal(self) -> dict[str, Any]:
        """Get global (always active) restrictions.

        Returns:
            An API response payload.
        """
        return await self.controller.request("get", "restrictions/global")