uiprotect 7.17.0__py3-none-any.whl → 7.18.1__py3-none-any.whl

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.

uiprotect/api.py CHANGED
@@ -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(
uiprotect/data/devices.py CHANGED
@@ -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,
uiprotect/utils.py CHANGED
@@ -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"
@@ -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,7 +1,7 @@
1
1
  uiprotect/__init__.py,sha256=Oz6i1tonIz4QWVnEPkbielJDJ3WQdwZVgYtjY4IwGAQ,636
2
2
  uiprotect/__main__.py,sha256=C_bHCOkv5qj6WMy-6ELoY3Y6HDhLxOa1a30CzmbZhsg,462
3
3
  uiprotect/_compat.py,sha256=HThmb1zQZCEssCxYYbQzFhJq8zYYlVaSnIEZabKc-6U,302
4
- uiprotect/api.py,sha256=7eg1CoTV9sgnUcm9WnusXon3ltWOA_SuCbTxfmNY68Y,73711
4
+ uiprotect/api.py,sha256=75F_jRPSmn8liQ8NqDTiKzoCyBX6Jj3E7fy7F3BuKow,73858
5
5
  uiprotect/cli/__init__.py,sha256=J5KE7Wt_rIr55EdGxfTOCoGfBzO5gzO5WvaruXp5AZI,9688
6
6
  uiprotect/cli/aiports.py,sha256=22sC-OVkUFfBGJR2oID8QzWsk4GQfLEmam06-LBP2Z0,1545
7
7
  uiprotect/cli/backup.py,sha256=lC44FujSYgVBUs32CbsY8pBejO4qScy6U94UzO-l2fc,36742
@@ -19,7 +19,7 @@ uiprotect/data/__init__.py,sha256=audwJBjxRiYdNPeYlP6iofFIOq3gyQzh6VpDsOCM2dQ,29
19
19
  uiprotect/data/base.py,sha256=CXIxaJCJNpavadn6uF7vlhI4wxkfD8MNBGgR-smRA7k,35401
20
20
  uiprotect/data/bootstrap.py,sha256=r0T1qD6ZFC86pWK-70kx5MxugrN31XqVxUQ6BfB78O4,23552
21
21
  uiprotect/data/convert.py,sha256=xEN878_hm0HZZCVYGwJSxcSp2as9zpkvsemVIibReOA,2628
22
- uiprotect/data/devices.py,sha256=9oJ4u0_828WfEBjB4_K2O3zrpb-Ce7IlSm8RiGmuX5s,116217
22
+ uiprotect/data/devices.py,sha256=vnJcnBUMvyjvo8Y9IIwH5p3VTtwhTGFB-CzMk5-044I,116438
23
23
  uiprotect/data/nvr.py,sha256=HnknmMmUxe1aPA0PHJZSiEwpvo1phtHBp3wXsU6v_iI,46681
24
24
  uiprotect/data/types.py,sha256=RhVqW9mteksrjYMlUqm8YKaVNq5Xc_ksg6-ipSwiR-4,19300
25
25
  uiprotect/data/user.py,sha256=Del5LUmt5uCfAQMI9-kl_GaKm085oTLjxmcCrlEKXxc,10526
@@ -30,10 +30,10 @@ uiprotect/release_cache.json,sha256=NamnSFy78hOWY0DPO87J9ELFCAN6NnVquv8gQO75ZG4,
30
30
  uiprotect/stream.py,sha256=ls65vMOXF4IlJ5axewFITfhcaTh_ihaFeCkCTfhy0Nk,5168
31
31
  uiprotect/test_util/__init__.py,sha256=O22HGFX5Mb0j9LPzO48tm4ZqZTqGVBHo0jnye2FdT_I,19803
32
32
  uiprotect/test_util/anonymize.py,sha256=f-8ijU-_y9r-uAbhIPn0f0I6hzJpAkvJzc8UpWihObI,8478
33
- uiprotect/utils.py,sha256=2fLwXN0oz9dcVTFexzLp8jj97lcYrxLZkeEUGf5ehtU,20587
33
+ uiprotect/utils.py,sha256=4EIblOcOxlApiXkI2rwram4SkgiMu_JTDRIZOul83Bc,20749
34
34
  uiprotect/websocket.py,sha256=ww-PberFztJppRQMKwdu5A9gyofepV-Y6am4Hj_DV44,8178
35
- uiprotect-7.17.0.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
36
- uiprotect-7.17.0.dist-info/METADATA,sha256=WolQsKgCz8u_Zp0_AyytGIQ4QGQtda0ytO2nSW83DNE,11167
37
- uiprotect-7.17.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
38
- uiprotect-7.17.0.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
39
- uiprotect-7.17.0.dist-info/RECORD,,
35
+ uiprotect-7.18.1.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
36
+ uiprotect-7.18.1.dist-info/METADATA,sha256=Z--39OPK7v3OgtgpVxaZ_MP5gwSfLAVBOzfIW3adReY,11167
37
+ uiprotect-7.18.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
38
+ uiprotect-7.18.1.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
39
+ uiprotect-7.18.1.dist-info/RECORD,,