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"]
|