Доработка _call_service
This commit is contained in:
+11
-24
@@ -1,25 +1,12 @@
|
|||||||
def _request(self, method: str, path: str, **kwargs) -> requests.Response:
|
def _call_service(self, domain: str, service: str, data: Dict[str, Any]) -> bool:
|
||||||
"""HTTP-запрос с ретраями и логированием."""
|
"""Вызов сервиса HA. Возвращает True если выполнено, False если dry-run."""
|
||||||
url = self.valves.ha_url + path
|
logger.info(
|
||||||
last_exc: Optional[Exception] = None
|
"%s -> %s.%s %s",
|
||||||
# Прокидываем verify_ssl если не передан явно
|
"[DRY] " if self.valves.dry_run else "",
|
||||||
kwargs.setdefault("verify", self.valves.verify_ssl)
|
domain, service, data,
|
||||||
for attempt in range(1, self.valves.max_retries + 2):
|
|
||||||
try:
|
|
||||||
resp = requests.request(
|
|
||||||
method, url,
|
|
||||||
headers=self._headers(),
|
|
||||||
timeout=self.valves.request_timeout,
|
|
||||||
**kwargs,
|
|
||||||
)
|
)
|
||||||
resp.raise_for_status()
|
if self.valves.dry_run:
|
||||||
return resp
|
return False
|
||||||
except requests.RequestException as e:
|
# verify_ssl уже передаётся в _request через kwargs
|
||||||
last_exc = e
|
self._request("POST", "/api/services/" + domain + "/" + service, json=data)
|
||||||
logger.warning(
|
return True
|
||||||
"HA %s %s failed (attempt %d): %s",
|
|
||||||
method, path, attempt, e,
|
|
||||||
)
|
|
||||||
if attempt <= self.valves.max_retries:
|
|
||||||
time.sleep(0.5 * attempt)
|
|
||||||
raise RuntimeError("Home Assistant недоступен: " + str(last_exc))
|
|
||||||
Reference in New Issue
Block a user