uiprotect 6.6.2__py3-none-any.whl → 6.6.4__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/__init__.py CHANGED
@@ -21,7 +21,7 @@ __all__ = [
21
21
  "get_nested_attr",
22
22
  "get_nested_attr_as_bool",
23
23
  "get_top_level_attr_as_bool",
24
- "make_value_getter",
25
24
  "make_enabled_getter",
26
25
  "make_required_getter",
26
+ "make_value_getter",
27
27
  ]
uiprotect/api.py CHANGED
@@ -12,7 +12,7 @@ import time
12
12
  from collections.abc import Callable
13
13
  from datetime import datetime, timedelta
14
14
  from functools import partial
15
- from http import HTTPStatus
15
+ from http import HTTPStatus, cookies
16
16
  from http.cookies import Morsel, SimpleCookie
17
17
  from ipaddress import IPv4Address, IPv6Address
18
18
  from pathlib import Path
@@ -67,9 +67,7 @@ from .utils import (
67
67
  )
68
68
  from .websocket import Websocket, WebsocketState
69
69
 
70
- if sys.version_info[:2] < (3, 13):
71
- from http import cookies
72
-
70
+ if "partitioned" not in cookies.Morsel._reserved: # type: ignore[attr-defined]
73
71
  # See: https://github.com/python/cpython/issues/112713
74
72
  cookies.Morsel._reserved["partitioned"] = "partitioned" # type: ignore[attr-defined]
75
73
  cookies.Morsel._flags.add("partitioned") # type: ignore[attr-defined]
uiprotect/data/devices.py CHANGED
@@ -2014,17 +2014,18 @@ class Camera(ProtectMotionDeviceModel):
2014
2014
  Datetime of screenshot is approximate. It may be +/- a few seconds.
