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.
- {uiprotect-7.17.0 → uiprotect-7.18.1}/PKG-INFO +1 -1
- {uiprotect-7.17.0 → uiprotect-7.18.1}/pyproject.toml +1 -1
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/api.py +9 -3
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/devices.py +9 -2
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/utils.py +5 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/LICENSE +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/README.md +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/__init__.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/__main__.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/_compat.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/__init__.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/aiports.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/backup.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/base.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/cameras.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/chimes.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/doorlocks.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/events.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/lights.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/liveviews.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/nvr.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/sensors.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/cli/viewers.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/__init__.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/base.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/bootstrap.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/convert.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/nvr.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/types.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/user.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/data/websocket.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/exceptions.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/py.typed +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/release_cache.json +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/stream.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/test_util/__init__.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/test_util/anonymize.py +0 -0
- {uiprotect-7.17.0 → uiprotect-7.18.1}/src/uiprotect/websocket.py +0 -0
|
@@ -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(
|
|
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
|
-
|
|
1527
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|