fix api integration quality baseline

This commit is contained in:
2026-06-10 21:15:41 +02:00
parent 6540d62ff7
commit 8841a68c8d
14 changed files with 126 additions and 42 deletions

View File

@@ -2,6 +2,7 @@ from __future__ import annotations
import logging
from dataclasses import dataclass
from typing import Any
import requests
@@ -24,10 +25,14 @@ class HaClient:
"Content-Type": "application/json",
})
def list_entities(self) -> list[dict[str, object]]:
def list_entities(self) -> list[dict[str, Any]]:
response = self._session.get(
f"{self._settings.url}/api/states",
timeout=self._settings.timeout_seconds,
)
response.raise_for_status()
return response.json()
payload = response.json()
if not isinstance(payload, list):
msg = "Home Assistant states response must be a list."
raise TypeError(msg)
return payload

View File

@@ -1,9 +1,10 @@
from __future__ import annotations
from collections.abc import Sequence
from typing import Any
from app.ha.client import HaClient
from app.ha.models import HaEntitySummary, HaState
from app.ha.models import HaEntitySummary
class HaReader:
@@ -18,14 +19,21 @@ class HaReader:
if "." not in entity_id:
continue
domain = entity_id.split(".", 1)[0]
attributes = item.get("attributes") or {}
raw_attributes = item.get("attributes") or {}
attributes: dict[str, Any] = raw_attributes if isinstance(raw_attributes, dict) else {}
summaries.append(
HaEntitySummary(
entity_id=entity_id,
domain=domain,
state_class=str(attributes.get("state_class") or ""),
device_class=str(attributes.get("device_class") or ""),
unit_of_measurement=str(attributes.get("unit_of_measurement") or ""),
state_class=_optional_str(attributes.get("state_class")),
device_class=_optional_str(attributes.get("device_class")),
unit_of_measurement=_optional_str(attributes.get("unit_of_measurement")),
)
)
return summaries
def _optional_str(value: object) -> str | None:
if value is None or value == "":
return None
return str(value)