uiprotect 7.15.0__tar.gz → 7.16.0__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.15.0 → uiprotect-7.16.0}/PKG-INFO +1 -1
- {uiprotect-7.15.0 → uiprotect-7.16.0}/pyproject.toml +1 -1
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/api.py +9 -7
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/devices.py +7 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/test_util/__init__.py +9 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/LICENSE +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/README.md +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/__init__.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/__main__.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/_compat.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/__init__.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/aiports.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/backup.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/base.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/cameras.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/chimes.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/doorlocks.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/events.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/lights.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/liveviews.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/nvr.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/sensors.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/cli/viewers.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/__init__.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/base.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/bootstrap.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/convert.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/nvr.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/types.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/user.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/data/websocket.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/exceptions.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/py.typed +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/release_cache.json +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/stream.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/test_util/anonymize.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/utils.py +0 -0
- {uiprotect-7.15.0 → uiprotect-7.16.0}/src/uiprotect/websocket.py +0 -0
|
@@ -1519,6 +1519,14 @@ class ProtectApiClient(BaseApiClient):
|
|
|
1519
1519
|
raise_exception=False,
|
|
1520
1520
|
)
|
|
1521
1521
|
|
|
1522
|
+
async def get_public_api_camera_snapshot(self, camera_id: str) -> bytes | None:
|
|
1523
|
+
"""Gets snapshot for a camera using public api."""
|
|
1524
|
+
return await self.api_request_raw(
|
|
1525
|
+
public_api=True,
|
|
1526
|
+
url=f"v1/cameras/{camera_id}/snapshot",
|
|
1527
|
+
params={"highQuality": "true"},
|
|
1528
|
+
)
|
|
1529
|
+
|
|
1522
1530
|
async def get_package_camera_snapshot(
|
|
1523
1531
|
self,
|
|
1524
1532
|
camera_id: str,
|
|
@@ -2089,15 +2097,9 @@ class ProtectApiClient(BaseApiClient):
|
|
|
2089
2097
|
if not name:
|
|
2090
2098
|
raise BadRequest("API key name cannot be empty")
|
|
2091
2099
|
|
|
2092
|
-
user_id = None
|
|
2093
|
-
if self._last_token_cookie_decode is not None:
|
|
2094
|
-
user_id = self._last_token_cookie_decode.get("userId")
|
|
2095
|
-
if not user_id:
|
|
2096
|
-
raise BadRequest("User ID not available for API key creation")
|
|
2097
|
-
|
|
2098
2100
|
response = await self.api_request(
|
|
2099
2101
|
api_path="/proxy/users/api/v2",
|
|
2100
|
-
url=
|
|
2102
|
+
url="/user/self/keys",
|
|
2101
2103
|
method="post",
|
|
2102
2104
|
json={"name": name},
|
|
2103
2105
|
)
|
|
@@ -2085,6 +2085,13 @@ class Camera(ProtectMotionDeviceModel):
|
|
|
2085
2085
|
|
|
2086
2086
|
return await self._api.get_camera_snapshot(self.id, width, height, dt=dt)
|
|
2087
2087
|
|
|
2088
|
+
async def get_public_api_snapshot(self) -> bytes | None:
|
|
2089
|
+
"""Gets snapshot for camera using public API."""
|
|
2090
|
+
if self._api._api_key is None:
|
|
2091
|
+
raise NotAuthorized("Cannot get public API snapshot without an API key.")
|
|
2092
|
+
|
|
2093
|
+
return await self._api.get_public_api_camera_snapshot(self.id)
|
|
2094
|
+
|
|
2088
2095
|
async def get_package_snapshot(
|
|
2089
2096
|
self,
|
|
2090
2097
|
width: int | None = None,
|
|
@@ -325,6 +325,15 @@ class SampleDataGenerator:
|
|
|
325
325
|
snapshot = await self.client.get_camera_snapshot(obj["id"], width, height)
|
|
326
326
|
await self.write_image_file(filename, snapshot)
|
|
327
327
|
|
|
328
|
+
# public api snapshot
|
|
329
|
+
pub_filename = "sample_camera_public_api_snapshot"
|
|
330
|
+
if self.anonymize:
|
|
331
|
+
self.log(f"Writing {pub_filename}...")
|
|
332
|
+
placeholder_image(self.output_folder / f"{pub_filename}.png", width, height)
|
|
333
|
+
else:
|
|
334
|
+
pub_snapshot = await self.client.get_public_api_camera_snapshot(obj["id"])
|
|
335
|
+
await self.write_image_file(pub_filename, pub_snapshot)
|
|
336
|
+
|
|
328
337
|
async def generate_motion_data(
|
|
329
338
|
self,
|
|
330
339
|
motion_event: dict[str, Any] | None,
|
|
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
|