uiprotect 7.1.0__tar.gz → 7.3.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 (38) hide show
  1. {uiprotect-7.1.0 → uiprotect-7.3.0}/PKG-INFO +1 -1
  2. {uiprotect-7.1.0 → uiprotect-7.3.0}/pyproject.toml +1 -1
  3. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/api.py +17 -2
  4. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/bootstrap.py +2 -0
  5. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/devices.py +9 -0
  6. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/types.py +2 -0
  7. {uiprotect-7.1.0 → uiprotect-7.3.0}/LICENSE +0 -0
  8. {uiprotect-7.1.0 → uiprotect-7.3.0}/README.md +0 -0
  9. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/__init__.py +0 -0
  10. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/__main__.py +0 -0
  11. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/_compat.py +0 -0
  12. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/__init__.py +0 -0
  13. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/aiports.py +0 -0
  14. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/backup.py +0 -0
  15. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/base.py +0 -0
  16. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/cameras.py +0 -0
  17. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/chimes.py +0 -0
  18. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/doorlocks.py +0 -0
  19. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/events.py +0 -0
  20. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/lights.py +0 -0
  21. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/liveviews.py +0 -0
  22. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/nvr.py +0 -0
  23. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/sensors.py +0 -0
  24. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/cli/viewers.py +0 -0
  25. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/__init__.py +0 -0
  26. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/base.py +0 -0
  27. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/convert.py +0 -0
  28. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/nvr.py +0 -0
  29. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/user.py +0 -0
  30. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/data/websocket.py +0 -0
  31. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/exceptions.py +0 -0
  32. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/py.typed +0 -0
  33. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/release_cache.json +0 -0
  34. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/stream.py +0 -0
  35. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/test_util/__init__.py +0 -0
  36. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/test_util/anonymize.py +0 -0
  37. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/utils.py +0 -0
  38. {uiprotect-7.1.0 → uiprotect-7.3.0}/src/uiprotect/websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uiprotect
3
- Version: 7.1.0
3
+ Version: 7.3.0
4
4
  Summary: Python API for Unifi Protect (Unofficial)
5
5
  Home-page: https://github.com/uilibs/uiprotect
6
6
  Author: UI Protect Maintainers
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uiprotect"
3
- version = "7.1.0"
3
+ version = "7.3.0"
4
4
  description = "Python API for Unifi Protect (Unofficial)"
5
5
  authors = ["UI Protect Maintainers <ui@koston.org>"]
6
6
  readme = "README.md"
@@ -1806,10 +1806,12 @@ class ProtectApiClient(BaseApiClient):
1806
1806
  *,
1807
1807
  volume: int | None = None,
1808
1808
  repeat_times: int | None = None,
1809
+ ringtone_id: str | None = None,
1810
+ track_no: int | None = None,
1809
1811
  ) -> None:
1810
1812
  """Plays chime tones on a chime"""
1811
1813
  data: dict[str, Any] | None = None
1812
- if volume or repeat_times:
1814
+ if volume or repeat_times or ringtone_id or track_no:
1813
1815
  chime = self.bootstrap.chimes.get(device_id)
1814
1816
  if chime is None:
1815
1817
  raise BadRequest("Invalid chime ID %s", device_id)
@@ -1817,8 +1819,11 @@ class ProtectApiClient(BaseApiClient):
1817
1819
  data = {
1818
1820
  "volume": volume or chime.volume,
1819
1821
  "repeatTimes": repeat_times or chime.repeat_times,
1820
- "trackNo": chime.track_no,
1822
+ "trackNo": track_no or chime.track_no,
1821
1823
  }
1824
+ if ringtone_id:
1825
+ data["ringtoneId"] = ringtone_id
1826
+ data.pop("trackNo", None)
1822
1827
 
1823
1828
  await self.api_request(
1824
1829
  f"chimes/{device_id}/play-speaker",
@@ -1830,6 +1835,16 @@ class ProtectApiClient(BaseApiClient):
1830
1835
  """Plays chime tones on a chime"""
1831
1836
  await self.api_request(f"chimes/{device_id}/play-buzzer", method="post")
1832
1837
 
1838
+ async def set_light_is_led_force_on(
1839
+ self, device_id: str, is_led_force_on: bool
1840
+ ) -> None:
1841
+ """Sets isLedForceOn for light.""" # workaround because forceOn doesnt work via websocket
1842
+ await self.api_request(
1843
+ f"lights/{device_id}",
1844
+ method="patch",
1845
+ json={"lightOnSettings": {"isLedForceOn": is_led_force_on}},
1846
+ )
1847
+
1833
1848
  async def clear_tamper_sensor(self, device_id: str) -> None:
1834
1849
  """Clears tamper status for sensor"""
1835
1850
  await self.api_request(f"sensors/{device_id}/clear-tamper-flag", method="post")
@@ -30,6 +30,7 @@ from .devices import (
30
30
  Doorlock,
31
31
  Light,
32
32
  ProtectAdoptableDeviceModel,
33
+ Ringtone,
33
34
  Sensor,
34
35
  Viewer,
35
36
  )
@@ -183,6 +184,7 @@ class Bootstrap(ProtectBaseObject):
183
184
  doorlocks: dict[str, Doorlock]
184
185
  chimes: dict[str, Chime]
185
186
  aiports: dict[str, AiPort]
187
+ ringtones: list[Ringtone]
186
188
  last_update_id: str
187
189
 
188
190
  # TODO:
@@ -3388,3 +3388,12 @@ class Chime(ProtectAdoptableDeviceModel):
3388
3388
 
3389
3389
  class AiPort(Camera):
3390
3390
  paired_cameras: list[str]
3391
+
3392
+
3393
+ class Ringtone(ProtectBaseObject):
3394
+ id: str
3395
+ name: str
3396
+ size: int
3397
+ is_default: bool
3398
+ nvr_mac: str
3399
+ model_key: str
@@ -128,6 +128,7 @@ class ModelType(str, UnknownValuesEnumMixin, enum.Enum):
128
128
  DEVICE_GROUP = "deviceGroup"
129
129
  RECORDING_SCHEDULE = "recordingSchedule"
130
130
  ULP_USER = "ulpUser"
131
+ RINGTONE = "ringtone"
131
132
  KEYRING = "keyring"
132
133
  UNKNOWN = "unknown"
133
134
 
@@ -523,6 +524,7 @@ class SleepStateType(str, ValuesEnumMixin, enum.Enum):
523
524
  class AutoExposureMode(str, ValuesEnumMixin, enum.Enum):
524
525
  MANUAL = "manual"
525
526
  AUTO = "auto"
527
+ NONE = "none"
526
528
  SHUTTER = "shutter"
527
529
  FLICK50 = "flick50"
528
530
  FLICK60 = "flick60"
File without changes
File without changes