File: site.py

package info (click to toggle)
python-aiounifi 79-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 660 kB
  • sloc: python: 11,124; sh: 5; makefile: 5
file content (69 lines) | stat: -rw-r--r-- 1,513 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""Site is a specific grouping in a UniFi network."""

from dataclasses import dataclass
from typing import Self, TypedDict

from .api import ApiItem, ApiRequest


class TypedSite(TypedDict):
    """Site description."""

    _id: str
    attr_hidden_id: str
    attr_no_delete: bool
    desc: str
    name: str
    role: str


@dataclass
class SiteListRequest(ApiRequest):
    """Request object for site list."""

    @classmethod
    def create(cls) -> Self:
        """Create site list request."""
        return cls(method="get", path="/self/sites")

    def full_path(self, site: str, is_unifi_os: bool) -> str:
        """Url to list sites is global for controller."""
        if is_unifi_os:
            return f"/proxy/network/api{self.path}"
        return f"/api{self.path}"


class Site(ApiItem):
    """Represents a network device."""

    raw: TypedSite

    @property
    def site_id(self) -> str:
        """Site ID."""
        return self.raw["_id"]

    @property
    def description(self) -> str:
        """Site description."""
        return self.raw["desc"]

    @property
    def hidden_id(self) -> str:
        """Unknown."""
        return self.raw["attr_hidden_id"]

    @property
    def name(self) -> str:
        """Site name."""
        return self.raw["name"]

    @property
    def no_delete(self) -> bool:
        """Can not delete site."""
        return self.raw["attr_no_delete"]

    @property
    def role(self) -> str:
        """User role."""
        return self.raw["role"]