uiprotect 5.4.0__tar.gz → 6.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of uiprotect might be problematic. Click here for more details.

Files changed (36) hide show
  1. {uiprotect-5.4.0 → uiprotect-6.0.1}/PKG-INFO +2 -2
  2. {uiprotect-5.4.0 → uiprotect-6.0.1}/pyproject.toml +2 -2
  3. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/api.py +5 -0
  4. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/websocket.py +4 -3
  5. {uiprotect-5.4.0 → uiprotect-6.0.1}/LICENSE +0 -0
  6. {uiprotect-5.4.0 → uiprotect-6.0.1}/README.md +0 -0
  7. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/__init__.py +0 -0
  8. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/__main__.py +0 -0
  9. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/__init__.py +0 -0
  10. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/backup.py +0 -0
  11. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/base.py +0 -0
  12. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/cameras.py +0 -0
  13. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/chimes.py +0 -0
  14. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/doorlocks.py +0 -0
  15. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/events.py +0 -0
  16. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/lights.py +0 -0
  17. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/liveviews.py +0 -0
  18. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/nvr.py +0 -0
  19. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/sensors.py +0 -0
  20. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/cli/viewers.py +0 -0
  21. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/__init__.py +0 -0
  22. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/base.py +0 -0
  23. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/bootstrap.py +0 -0
  24. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/convert.py +0 -0
  25. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/devices.py +0 -0
  26. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/nvr.py +0 -0
  27. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/types.py +0 -0
  28. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/user.py +0 -0
  29. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/data/websocket.py +0 -0
  30. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/exceptions.py +0 -0
  31. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/py.typed +0 -0
  32. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/release_cache.json +0 -0
  33. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/stream.py +0 -0
  34. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/test_util/__init__.py +0 -0
  35. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/test_util/anonymize.py +0 -0
  36. {uiprotect-5.4.0 → uiprotect-6.0.1}/src/uiprotect/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uiprotect
3
- Version: 5.4.0
3
+ Version: 6.0.1
4
4
  Summary: Python API for Unifi Protect (Unofficial)
5
5
  Home-page: https://github.com/uilibs/uiprotect
6
6
  Author: UI Protect Maintainers
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Topic :: Software Development :: Build Tools
19
19
  Classifier: Topic :: Software Development :: Libraries
20
20
  Requires-Dist: aiofiles (>=23)
21
- Requires-Dist: aiohttp (>=3.9.0)
21
+ Requires-Dist: aiohttp (>=3.10.0)
22
22
  Requires-Dist: aioshutil (>=1.3)
23
23
  Requires-Dist: async-timeout (>=3.0.1)
24
24
  Requires-Dist: convertertools (>=0.5.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uiprotect"
3
- version = "5.4.0"
3
+ version = "6.0.1"
4
4
  description = "Python API for Unifi Protect (Unofficial)"
5
5
  authors = ["UI Protect Maintainers <ui@koston.org>"]
6
6
  readme = "README.md"
@@ -34,7 +34,7 @@ python = ">=3.10"
34
34
  rich = ">=10"
35
35
  async-timeout = ">=3.0.1"
36
36
  aiofiles = ">=23"
37
- aiohttp = ">=3.9.0"
37
+ aiohttp = ">=3.10.0"
38
38
  aioshutil = ">=1.3"
39
39
  dateparser = ">=1.1.0"
40
40
  orjson = ">=3.9.15"
@@ -191,6 +191,7 @@ class BaseApiClient:
191
191
  cache_dir: Path | None = None,
192
192
  config_dir: Path | None = None,
193
193
  store_sessions: bool = True,
194
+ ws_receive_timeout: int | None = None,
194
195
  ) -> None:
195
196
  self._auth_lock = asyncio.Lock()
196
197
  self._host = host
@@ -200,6 +201,7 @@ class BaseApiClient:
200
201
  self._password = password
201
202
  self._verify_ssl = verify_ssl
202
203
  self._ws_timeout = ws_timeout
204
+ self._ws_receive_timeout = ws_receive_timeout
203
205
  self._loaded_session = False
204
206
  self._update_task: asyncio.Task[Bootstrap | None] | None = None
205
207
 
@@ -277,6 +279,7 @@ class BaseApiClient:
277
279
  self._on_websocket_state_change,
278
280
  verify=self._verify_ssl,
279
281
  timeout=self._ws_timeout,
282
+ receive_timeout=self._ws_receive_timeout,
280
283
  )
281
284
  return self._websocket
282
285
 
@@ -752,6 +755,7 @@ class ProtectApiClient(BaseApiClient):
752
755
  ignore_stats: bool = False,
753
756
  ignore_unadopted: bool = True,
754
757
  debug: bool = False,
758
+ ws_receive_timeout: int | None = None,
755
759
  ) -> None:
756
760
  super().__init__(
757
761
  host=host,
@@ -761,6 +765,7 @@ class ProtectApiClient(BaseApiClient):
761
765
  verify_ssl=verify_ssl,
762
766
  session=session,
763
767
  ws_timeout=ws_timeout,
768
+ ws_receive_timeout=ws_receive_timeout,
764
769
  cache_dir=cache_dir,
765
770
  config_dir=config_dir,
766
771
  store_sessions=store_sessions,
@@ -55,10 +55,12 @@ class Websocket:
55
55
  timeout: float = 30.0,
56
56
  backoff: int = 10,
57
57
  verify: bool = True,
58
+ receive_timeout: float | None = None,
58
59
  ) -> None:
59
60
  """Init Websocket."""
60
61
  self.get_url = get_url
61
62
  self.timeout = timeout
63
+ self.receive_timeout = receive_timeout
62
64
  self.backoff = backoff
63
65
  self.verify = verify
64
66
  self._get_session = get_session
@@ -117,17 +119,16 @@ class Websocket:
117
119
  async def _websocket_inner_loop(self, url: URL) -> None:
118
120
  _LOGGER.debug("Connecting WS to %s", url)
119
121
  await self._attempt_auth(False)
120
- ssl = None if self.verify else False
121
122
  msg: WSMessage | None = None
122
123
  self._seen_non_close_message = False
123
124
  session = await self._get_session()
124
125
  # catch any and all errors for Websocket so we can clean up correctly
125
126
  try:
126
127
  self._ws_connection = await session.ws_connect(
127
- url, ssl=ssl, headers=self._headers, timeout=self.timeout
128
+ url, ssl=self.verify, headers=self._headers, timeout=self.timeout
128
129
  )
129
130
  while True:
130
- msg = await self._ws_connection.receive(self.timeout)
131
+ msg = await self._ws_connection.receive(self.receive_timeout)
131
132
  msg_type = msg.type
132
133
  if msg_type is WSMsgType.ERROR:
133
134
  _LOGGER.exception("Error from Websocket: %s", msg.data)
File without changes
File without changes