uiprotect 7.17.0__tar.gz → 7.18.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 (38) hide show
  1. {uiprotect-7.17.0 → uiprotect-7.18.1}/PKG-INFO +1 -1
  2. {uiprotect-7.17.0 → uiprotect-7.18.1}/pyproject.toml +1 -1
  3. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/api.py +9 -3
  4. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/devices.py +9 -2
  5. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/utils.py +5 -0
  6. {uiprotect-7.17.0 → uiprotect-7.18.1}/LICENSE +0 -0
  7. {uiprotect-7.17.0 → uiprotect-7.18.1}/README.md +0 -0
  8. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/__init__.py +0 -0
  9. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/__main__.py +0 -0
  10. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/_compat.py +0 -0
  11. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/__init__.py +0 -0
  12. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/aiports.py +0 -0
  13. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/backup.py +0 -0
  14. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/base.py +0 -0
  15. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/cameras.py +0 -0
  16. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/chimes.py +0 -0
  17. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/doorlocks.py +0 -0
  18. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/events.py +0 -0
  19. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/lights.py +0 -0
  20. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/liveviews.py +0 -0
  21. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/nvr.py +0 -0
  22. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/sensors.py +0 -0
  23. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/viewers.py +0 -0
  24. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/__init__.py +0 -0
  25. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/base.py +0 -0
  26. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/bootstrap.py +0 -0
  27. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/convert.py +0 -0
  28. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/nvr.py +0 -0
  29. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/types.py +0 -0
  30. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/user.py +0 -0
  31. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/websocket.py +0 -0
  32. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/exceptions.py +0 -0
  33. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/py.typed +0 -0
  34. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/release_cache.json +0 -0
  35. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/stream.py +0 -0
  36. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/test_util/__init__.py +0 -0
  37. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/test_util/anonymize.py +0 -0
  38. {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: uiprotect
3
- Version: 7.17.0
3
+ Version: 7.18.1
4
4
  Summary: Python API for Unifi Protect (Unofficial)
5
5
  License: MIT
6
6
  Author: UI Protect Maintainers
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uiprotect"
3
- version = "7.17.0"
3
+ version = "7.18.1"
4
4
  license = "MIT"
5
5
  description = "Python API for Unifi Protect (Unofficial)"
6
6
  authors = [{ name = "UI Protect Maintainers", email = "ui@koston.org" }]
@@ -65,6 +65,7 @@ from .utils import (
65
65
  decode_token_cookie,
66
66
  get_response_reason,
67
67
  ip_from_host,
68
+ pybool_to_json_bool,
68
69
  set_debug,
69
70
  to_js_time,
70
71
  utc_now,
@@ -1519,12 +1520,17 @@ class ProtectApiClient(BaseApiClient):
1519
1520
  raise_exception=False,
1520
1521
  )
1521
1522
 
1522
- async def get_public_api_camera_snapshot(self, camera_id: str) -> bytes | None:
1523
+ async def get_public_api_camera_snapshot(
1524
+ self,
1525
+ camera_id: str,
1526
+ high_quality: bool = False,
1527
+ ) -> bytes | None:
1523
1528
  """Gets snapshot for a camera using public api."""
1524
1529
  return await self.api_request_raw(
1525
1530
  public_api=True,
1526
- url=f"v1/cameras/{camera_id}/snapshot",
1527
- params={"highQuality": "true"},
1531
+ raise_exception=False,
1532
+ url=f"/v1/cameras/{camera_id}/snapshot",
1533
+ params={"highQuality": pybool_to_json_bool(high_quality)},
1528
1534
  )
1529
1535
 
1530
1536
  async def get_package_camera_snapshot(
@@ -2087,12 +2087,19 @@ class Camera(ProtectMotionDeviceModel):
2087
2087
 
2088
2088
  return await self._api.get_camera_snapshot(self.id, width, height, dt=dt)
2089
2089
 
2090
- async def get_public_api_snapshot(self) -> bytes | None:
2090
+ async def get_public_api_snapshot(
2091
+ self, high_quality: bool | None = None
2092
+ ) -> bytes | None:
2091
2093
  """Gets snapshot for camera using public API."""
2092
2094
  if self._api._api_key is None:
2093
2095
  raise NotAuthorized("Cannot get public API snapshot without an API key.")
2094
2096
 
2095
- return await self._api.get_public_api_camera_snapshot(self.id)
2097
+ if high_quality is None:
2098
+ high_quality = self.feature_flags.support_full_hd_snapshot or False
2099
+
2100
+ return await self._api.get_public_api_camera_snapshot(
2101
+ camera_id=self.id, high_quality=high_quality
2102
+ )
2096
2103
 
2097
2104
  async def get_package_snapshot(
2098
2105
  self,
@@ -700,3 +700,8 @@ def make_required_getter(ufp_required_field: str) -> Callable[[T], bool]:
700
700
  @lru_cache
701
701
  def timedelta_total_seconds(td: timedelta) -> float:
702
702
  return td.total_seconds()
703
+
704
+
705
+ def pybool_to_json_bool(value: bool) -> str:
706
+ """Convert a Python bool to a JSON boolean string ('true'/'false')."""
707
+ return "true" if value else "false"
File without changes
File without changes