2015
2015
  """
2016
2016
  # Use READ_LIVE if dt is None, otherwise READ_MEDIA
2017
- permission = (
2018
- PermissionNode.READ_LIVE if dt is None else PermissionNode.READ_MEDIA
2019
- )
2020
- if not self._api.bootstrap.auth_user.can(
2021
- ModelType.CAMERA,
2022
- permission,
2023
- self,
2024
- ):
2025
- action = "read live" if dt is None else "read media"
2017
+ auth_user = self._api.bootstrap.auth_user
2018
+ if dt is None:
2019
+ if not (
2020
+ auth_user.can(ModelType.CAMERA, PermissionNode.READ_LIVE, self)
2021
+ or auth_user.can(ModelType.CAMERA, PermissionNode.READ_MEDIA, self)
2022
+ ):
2023
+ raise NotAuthorized(
2024
+ f"Do not have permission to read live or media for camera: {self.id}"
2025
+ )
2026
+ elif not auth_user.can(ModelType.CAMERA, PermissionNode.READ_MEDIA, self):
2026
2027
  raise NotAuthorized(
2027
- f"Do not have permission to {action} for camera: {self.id}"
2028
+ f"Do not have permission to read media for camera: {self.id}"
2028
2029
  )
2029
2030
 
2030
2031
  if height is None and width is None and self.high_camera_channel is not None:
@@ -2046,18 +2047,19 @@ class Camera(ProtectMotionDeviceModel):
2046
2047
  if not self.feature_flags.has_package_camera:
2047
2048
  raise BadRequest("Device does not have package camera")
2048
2049
 
2050
+ auth_user = self._api.bootstrap.auth_user
2049
2051
  # Use READ_LIVE if dt is None, otherwise READ_MEDIA
2050
- permission = (
2051
- PermissionNode.READ_LIVE if dt is None else PermissionNode.READ_MEDIA
2052
- )
2053
- if not self._api.bootstrap.auth_user.can(
2054
- ModelType.CAMERA,
2055
- permission,
2056
- self,
2057
- ):
2058
- action = "read live" if dt is None else "read media"
2052
+ if dt is None:
2053
+ if not (
2054
+ auth_user.can(ModelType.CAMERA, PermissionNode.READ_LIVE, self)
2055
+ or auth_user.can(ModelType.CAMERA, PermissionNode.READ_MEDIA, self)
2056
+ ):
2057
+ raise NotAuthorized(
2058
+ f"Do not have permission to read live or media for camera: {self.id}"
2059
+ )
2060
+ elif not auth_user.can(ModelType.CAMERA, PermissionNode.READ_MEDIA, self):
2059
2061
  raise NotAuthorized(
2060
- f"Do not have permission to {action} for camera: {self.id}"
2062
+ f"Do not have permission to read media for camera: {self.id}"
2061
2063
  )
2062
2064
 
2063
2065
  if height is None and width is None and self.package_camera_channel is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uiprotect
3
- Version: 6.6.2
3
+ Version: 6.6.4
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,7 +1,7 @@
1
- uiprotect/__init__.py,sha256=GDRM9WvWUBbOyBVgltq6Qv8i7LVdWEbG8q5EzYvOFbE,636
1
+ uiprotect/__init__.py,sha256=Oz6i1tonIz4QWVnEPkbielJDJ3WQdwZVgYtjY4IwGAQ,636
2
2
  uiprotect/__main__.py,sha256=C_bHCOkv5qj6WMy-6ELoY3Y6HDhLxOa1a30CzmbZhsg,462
3
3
  uiprotect/_compat.py,sha256=HThmb1zQZCEssCxYYbQzFhJq8zYYlVaSnIEZabKc-6U,302
4
- uiprotect/api.py,sha256=RkaGtvzIkWg0OCM429uKnqklHbqruCjVTwo-iEo5uKU,67954
4
+ uiprotect/api.py,sha256=Gc_x8mo-W-xtEFAhRIkiQyW99MJQgWdkkXlKxl3h-JU,67978
5
5
  uiprotect/cli/__init__.py,sha256=1MO8rJmjjAsfVx2x01gn5DJo8B64xdPGo6gRVJbWd18,8868
6
6
  uiprotect/cli/backup.py,sha256=ZiS7RZnJGKI8TJKLW2cOUzkRM8nyTvE5Ov_jZZGtvSM,36708
7
7
  uiprotect/cli/base.py,sha256=k-_qGuNT7br0iV0KE5F4wYXF75iyLLjBEckTqxC71xM,7591
@@ -18,7 +18,7 @@ uiprotect/data/__init__.py,sha256=OcfuJl2qXfHcj_mdnrHhzZ5tEIZrw8auziX5IE7dn-I,29
18
18
  uiprotect/data/base.py,sha256=sn7IHKQN96uiZL6ImN1gdCHV97EpUmy-X7xWTUAtWsg,35054
19
19
  uiprotect/data/bootstrap.py,sha256=iROUw-pPdJpytaV8Dg5peOJotI7jidXJABsEzCQGid8,20704
20
20
  uiprotect/data/convert.py,sha256=8h6Il_DhMkPRDPj9F_rA2UZIlTuchS3BQD24peKpk2A,2185
21
- uiprotect/data/devices.py,sha256=H3ioGq8Px_McyrLykAcA2gAtTmkpsd6DdKX0XdDNpL4,113041
21
+ uiprotect/data/devices.py,sha256=KIk4o1mhE7EruhuwroyoBf2kLOCTh0-LYBa7yaqk1bU,113421
22
22
  uiprotect/data/nvr.py,sha256=FGI0eIAyy3Zy9kaxcr67HxwaVCUU8wq3oZyWvoDq7Sg,47251
23
23
  uiprotect/data/types.py,sha256=PA9YOEJCmh9DAlJajHh2Y6hi4aTjlQ8LhWN8ZH5x7Fc,18522
24
24
  uiprotect/data/user.py,sha256=1o5gyPHafn4lHARpoSMD_NWbo5IbzGPfiSASwqqDvWs,7002
@@ -31,8 +31,8 @@ uiprotect/test_util/__init__.py,sha256=Ky8mTL61nhp5II2mxTKBAsSGvNqK8U_CfKC5AGwTo
31
31
  uiprotect/test_util/anonymize.py,sha256=f-8ijU-_y9r-uAbhIPn0f0I6hzJpAkvJzc8UpWihObI,8478
32
32
  uiprotect/utils.py,sha256=jIWT7n_reL90oY91svBfQ4naRxo28qHzP5jNOL12mQE,20342
33
33
  uiprotect/websocket.py,sha256=tEyenqblNXHcjWYuf4oRP1E7buNwx6zoECMwpBr-jig,8191
34
- uiprotect-6.6.2.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
35
- uiprotect-6.6.2.dist-info/METADATA,sha256=xUdjKyhJ_-hA0KUUdzYxlbQlC3clFxToPZc11A8iSCc,11096
36
- uiprotect-6.6.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
37
- uiprotect-6.6.2.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
38
- uiprotect-6.6.2.dist-info/RECORD,,
34
+ uiprotect-6.6.4.dist-info/LICENSE,sha256=INx18jhdbVXMEiiBANeKEbrbz57ckgzxk5uutmmcxGk,1111
35
+ uiprotect-6.6.4.dist-info/METADATA,sha256=I5I00-fRjsppSQH_SgW27u4_fAmaH4yDJo_OAlTvRfM,11096
36
+ uiprotect-6.6.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
37
+ uiprotect-6.6.4.dist-info/entry_points.txt,sha256=J78AUTPrTTxgI3s7SVgrmGqDP7piX2wuuEORzhDdVRA,47
38
+ uiprotect-6.6.4.dist-info/RECORD,,