uiprotect 7.5.2__tar.gz → 7.5.3__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.5.2 → uiprotect-7.5.3}/PKG-INFO +1 -1
- {uiprotect-7.5.2 → uiprotect-7.5.3}/pyproject.toml +2 -2
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/base.py +8 -9
- {uiprotect-7.5.2 → uiprotect-7.5.3}/LICENSE +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/README.md +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/__init__.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/__main__.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/_compat.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/api.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/__init__.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/aiports.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/backup.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/base.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/cameras.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/chimes.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/doorlocks.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/events.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/lights.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/liveviews.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/nvr.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/sensors.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/cli/viewers.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/__init__.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/bootstrap.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/convert.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/devices.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/nvr.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/types.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/user.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/data/websocket.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/exceptions.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/py.typed +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/release_cache.json +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/stream.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/test_util/__init__.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/test_util/anonymize.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/utils.py +0 -0
- {uiprotect-7.5.2 → uiprotect-7.5.3}/src/uiprotect/websocket.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "uiprotect"
|
|
3
|
-
version = "7.5.
|
|
3
|
+
version = "7.5.3"
|
|
4
4
|
description = "Python API for Unifi Protect (Unofficial)"
|
|
5
5
|
authors = ["UI Protect Maintainers <ui@koston.org>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -54,7 +54,7 @@ pytest = ">=7,<9"
|
|
|
54
54
|
pytest-cov = ">=3,<7"
|
|
55
55
|
aiosqlite = ">=0.20.0"
|
|
56
56
|
asttokens = ">=2.4.1,<4.0.0"
|
|
57
|
-
pytest-asyncio = ">=0.23.7,<0.
|
|
57
|
+
pytest-asyncio = ">=0.23.7,<0.27.0"
|
|
58
58
|
pytest-benchmark = ">=4,<6"
|
|
59
59
|
pytest-sugar = "^1.0.0"
|
|
60
60
|
pytest-timeout = "^2.3.1"
|
|
@@ -8,7 +8,7 @@ from collections.abc import Callable
|
|
|
8
8
|
from datetime import datetime, timedelta
|
|
9
9
|
from functools import cache
|
|
10
10
|
from ipaddress import IPv4Address
|
|
11
|
-
from typing import TYPE_CHECKING, Any, NamedTuple
|
|
11
|
+
from typing import TYPE_CHECKING, Any, NamedTuple
|
|
12
12
|
from uuid import UUID
|
|
13
13
|
|
|
14
14
|
from convertertools import pop_dict_set_if_none, pop_dict_tuple
|
|
@@ -53,7 +53,6 @@ if TYPE_CHECKING:
|
|
|
53
53
|
from ..data.user import User
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
ProtectObject = TypeVar("ProtectObject", bound="ProtectBaseObject")
|
|
57
56
|
RECENT_EVENT_MAX = timedelta(seconds=30)
|
|
58
57
|
EVENT_PING_INTERVAL = timedelta(seconds=3)
|
|
59
58
|
EVENT_PING_INTERVAL_SECONDS = EVENT_PING_INTERVAL.total_seconds()
|
|
@@ -478,7 +477,7 @@ class ProtectBaseObject(BaseModel):
|
|
|
478
477
|
|
|
479
478
|
return new_data
|
|
480
479
|
|
|
481
|
-
def update_from_dict(
|
|
480
|
+
def update_from_dict(self, data: dict[str, Any]) -> Self:
|
|
482
481
|
"""
|
|
483
482
|
Updates current object from a cleaned UFP JSON dict.
|
|
484
483
|
|
|
@@ -492,15 +491,15 @@ class ProtectBaseObject(BaseModel):
|
|
|
492
491
|
has_unifi_lists,
|
|
493
492
|
unifi_dicts,
|
|
494
493
|
has_unifi_dicts,
|
|
495
|
-
) =
|
|
496
|
-
api =
|
|
497
|
-
_fields =
|
|
494
|
+
) = self._get_protect_model()
|
|
495
|
+
api = self._api
|
|
496
|
+
_fields = self.__class__.model_fields
|
|
498
497
|
unifi_obj: ProtectBaseObject | None
|
|
499
498
|
value: Any
|
|
500
499
|
|
|
501
500
|
for key, item in data.items():
|
|
502
501
|
if has_unifi_objs and key in unifi_objs and isinstance(item, dict):
|
|
503
|
-
if (unifi_obj := getattr(
|
|
502
|
+
if (unifi_obj := getattr(self, key)) is not None:
|
|
504
503
|
value = unifi_obj.update_from_dict(item)
|
|
505
504
|
else:
|
|
506
505
|
value = unifi_objs[key](**item, api=api)
|
|
@@ -514,9 +513,9 @@ class ProtectBaseObject(BaseModel):
|
|
|
514
513
|
else:
|
|
515
514
|
value = convert_unifi_data(item, _fields[key])
|
|
516
515
|
|
|
517
|
-
setattr(
|
|
516
|
+
setattr(self, key, value)
|
|
518
517
|
|
|
519
|
-
return
|
|
518
|
+
return self
|
|
520
519
|
|
|
521
520
|
def dict_with_excludes(self) -> dict[str, Any]:
|
|
522
521
|
"""Returns a dict of the current object without any UFP objects converted to dicts."""
|
|
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
|
|
File without changes
|
|
File without changes
|