uiprotect 1.2.0__py3-none-any.whl → 1.2.2__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/data/bootstrap.py +37 -36
- uiprotect/data/nvr.py +9 -10
- {uiprotect-1.2.0.dist-info → uiprotect-1.2.2.dist-info}/METADATA +1 -1
- {uiprotect-1.2.0.dist-info → uiprotect-1.2.2.dist-info}/RECORD +7 -7
- {uiprotect-1.2.0.dist-info → uiprotect-1.2.2.dist-info}/LICENSE +0 -0
- {uiprotect-1.2.0.dist-info → uiprotect-1.2.2.dist-info}/WHEEL +0 -0
- {uiprotect-1.2.0.dist-info → uiprotect-1.2.2.dist-info}/entry_points.txt +0 -0
uiprotect/data/bootstrap.py
CHANGED
|
@@ -473,47 +473,48 @@ class Bootstrap(ProtectBaseObject):
|
|
|
473
473
|
key = f"{model_type}s"
|
|
474
474
|
devices: dict[str, ProtectModelWithId] = getattr(self, key)
|
|
475
475
|
action_id: str = action["id"]
|
|
476
|
-
if action_id in devices:
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
476
|
+
if action_id not in devices:
|
|
477
|
+
# ignore updates to events that phase out
|
|
478
|
+
if model_type != _ModelType_Event_value:
|
|
479
|
+
_LOGGER.debug("Unexpected %s: %s", key, action_id)
|
|
480
|
+
return None
|
|
481
|
+
|
|
482
|
+
obj = devices[action_id]
|
|
483
|
+
model = obj.model
|
|
484
|
+
data = obj.unifi_dict_to_dict(data)
|
|
485
|
+
old_obj = obj.copy()
|
|
486
|
+
obj = obj.update_from_dict(deepcopy(data))
|
|
487
|
+
|
|
488
|
+
if model is ModelType.EVENT:
|
|
489
|
+
if TYPE_CHECKING:
|
|
490
|
+
assert isinstance(obj, Event)
|
|
491
|
+
self.process_event(obj)
|
|
492
|
+
elif model is ModelType.CAMERA:
|
|
493
|
+
if TYPE_CHECKING:
|
|
494
|
+
assert isinstance(obj, Camera)
|
|
495
|
+
if "last_ring" in data and obj.last_ring:
|
|
496
|
+
is_recent = obj.last_ring + RECENT_EVENT_MAX >= utc_now()
|
|
497
|
+
_LOGGER.debug("last_ring for %s (%s)", obj.id, is_recent)
|
|
498
|
+
if is_recent:
|
|
499
|
+
obj.set_ring_timeout()
|
|
500
|
+
elif model is ModelType.SENSOR:
|
|
501
|
+
if TYPE_CHECKING:
|
|
502
|
+
assert isinstance(obj, Sensor)
|
|
503
|
+
if "alarm_triggered_at" in data and obj.alarm_triggered_at:
|
|
497
504
|
is_recent = obj.alarm_triggered_at + RECENT_EVENT_MAX >= utc_now()
|
|
498
505
|
_LOGGER.debug("alarm_triggered_at for %s (%s)", obj.id, is_recent)
|
|
499
506
|
if is_recent:
|
|
500
507
|
obj.set_alarm_timeout()
|
|
501
508
|
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
)
|
|
512
|
-
|
|
513
|
-
# ignore updates to events that phase out
|
|
514
|
-
if model_type != _ModelType_Event_value:
|
|
515
|
-
_LOGGER.debug("Unexpected %s: %s", key, action_id)
|
|
516
|
-
return None
|
|
509
|
+
devices[action_id] = obj
|
|
510
|
+
self._create_stat(packet, data, False)
|
|
511
|
+
return WSSubscriptionMessage(
|
|
512
|
+
action=WSAction.UPDATE,
|
|
513
|
+
new_update_id=self.last_update_id,
|
|
514
|
+
changed_data=data,
|
|
515
|
+
new_obj=obj,
|
|
516
|
+
old_obj=old_obj,
|
|
517
|
+
)
|
|
517
518
|
|
|
518
519
|
def process_ws_packet(
|
|
519
520
|
self,
|
uiprotect/data/nvr.py
CHANGED
|
@@ -1198,16 +1198,15 @@ class NVR(ProtectDeviceModel):
|
|
|
1198
1198
|
|
|
1199
1199
|
async def _read_cache_file(self, file_path: Path) -> set[Version] | None:
|
|
1200
1200
|
versions: set[Version] | None = None
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
_LOGGER.warning("Failed to parse cache file: %s", file_path)
|
|
1201
|
+
try:
|
|
1202
|
+
_LOGGER.debug("Reading release cache file: %s", file_path)
|
|
1203
|
+
async with aiofiles.open(file_path, "rb") as cache_file:
|
|
1204
|
+
versions = {Version(v) for v in orjson.loads(await cache_file.read())}
|
|
1205
|
+
except FileNotFoundError:
|
|
1206
|
+
# ignore missing file
|
|
1207
|
+
pass
|
|
1208
|
+
except Exception:
|
|
1209
|
+
_LOGGER.warning("Failed to parse cache file: %s", file_path)
|
|
1211
1210
|
|
|
1212
1211
|
return versions
|
|
1213
1212
|
|
|
@@ -15,10 +15,10 @@ uiprotect/cli/sensors.py,sha256=fQtcDJCVxs4VbAqcavgBy2ABiVxAW3GXtna6_XFBp2k,8153
|
|
|
15
15
|
uiprotect/cli/viewers.py,sha256=2cyrp104ffIvgT0wYGIO0G35QMkEbFe7fSVqLwDXQYQ,2171
|
|
16
16
|
uiprotect/data/__init__.py,sha256=OcfuJl2qXfHcj_mdnrHhzZ5tEIZrw8auziX5IE7dn-I,2938
|
|
17
17
|
uiprotect/data/base.py,sha256=kkPrRhvJV7igGyB3wv1fDvWH26Xzlbz94BjJkDiTvU4,38375
|
|
18
|
-
uiprotect/data/bootstrap.py,sha256=
|
|
18
|
+
uiprotect/data/bootstrap.py,sha256=JsbdZQAdlmLNg7dSv02pAhx1n3_wtFfLqSoj7kd8A-0,21296
|
|
19
19
|
uiprotect/data/convert.py,sha256=rOQplUMIdTMD2SbAx_iI9BNPDscnhDvyRVLEMDhtADg,2047
|
|
20
20
|
uiprotect/data/devices.py,sha256=Nq3bOko5PFf5LvEBoD4JV8kmbq50laRdh3VHMWX7t-0,111809
|
|
21
|
-
uiprotect/data/nvr.py,sha256=
|
|
21
|
+
uiprotect/data/nvr.py,sha256=jwJEl4o2kbvoYFB9wSJPghNj0905847-86ElT51nNs0,47580
|
|
22
22
|
uiprotect/data/types.py,sha256=6Z5ZqWTbH4Igy0l4QJShqQZ_zvrJKD0G-hZLjoBNP-U,16193
|
|
23
23
|
uiprotect/data/user.py,sha256=Y7DnnxwUOJRJYw5FntztAtwN-o-Fs48SNS3mHi4Y5To,7071
|
|
24
24
|
uiprotect/data/websocket.py,sha256=WZJVA7EfYuKYMv-9jmvGgMWXKzE9ES25SKv1NQ2eHjc,6281
|
|
@@ -30,8 +30,8 @@ uiprotect/test_util/__init__.py,sha256=d2g7afa0LSdixQ0kjEDYwafDFME_UlW2LzxpamZ2B
|
|
|
30
30
|
uiprotect/test_util/anonymize.py,sha256=f-8ijU-_y9r-uAbhIPn0f0I6hzJpAkvJzc8UpWihObI,8478
|
|
31
31
|
uiprotect/utils.py,sha256=6OLY8hNiCzk418PjJJIlFW7jjPzVt1vxBKEzBSqMeTk,18418
|
|
32
32
|
uiprotect/websocket.py,sha256=IzDPyqbzrkOMREvahN-e2zdvVD0VABSCWy6jSoCwOT0,7299
|
|
33
|
-
uiprotect-1.2.
|
|
34
|
-
uiprotect-1.2.
|
|
35
|
-
uiprotect-1.2.
|
|
36
|
-
uiprotect-1.2.
|
|
37
|
-
uiprotect-1.2.
|
|
33
|
+
uiprotect-1.2.2.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
|
|
34
|
+
uiprotect-1.2.2.dist-info/METADATA,sha256=pU-rmbBF_iFXCpjNQkujk-qjuiJBH1zMDw5ALwnlhQ4,10984
|
|
35
|
+
uiprotect-1.2.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
36
|
+
uiprotect-1.2.2.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
|
|
37
|
+
uiprotect-1.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|