uiprotect 0.6.0__tar.gz → 0.7.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.

Files changed (36) hide show
  1. {uiprotect-0.6.0 → uiprotect-0.7.0}/PKG-INFO +1 -1
  2. {uiprotect-0.6.0 → uiprotect-0.7.0}/pyproject.toml +1 -1
  3. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/base.py +29 -33
  4. {uiprotect-0.6.0 → uiprotect-0.7.0}/LICENSE +0 -0
  5. {uiprotect-0.6.0 → uiprotect-0.7.0}/README.md +0 -0
  6. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/__init__.py +0 -0
  7. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/__main__.py +0 -0
  8. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/api.py +0 -0
  9. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/__init__.py +0 -0
  10. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/backup.py +0 -0
  11. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/base.py +0 -0
  12. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/cameras.py +0 -0
  13. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/chimes.py +0 -0
  14. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/doorlocks.py +0 -0
  15. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/events.py +0 -0
  16. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/lights.py +0 -0
  17. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/liveviews.py +0 -0
  18. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/nvr.py +0 -0
  19. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/sensors.py +0 -0
  20. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/cli/viewers.py +0 -0
  21. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/__init__.py +0 -0
  22. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/bootstrap.py +0 -0
  23. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/convert.py +0 -0
  24. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/devices.py +0 -0
  25. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/nvr.py +0 -0
  26. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/types.py +0 -0
  27. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/user.py +0 -0
  28. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/data/websocket.py +0 -0
  29. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/exceptions.py +0 -0
  30. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/py.typed +0 -0
  31. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/release_cache.json +0 -0
  32. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/stream.py +0 -0
  33. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/test_util/__init__.py +0 -0
  34. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/test_util/anonymize.py +0 -0
  35. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/utils.py +0 -0
  36. {uiprotect-0.6.0 → uiprotect-0.7.0}/src/uiprotect/websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uiprotect
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: Python API for Unifi Protect (Unofficial)
5
5
  Home-page: https://github.com/uilibs/uiprotect
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uiprotect"
3
- version = "0.6.0"
3
+ version = "0.7.0"
4
4
  description = "Python API for Unifi Protect (Unofficial)"
5
5
  authors = ["UI Protect Maintainers <ui@koston.org>"]
6
6
  license = "MIT"
@@ -56,11 +56,10 @@ if TYPE_CHECKING:
56
56
  from ..data.user import User
57
57
 
58
58
  try:
59
- from pydantic.v1.typing import DictStrAny, SetStr
59
+ from pydantic.v1.typing import DictStrAny
60
60
  except ImportError:
61
61
  from pydantic.typing import ( # type: ignore[assignment, no-redef]
62
62
  DictStrAny,
63
- SetStr,
64
63
  )
65
64
 
66
65
 
@@ -88,11 +87,8 @@ class ProtectBaseObject(BaseModel):
88
87
  _api: ProtectApiClient | None = PrivateAttr(None)
89
88
 
90
89
  _protect_objs: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
91
- _protect_objs_set: ClassVar[SetStr | None] = None
92
90
  _protect_lists: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
93
- _protect_lists_set: ClassVar[SetStr | None] = None
94
91
  _protect_dicts: ClassVar[dict[str, type[ProtectBaseObject]] | None] = None
95
- _protect_dicts_set: ClassVar[SetStr | None] = None
96
92
  _to_unifi_remaps: ClassVar[DictStrAny | None] = None
97
93
 
98
94
  class Config:
@@ -192,6 +188,12 @@ class ProtectBaseObject(BaseModel):
192
188
  """
193
189
  return {}
194
190
 
191
+ @classmethod
192
+ @cache
193
+ def _get_unifi_remaps_set(self) -> set[str]:
194
+ """Helper method to get set of all child UFP objects."""
195
+ return set(self._get_unifi_remaps())
196
+
195
197
  @classmethod
196
198
  def _get_to_unifi_remaps(cls) -> dict[str, str]:
197
199
  """
@@ -231,55 +233,49 @@ class ProtectBaseObject(BaseModel):
231
233
  pass
232
234
 
233
235
  @classmethod
236
+ @cache
234
237
  def _get_protect_objs(cls) -> dict[str, type[ProtectBaseObject]]:
235
238
  """Helper method to get all child UFP objects"""
236
- if cls._protect_objs is not None:
237
- return cls._protect_objs
238
-
239
- cls._set_protect_subtypes()
240
- return cls._protect_objs # type: ignore[return-value]
239
+ if cls._protect_objs is None:
240
+ cls._set_protect_subtypes()
241
+ assert cls._protect_objs is not None
242
+ return cls._protect_objs
241
243
 
242
244
  @classmethod
245
+ @cache
243
246
  def _get_protect_objs_set(cls) -> set[str]:
244
247
  """Helper method to get all child UFP objects"""
245
- if cls._protect_objs_set is None:
246
- cls._protect_objs_set = set(cls._get_protect_objs().keys())
247
-
248
- return cls._protect_objs_set
248
+ return set(cls._get_protect_objs())
249
249
 
250
250
  @classmethod
251
+ @cache
251
252
  def _get_protect_lists(cls) -> dict[str, type[ProtectBaseObject]]:
252
253
  """Helper method to get all child of UFP objects (lists)"""
253
- if cls._protect_lists is not None:
254
- return cls._protect_lists
255
-
256
- cls._set_protect_subtypes()
257
- return cls._protect_lists # type: ignore[return-value]
254
+ if cls._protect_lists is None:
255
+ cls._set_protect_subtypes()
256
+ assert cls._protect_lists is not None
257
+ return cls._protect_lists
258
258
 
259
259
  @classmethod
260
+ @cache
260
261
  def _get_protect_lists_set(cls) -> set[str]:
261
262
  """Helper method to get all child UFP objects"""
262
- if cls._protect_lists_set is None:
263
- cls._protect_lists_set = set(cls._get_protect_lists().keys())
264
-
265
- return cls._protect_lists_set
263
+ return set(cls._get_protect_lists())
266
264
 
267
265
  @classmethod
266
+ @cache
268
267
  def _get_protect_dicts(cls) -> dict[str, type[ProtectBaseObject]]:
269
268
  """Helper method to get all child of UFP objects (dicts)"""
270
- if cls._protect_dicts is not None:
271
- return cls._protect_dicts
272
-
273
- cls._set_protect_subtypes()
274
- return cls._protect_dicts # type: ignore[return-value]
269
+ if cls._protect_dicts is None:
270
+ cls._set_protect_subtypes()
271
+ assert cls._protect_dicts is not None
272
+ return cls._protect_dicts
275
273
 
276
274
  @classmethod
275
+ @cache
277
276
  def _get_protect_dicts_set(cls) -> set[str]:
278
277
  """Helper method to get all child UFP objects"""
279
- if cls._protect_dicts_set is None:
280
- cls._protect_dicts_set = set(cls._get_protect_dicts().keys())
281
-
282
- return cls._protect_dicts_set
278
+ return set(cls._get_protect_dicts())
283
279
 
284
280
  @classmethod
285
281
  def _clean_protect_obj(
@@ -338,7 +334,7 @@ class ProtectBaseObject(BaseModel):
338
334
 
339
335
  # remap keys that will not be converted correctly by snake_case convert
340
336
  remaps = cls._get_unifi_remaps()
341
- for from_key in set(remaps).intersection(data):
337
+ for from_key in cls._get_unifi_remaps_set().intersection(data):
342
338
  data[remaps[from_key]] = data.pop(from_key)
343
339
 
344
340
  # convert to snake_case and remove extra fields
File without changes
File without changes