File: root.py

package info (click to toggle)
python-aiohasupervisor 0.3.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 932 kB
  • sloc: python: 4,666; sh: 37; makefile: 3
file content (114 lines) | stat: -rw-r--r-- 2,335 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
"""Models for root APIs."""

from dataclasses import dataclass
from enum import StrEnum

from .base import ResponseData

# --- ENUMS ----


class HostFeature(StrEnum):
    """HostFeature type.

    This is an incomplete list. Supervisor regularly adds support for new host
    features as users request them. Therefore when returning a list of host
    features, there may be some which are not in this list parsed as strings on
    older versions of the client.
    """

    DISK = "disk"
    HAOS = "haos"
    HOSTNAME = "hostname"
    JOURNAL = "journal"
    MOUNT = "mount"
    NETWORK = "network"
    OS_AGENT = "os_agent"
    REBOOT = "reboot"
    RESOLVED = "resolved"
    SERVICES = "services"
    SHUTDOWN = "shutdown"
    TIMEDATE = "timedate"


class SupervisorState(StrEnum):
    """SupervisorState type."""

    INITIALIZE = "initialize"
    SETUP = "setup"
    STARTUP = "startup"
    RUNNING = "running"
    FREEZE = "freeze"
    SHUTDOWN = "shutdown"
    STOPPING = "stopping"
    CLOSE = "close"


class UpdateChannel(StrEnum):
    """UpdateChannel type."""

    STABLE = "stable"
    BETA = "beta"
    DEV = "dev"


class LogLevel(StrEnum):
    """LogLevel type."""

    DEBUG = "debug"
    INFO = "info"
    WARNING = "warning"
    ERROR = "error"
    CRITICAL = "critical"


class UpdateType(StrEnum):
    """UpdateType type."""

    ADDON = "addon"
    CORE = "core"
    OS = "os"
    SUPERVISOR = "supervisor"


# --- OBJECTS ----


@dataclass(frozen=True, slots=True)
class RootInfo(ResponseData):
    """Root info object."""

    supervisor: str
    homeassistant: str | None
    hassos: str | None
    docker: str
    hostname: str | None
    operating_system: str | None
    features: list[HostFeature | str]
    machine: str | None
    machine_id: str | None
    arch: str
    state: SupervisorState
    supported_arch: list[str]
    supported: bool
    channel: UpdateChannel
    logging: LogLevel
    timezone: str


@dataclass(frozen=True, slots=True)
class AvailableUpdate(ResponseData):
    """AvailableUpdate type."""

    update_type: UpdateType
    panel_path: str
    version_latest: str
    name: str | None = None
    icon: str | None = None


@dataclass(frozen=True, slots=True)
class AvailableUpdates(ResponseData):
    """AvailableUpdates type."""

    available_updates: list[AvailableUpdate]