diff --git a/example.py b/example.py index 3195458..5ad13ed 100644 --- a/example.py +++ b/example.py @@ -16,6 +16,8 @@ async def main(): # client = await TedeeClient.create(personal_token, local_token, ip) client = TedeeClient(local_ip=ip, local_token=local_token) bridge = await client.get_local_bridge() + await client.delete_webhook(5) + await client.register_webhook("http://192.168.1.151/events") await client.get_locks() await client.sync() await client.sync() diff --git a/pytedee_async/helpers.py b/pytedee_async/helpers.py index 9b0404a..78d30b4 100644 --- a/pytedee_async/helpers.py +++ b/pytedee_async/helpers.py @@ -66,6 +66,7 @@ async def http_request( HTTPStatus.OK, HTTPStatus.CREATED, HTTPStatus.ACCEPTED, + HTTPStatus.NO_CONTENT, ): return await response.json() if status_code == HTTPStatus.UNAUTHORIZED: diff --git a/pytedee_async/tedee_client.py b/pytedee_async/tedee_client.py index aad7434..fd04bad 100644 --- a/pytedee_async/tedee_client.py +++ b/pytedee_async/tedee_client.py @@ -459,19 +459,58 @@ def parse_webhook_message(self, message: dict) -> None: self._locks_dict[lock_id] = lock - async def register_webhook( + async def update_webhooks( self, webhook_url: str, headers_bridge_sends: list | None = None ) -> None: - """Register the webhook""" + """Overrites all webhooks""" if headers_bridge_sends is None: headers_bridge_sends = [] _LOGGER.debug("Registering webhook %s", webhook_url) data = [{"url": webhook_url, "headers": headers_bridge_sends}] - await self._local_api_call("/callback", "PUT", data) + await self._local_api_call("/callback", HTTPMethod.PUT, data) _LOGGER.debug("Webhook registered successfully.") + async def register_webhook( + self, webhook_url: str, headers_bridge_sends: list | None = None + ) -> int: + """Register a webhook, return the webhook id""" + if headers_bridge_sends is None: + headers_bridge_sends = [] + _LOGGER.debug("Registering webhook %s", webhook_url) + data = {"url": webhook_url, "headers": headers_bridge_sends} + try: + success, result = await self._local_api_call("/callback", "POST", data) + except TedeeDataUpdateException as ex: + raise TedeeWebhookException("Unable to register webhook") from ex + if not success: + raise TedeeWebhookException("Unable to register webhook") + _LOGGER.debug("Webhook registered successfully.") + # get the webhook id + try: + success, result = await self._local_api_call("/callback", HTTPMethod.GET) + except TedeeDataUpdateException as ex: + raise TedeeWebhookException("Unable to get webhooks") from ex + if not success or result is None: + raise TedeeWebhookException("Unable to get webhooks") + for webhook in result: + if webhook["url"] == webhook_url: + return webhook["id"] + raise TedeeWebhookException("Webhook id not found") + async def delete_webhooks(self) -> None: """Delete all webhooks""" _LOGGER.debug("Deleting webhooks...") - await self._local_api_call("/callback", "PUT", []) + try: + await self._local_api_call("/callback", "PUT", []) + except TedeeDataUpdateException as ex: + _LOGGER.debug("Unable to delete webhooks: %s", str(ex)) _LOGGER.debug("Webhooks deleted successfully.") + + async def delete_webhook(self, webhook_id: int) -> None: + """Delete a specific webhook""" + _LOGGER.debug("Deleting webhook %s", str(webhook_id)) + try: + await self._local_api_call(f"/callback/{webhook_id}", HTTPMethod.DELETE) + except TedeeDataUpdateException as ex: + _LOGGER.debug("Unable to delete webhook: %s", str(ex)) + _LOGGER.debug("Webhook deleted successfully.") diff --git a/setup.py b/setup.py index 8dc438e..b1a7695 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="pytedee_async", - version="0.2.10", + version="0.2.11", author="Josef Zweck", author_email="24647999+zweckj@users.noreply.github.com", description="A Tedee Lock Client package",