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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
"""Models for Supervisor mounts."""
from abc import ABC
from dataclasses import dataclass, field
from enum import StrEnum
from pathlib import PurePath
from typing import Literal
from .base import Request, ResponseData
# --- ENUMS ----
class MountType(StrEnum):
"""MountType type."""
CIFS = "cifs"
NFS = "nfs"
class MountUsage(StrEnum):
"""MountUsage type."""
BACKUP = "backup"
MEDIA = "media"
SHARE = "share"
class MountState(StrEnum):
"""MountState type."""
ACTIVE = "active"
ACTIVATING = "activating"
DEACTIVATING = "deactivating"
FAILED = "failed"
INACTIVE = "inactive"
MAINTENANCE = "maintenance"
RELOADING = "reloading"
class MountCifsVersion(StrEnum):
"""Mount CIFS version."""
LEGACY_1_0 = "1.0"
LEGACY_2_0 = "2.0"
# --- OBJECTS ----
@dataclass(frozen=True)
class Mount(ABC):
"""Mount ABC type."""
usage: MountUsage
server: str
port: int | None = field(kw_only=True, default=None)
@dataclass(frozen=True)
class CIFSMount(ABC):
"""CIFSMount ABC type."""
share: str
version: MountCifsVersion | None = field(kw_only=True, default=None)
@dataclass(frozen=True)
class NFSMount(ABC):
"""NFSMount ABC type."""
path: PurePath
@dataclass(frozen=True)
class MountResponse(ABC):
"""MountResponse model."""
name: str
read_only: bool
state: MountState | None
user_path: PurePath | None
@dataclass(frozen=True)
class MountRequest(ABC): # noqa: B024
"""MountRequest model."""
read_only: bool | None = field(kw_only=True, default=None)
@dataclass(frozen=True, slots=True)
class CIFSMountResponse(Mount, MountResponse, CIFSMount, ResponseData):
"""CIFSMountResponse model."""
type: Literal[MountType.CIFS]
@dataclass(frozen=True, slots=True)
class NFSMountResponse(Mount, MountResponse, NFSMount, ResponseData):
"""NFSMountResponse model."""
type: Literal[MountType.NFS]
@dataclass(frozen=True, slots=True)
class CIFSMountRequest(Mount, MountRequest, CIFSMount, Request):
"""CIFSMountRequest model."""
type: Literal[MountType.CIFS] = field(init=False, default=MountType.CIFS)
username: str | None = field(kw_only=True, default=None)
password: str | None = field(kw_only=True, default=None)
@dataclass(frozen=True, slots=True)
class NFSMountRequest(Mount, MountRequest, NFSMount, Request):
"""NFSMountRequest model."""
type: Literal[MountType.NFS] = field(init=False, default=MountType.NFS)
@dataclass(frozen=True, slots=True)
class MountsInfo(ResponseData):
"""MountsInfo model."""
default_backup_mount: str | None
mounts: list[CIFSMountResponse | NFSMountResponse]
@dataclass(frozen=True, slots=True)
class MountsOptions(Request):
"""MountsOptions model."""
default_backup_mount: str | None
|