bachya/regenmaschine

View on GitHub
regenmaschine/endpoints/stats.py

Summary

Maintainability
A
0 mins
Test Coverage
"""Define an object to interact with RainMachine statistics."""

from __future__ import annotations

import datetime
from typing import Any, cast

from regenmaschine.endpoints import EndpointManager


class Stats(EndpointManager):
    """Define a statistics object."""

    async def on_date(self, date: datetime.date) -> dict[str, Any]:
        """Get statistics for a certain date.

        Args:
            date: The date to examine.

        Returns:
            An API response payload.
        """
        return await self.controller.request(
            "get", f"dailystats/{date.strftime('%Y-%m-%d')}"
        )

    async def upcoming(self, details: bool = False) -> list[dict[str, Any]]:
        """Return watering statistics for the next 6 days.

        Args:
            details: Whether extra details should be included.

        Returns:
            An API response payload.
        """
        endpoint = "dailystats"
        data_key = "DailyStats"
        if details:
            endpoint += "/details"
            data_key = "DailyStatsDetails"
        data = await self.controller.request("get", endpoint)
        return cast(list[dict[str, Any]], data[data_key])