uiprotect 1.7.2__py3-none-any.whl → 1.9.0__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/base.py +5 -14
- uiprotect/data/bootstrap.py +10 -15
- uiprotect/data/types.py +33 -19
- {uiprotect-1.7.2.dist-info → uiprotect-1.9.0.dist-info}/METADATA +1 -1
- {uiprotect-1.7.2.dist-info → uiprotect-1.9.0.dist-info}/RECORD +8 -8
- {uiprotect-1.7.2.dist-info → uiprotect-1.9.0.dist-info}/LICENSE +0 -0
- {uiprotect-1.7.2.dist-info → uiprotect-1.9.0.dist-info}/WHEEL +0 -0
- {uiprotect-1.7.2.dist-info → uiprotect-1.9.0.dist-info}/entry_points.txt +0 -0
uiprotect/data/base.py
CHANGED
|
@@ -55,13 +55,6 @@ if TYPE_CHECKING:
|
|
|
55
55
|
from ..data.nvr import Event
|
|
56
56
|
from ..data.user import User
|
|
57
57
|
|
|
58
|
-
try:
|
|
59
|
-
from pydantic.v1.typing import DictStrAny
|
|
60
|
-
except ImportError:
|
|
61
|
-
from pydantic.typing import ( # type: ignore[assignment, no-redef]
|
|
62
|
-
DictStrAny,
|
|
63
|
-
)
|
|
64
|
-
|
|
65
58
|
|
|
66
59
|
ProtectObject = TypeVar("ProtectObject", bound="ProtectBaseObject")
|
|
67
60
|
RECENT_EVENT_MAX = timedelta(seconds=30)
|
|
@@ -91,7 +84,6 @@ class ProtectBaseObject(BaseModel):
|
|
|
91
84
|
_protect_objs: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
|
|
92
85
|
_protect_lists: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
|
|
93
86
|
_protect_dicts: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
|
|
94
|
-
_to_unifi_remaps: ClassVar[DictStrAny | None] = None
|
|
95
87
|
|
|
96
88
|
class Config:
|
|
97
89
|
arbitrary_types_allowed = True
|
|
@@ -197,6 +189,7 @@ class ProtectBaseObject(BaseModel):
|
|
|
197
189
|
return set(self._get_unifi_remaps())
|
|
198
190
|
|
|
199
191
|
@classmethod
|
|
192
|
+
@cache
|
|
200
193
|
def _get_to_unifi_remaps(cls) -> dict[str, str]:
|
|
201
194
|
"""
|
|
202
195
|
Helper method for overriding in child classes for reversing remap UFP
|
|
@@ -208,12 +201,9 @@ class ProtectBaseObject(BaseModel):
|
|
|
208
201
|
"python_name": "ufpJsonName"
|
|
209
202
|
}
|
|
210
203
|
"""
|
|
211
|
-
|
|
212
|
-
cls.
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return cls._to_unifi_remaps
|
|
204
|
+
return {
|
|
205
|
+
to_key: from_key for from_key, to_key in cls._get_unifi_remaps().items()
|
|
206
|
+
}
|
|
217
207
|
|
|
218
208
|
@classmethod
|
|
219
209
|
def _set_protect_subtypes(cls) -> None:
|
|
@@ -630,6 +620,7 @@ class ProtectModelWithId(ProtectModel):
|
|
|
630
620
|
return obj
|
|
631
621
|
|
|
632
622
|
@classmethod
|
|
623
|
+
@cache
|
|
633
624
|
def _get_read_only_fields(cls) -> set[str]:
|
|
634
625
|
return set()
|
|
635
626
|
|
uiprotect/data/bootstrap.py
CHANGED
|
@@ -154,10 +154,6 @@ class ProtectDeviceRef(ProtectBaseObject):
|
|
|
154
154
|
id: str
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
_ModelType_NVR_value = ModelType.NVR.value
|
|
158
|
-
_ModelType_Event_value = ModelType.EVENT.value
|
|
159
|
-
|
|
160
|
-
|
|
161
157
|
class Bootstrap(ProtectBaseObject):
|
|
162
158
|
auth_user_id: str
|
|
163
159
|
access_key: str
|
|
@@ -197,8 +193,8 @@ class Bootstrap(ProtectBaseObject):
|
|
|
197
193
|
)
|
|
198
194
|
data["macLookup"] = {}
|
|
199
195
|
data["idLookup"] = {}
|
|
200
|
-
for model_type in ModelType.bootstrap_models_types_set
|
|
201
|
-
key = model_type.devices_key
|
|
196
|
+
for model_type in ModelType.bootstrap_models_types_set:
|
|
197
|
+
key = model_type.devices_key # type: ignore[attr-defined]
|
|
202
198
|
items: dict[str, ProtectModel] = {}
|
|
203
199
|
for item in data[key]:
|
|
204
200
|
if (
|
|
@@ -234,8 +230,8 @@ class Bootstrap(ProtectBaseObject):
|
|
|
234
230
|
if "idLookup" in data:
|
|
235
231
|
del data["idLookup"]
|
|
236
232
|
|
|
237
|
-
for model_type in ModelType.bootstrap_models_types_set
|
|
238
|
-
attr = model_type.devices_key
|
|
233
|
+
for model_type in ModelType.bootstrap_models_types_set:
|
|
234
|
+
attr = model_type.devices_key # type: ignore[attr-defined]
|
|
239
235
|
if attr in data and isinstance(data[attr], dict):
|
|
240
236
|
data[attr] = list(data[attr].values())
|
|
241
237
|
|
|
@@ -357,17 +353,16 @@ class Bootstrap(ProtectBaseObject):
|
|
|
357
353
|
if TYPE_CHECKING:
|
|
358
354
|
assert isinstance(obj, NVR)
|
|
359
355
|
self.nvr = obj
|
|
360
|
-
elif model_type in ModelType.bootstrap_models_types_set
|
|
356
|
+
elif model_type in ModelType.bootstrap_models_types_set:
|
|
361
357
|
if TYPE_CHECKING:
|
|
362
358
|
assert isinstance(obj, ProtectAdoptableDeviceModel)
|
|
363
|
-
assert isinstance(obj.model, ModelType)
|
|
364
|
-
key = obj.model.devices_key
|
|
365
359
|
if not self._api.ignore_unadopted or (
|
|
366
360
|
obj.is_adopted and not obj.is_adopted_by_other
|
|
367
361
|
):
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
362
|
+
id_ = obj.id
|
|
363
|
+
getattr(self, model_type.devices_key)[id_] = obj
|
|
364
|
+
ref = ProtectDeviceRef(model=model_type, id=id_)
|
|
365
|
+
self.id_lookup[id_] = ref
|
|
371
366
|
self.mac_lookup[normalize_mac(obj.mac)] = ref
|
|
372
367
|
else:
|
|
373
368
|
_LOGGER.debug("Unexpected bootstrap model type for add: %s", model_type)
|
|
@@ -555,7 +550,7 @@ class Bootstrap(ProtectBaseObject):
|
|
|
555
550
|
if action_action == "update":
|
|
556
551
|
if model_type is ModelType.NVR:
|
|
557
552
|
return self._process_nvr_update(packet, data, ignore_stats)
|
|
558
|
-
if model_type in ModelType.bootstrap_models_types_and_event_set
|
|
553
|
+
if model_type in ModelType.bootstrap_models_types_and_event_set:
|
|
559
554
|
return self._process_device_update(
|
|
560
555
|
model_type,
|
|
561
556
|
packet,
|
uiprotect/data/types.py
CHANGED
|
@@ -109,6 +109,12 @@ class ModelType(str, UnknownValuesEnumMixin, enum.Enum):
|
|
|
109
109
|
RECORDING_SCHEDULE = "recordingSchedule"
|
|
110
110
|
UNKNOWN = "unknown"
|
|
111
111
|
|
|
112
|
+
bootstrap_model_types: tuple[ModelType, ...]
|
|
113
|
+
bootstrap_models: tuple[str, ...]
|
|
114
|
+
bootstrap_models_set: set[str]
|
|
115
|
+
bootstrap_models_types_set: set[ModelType]
|
|
116
|
+
bootstrap_models_types_and_event_set: set[ModelType]
|
|
117
|
+
|
|
112
118
|
@cached_property
|
|
113
119
|
def devices_key(self) -> str:
|
|
114
120
|
"""Return the devices key."""
|
|
@@ -119,9 +125,8 @@ class ModelType(str, UnknownValuesEnumMixin, enum.Enum):
|
|
|
119
125
|
def from_string(cls, value: str) -> ModelType:
|
|
120
126
|
return cls(value)
|
|
121
127
|
|
|
122
|
-
@
|
|
123
|
-
|
|
124
|
-
def bootstrap_model_types() -> tuple[ModelType, ...]:
|
|
128
|
+
@classmethod
|
|
129
|
+
def _bootstrap_model_types(cls) -> tuple[ModelType, ...]:
|
|
125
130
|
"""Return the bootstrap models as a tuple."""
|
|
126
131
|
# TODO:
|
|
127
132
|
# legacyUFV
|
|
@@ -139,31 +144,40 @@ class ModelType(str, UnknownValuesEnumMixin, enum.Enum):
|
|
|
139
144
|
ModelType.CHIME,
|
|
140
145
|
)
|
|
141
146
|
|
|
142
|
-
@
|
|
143
|
-
|
|
144
|
-
def bootstrap_models() -> tuple[str, ...]:
|
|
147
|
+
@classmethod
|
|
148
|
+
def _bootstrap_models(cls) -> tuple[str, ...]:
|
|
145
149
|
"""Return the bootstrap models strings as a tuple."""
|
|
146
150
|
return tuple(
|
|
147
|
-
model_type.value for model_type in ModelType.
|
|
151
|
+
model_type.value for model_type in ModelType._bootstrap_model_types()
|
|
148
152
|
)
|
|
149
153
|
|
|
150
|
-
@
|
|
151
|
-
|
|
152
|
-
def bootstrap_models_set() -> set[str]:
|
|
154
|
+
@classmethod
|
|
155
|
+
def _bootstrap_models_set(cls) -> set[str]:
|
|
153
156
|
"""Return the set of bootstrap models strings as a set."""
|
|
154
|
-
return set(ModelType.
|
|
157
|
+
return set(ModelType._bootstrap_models())
|
|
155
158
|
|
|
156
|
-
@
|
|
157
|
-
|
|
158
|
-
def bootstrap_models_types_set() -> set[ModelType]:
|
|
159
|
+
@classmethod
|
|
160
|
+
def _bootstrap_models_types_set(cls) -> set[ModelType]:
|
|
159
161
|
"""Return the set of bootstrap models as a set."""
|
|
160
|
-
return set(ModelType.
|
|
162
|
+
return set(ModelType._bootstrap_model_types())
|
|
161
163
|
|
|
162
|
-
@
|
|
163
|
-
|
|
164
|
-
def bootstrap_models_types_and_event_set() -> set[ModelType]:
|
|
164
|
+
@classmethod
|
|
165
|
+
def _bootstrap_models_types_and_event_set(cls) -> set[ModelType]:
|
|
165
166
|
"""Return the set of bootstrap models and the event model as a set."""
|
|
166
|
-
return ModelType.
|
|
167
|
+
return ModelType._bootstrap_models_types_set() | {ModelType.EVENT}
|
|
168
|
+
|
|
169
|
+
def _immutable(self, name: str, value: Any) -> None:
|
|
170
|
+
raise AttributeError("Cannot modify ModelType")
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
ModelType.bootstrap_model_types = ModelType._bootstrap_model_types()
|
|
174
|
+
ModelType.bootstrap_models = ModelType._bootstrap_models()
|
|
175
|
+
ModelType.bootstrap_models_set = ModelType._bootstrap_models_set()
|
|
176
|
+
ModelType.bootstrap_models_types_set = ModelType._bootstrap_models_types_set()
|
|
177
|
+
ModelType.bootstrap_models_types_and_event_set = (
|
|
178
|
+
ModelType._bootstrap_models_types_and_event_set()
|
|
179
|
+
)
|
|
180
|
+
ModelType.__setattr__ = ModelType._immutable # type: ignore[method-assign, assignment]
|
|
167
181
|
|
|
168
182
|
|
|
169
183
|
@enum.unique
|
|
@@ -14,12 +14,12 @@ uiprotect/cli/nvr.py,sha256=TwxEg2XT8jXAbOqv6gc7KFXELKadeItEDYweSL4_-e8,4260
|
|
|
14
14
|
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
|
-
uiprotect/data/base.py,sha256=
|
|
18
|
-
uiprotect/data/bootstrap.py,sha256=
|
|
17
|
+
uiprotect/data/base.py,sha256=apIXKZHL6dbyXTT4C4lkyo4M-Nf_DwsVXoXBL5jcXVo,37574
|
|
18
|
+
uiprotect/data/bootstrap.py,sha256=864mLxum0BmC3lIeKqHTs_Z5ikeJIDaRs4ukaVOilWw,21372
|
|
19
19
|
uiprotect/data/convert.py,sha256=8h6Il_DhMkPRDPj9F_rA2UZIlTuchS3BQD24peKpk2A,2185
|
|
20
20
|
uiprotect/data/devices.py,sha256=Nq3bOko5PFf5LvEBoD4JV8kmbq50laRdh3VHMWX7t-0,111809
|
|
21
21
|
uiprotect/data/nvr.py,sha256=XC4NO1c_Mom-hIpzj9ksKFcgKbHd6ToqWjkgzxJ1PJY,47636
|
|
22
|
-
uiprotect/data/types.py,sha256
|
|
22
|
+
uiprotect/data/types.py,sha256=8z8jIoMlfDre7Op1JAN45PLZdAE-4i3gDPSo2uymqu4,17996
|
|
23
23
|
uiprotect/data/user.py,sha256=Wb-ZWSwIJbyUbfVuENtUYbuW-uftHNDcoMH85dvEjkw,7071
|
|
24
24
|
uiprotect/data/websocket.py,sha256=WZJVA7EfYuKYMv-9jmvGgMWXKzE9ES25SKv1NQ2eHjc,6281
|
|
25
25
|
uiprotect/exceptions.py,sha256=kgn0cRM6lTtgLza09SDa3ZiX6ue1QqHCOogQ4qu6KTQ,965
|
|
@@ -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.
|
|
34
|
-
uiprotect-1.
|
|
35
|
-
uiprotect-1.
|
|
36
|
-
uiprotect-1.
|
|
37
|
-
uiprotect-1.
|
|
33
|
+
uiprotect-1.9.0.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
|
|
34
|
+
uiprotect-1.9.0.dist-info/METADATA,sha256=XaM24hta0s3qHiy9AdwqBBSqN9civ3yV8yLZcRynksQ,10984
|
|
35
|
+
uiprotect-1.9.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
36
|
+
uiprotect-1.9.0.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
|
|
37
|
+
uiprotect-1.9.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|