Skip to content

Commit

Permalink
Merge pull request #91 from kvj/feat_bridge_timeouts
Browse files Browse the repository at this point in the history
Add connection timeout to bridge calls
  • Loading branch information
kvj committed Aug 27, 2022
2 parents 361ce9d + fad87bf commit 2c2c1f0
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions custom_components/nuki_ng/nuki.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from hashlib import sha256
from random import randint
from socket import timeout
from homeassistant.helpers.update_coordinator import (
DataUpdateCoordinator,
UpdateFailed,
Expand All @@ -20,7 +21,7 @@

BRIDGE_DISCOVERY_API = "https://api.nuki.io/discover/bridges"
BRIDGE_HOOK = "nuki_ng_bridge_hook"

BRIDGE_TIMEOUT = 10

class NukiInterface:
def __init__(
Expand Down Expand Up @@ -67,20 +68,20 @@ def bridge_url(self, path: str, extra=None) -> str:
return f"{url}{path}?token={self.token}{extra_str}"

async def bridge_list(self):
data = await self.async_json(lambda r: r.get(self.bridge_url("/list")))
data = await self.async_json(lambda r: r.get(self.bridge_url("/list"), timeout=BRIDGE_TIMEOUT))
result = dict()
for item in data:
result[item.get("nukiId")] = item
return result

async def bridge_info(self):
return await self.async_json(lambda r: r.get(self.bridge_url("/info")))
return await self.async_json(lambda r: r.get(self.bridge_url("/info"), timeout=BRIDGE_TIMEOUT))

async def bridge_reboot(self):
return await self.async_json(lambda r: r.get(self.bridge_url("/reboot")))
return await self.async_json(lambda r: r.get(self.bridge_url("/reboot"), timeout=BRIDGE_TIMEOUT))

async def bridge_fwupdate(self):
return await self.async_json(lambda r: r.get(self.bridge_url("/fwupdate")))
return await self.async_json(lambda r: r.get(self.bridge_url("/fwupdate"), timeout=BRIDGE_TIMEOUT))

async def bridge_lock_action(self, dev_id: str, action: str, device_type):
actions_map = {
Expand All @@ -104,7 +105,8 @@ async def bridge_lock_action(self, dev_id: str, action: str, device_type):
nukiId=dev_id,
deviceType=device_type,
),
)
),
timeout=BRIDGE_TIMEOUT
)
)

Expand All @@ -131,15 +133,16 @@ async def web_lock_action(self, dev_id: str, action: str):

async def bridge_remove_callback(self, callback: str):
callbacks = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/list"))
lambda r: r.get(self.bridge_url("/callback/list"), timeout=BRIDGE_TIMEOUT)
)
_LOGGER.debug(f"bridge_remove_callback: {callbacks}, {callback}")
callbacks_list = callbacks.get("callbacks", [])
for item in callbacks_list:
if item["url"] == callback:
result = await self.async_json(
lambda r: r.get(
self.bridge_url("/callback/remove", {"id": item["id"]})
self.bridge_url("/callback/remove", {"id": item["id"]}),
timeout=BRIDGE_TIMEOUT
)
)
if not result.get("success", True):
Expand All @@ -149,7 +152,7 @@ async def bridge_remove_callback(self, callback: str):

async def bridge_check_callback(self, callback: str):
callbacks = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/list"))
lambda r: r.get(self.bridge_url("/callback/list"), timeout=BRIDGE_TIMEOUT)
)
_LOGGER.debug(f"bridge_check_callback: {callbacks}, {callback}")
result = dict()
Expand All @@ -164,13 +167,13 @@ async def bridge_check_callback(self, callback: str):
await self.bridge_remove_callback(item["url"])
for callback_url in add_callbacks[:3]:
result = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/add", {"url": callback_url}))
lambda r: r.get(self.bridge_url("/callback/add", {"url": callback_url}), timeout=BRIDGE_TIMEOUT)
)
if not result.get("success", True):
raise ConnectionError(result.get("message"))
_LOGGER.debug("Callback is set - re-added")
callbacks = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/list"))
lambda r: r.get(self.bridge_url("/callback/list"), timeout=BRIDGE_TIMEOUT)
)
return callbacks.get("callbacks", [])

Expand Down

0 comments on commit 2c2c1f0

Please sign in to comment.