|
| 1 | +"""Models for Supervisor mounts.""" |
| 2 | + |
| 3 | +from abc import ABC |
| 4 | +from dataclasses import dataclass, field |
| 5 | +from enum import StrEnum |
| 6 | +from pathlib import PurePath |
| 7 | +from typing import Literal |
| 8 | + |
| 9 | +from .base import Request, ResponseData |
| 10 | + |
| 11 | +# --- ENUMS ---- |
| 12 | + |
| 13 | + |
| 14 | +class MountType(StrEnum): |
| 15 | + """MountType type.""" |
| 16 | + |
| 17 | + CIFS = "cifs" |
| 18 | + NFS = "nfs" |
| 19 | + |
| 20 | + |
| 21 | +class MountUsage(StrEnum): |
| 22 | + """MountUsage type.""" |
| 23 | + |
| 24 | + BACKUP = "backup" |
| 25 | + MEDIA = "media" |
| 26 | + SHARE = "share" |
| 27 | + |
| 28 | + |
| 29 | +class MountState(StrEnum): |
| 30 | + """MountState type.""" |
| 31 | + |
| 32 | + ACTIVE = "active" |
| 33 | + ACTIVATING = "activating" |
| 34 | + DEACTIVATING = "deactivating" |
| 35 | + FAILED = "failed" |
| 36 | + INACTIVE = "inactive" |
| 37 | + MAINTENANCE = "maintenance" |
| 38 | + RELOADING = "reloading" |
| 39 | + |
| 40 | + |
| 41 | +class MountCifsVersion(StrEnum): |
| 42 | + """Mount CIFS version.""" |
| 43 | + |
| 44 | + LEGACY_1_0 = "1.0" |
| 45 | + LEGACY_2_0 = "2.0" |
| 46 | + |
| 47 | + |
| 48 | +# --- OBJECTS ---- |
| 49 | + |
| 50 | + |
| 51 | +@dataclass(frozen=True) |
| 52 | +class Mount(ABC): |
| 53 | + """Mount ABC type.""" |
| 54 | + |
| 55 | + usage: MountUsage |
| 56 | + server: str |
| 57 | + port: int | None = field(kw_only=True, default=None) |
| 58 | + |
| 59 | + |
| 60 | +@dataclass(frozen=True) |
| 61 | +class CIFSMount(ABC): |
| 62 | + """CIFSMount ABC type.""" |
| 63 | + |
| 64 | + share: str |
| 65 | + version: MountCifsVersion | None = field(kw_only=True, default=None) |
| 66 | + |
| 67 | + |
| 68 | +@dataclass(frozen=True) |
| 69 | +class NFSMount(ABC): |
| 70 | + """NFSMount ABC type.""" |
| 71 | + |
| 72 | + path: PurePath |
| 73 | + |
| 74 | + |
| 75 | +@dataclass(frozen=True) |
| 76 | +class MountResponse(ABC): |
| 77 | + """MountResponse model.""" |
| 78 | + |
| 79 | + name: str |
| 80 | + read_only: bool |
| 81 | + state: MountState | None |
| 82 | + |
| 83 | + |
| 84 | +@dataclass(frozen=True) |
| 85 | +class MountRequest(ABC): # noqa: B024 |
| 86 | + """MountRequest model.""" |
| 87 | + |
| 88 | + read_only: bool | None = field(kw_only=True, default=None) |
| 89 | + |
| 90 | + |
| 91 | +@dataclass(frozen=True, slots=True) |
| 92 | +class CIFSMountResponse(Mount, MountResponse, CIFSMount, ResponseData): |
| 93 | + """CIFSMountResponse model.""" |
| 94 | + |
| 95 | + type: Literal[MountType.CIFS] |
| 96 | + |
| 97 | + |
| 98 | +@dataclass(frozen=True, slots=True) |
| 99 | +class NFSMountResponse(Mount, MountResponse, NFSMount, ResponseData): |
| 100 | + """NFSMountResponse model.""" |
| 101 | + |
| 102 | + type: Literal[MountType.NFS] |
| 103 | + |
| 104 | + |
| 105 | +@dataclass(frozen=True, slots=True) |
| 106 | +class CIFSMountRequest(Mount, MountRequest, CIFSMount, Request): |
| 107 | + """CIFSMountRequest model.""" |
| 108 | + |
| 109 | + type: Literal[MountType.CIFS] = field(init=False, default=MountType.CIFS) |
| 110 | + username: str | None = field(kw_only=True, default=None) |
| 111 | + password: str | None = field(kw_only=True, default=None) |
| 112 | + |
| 113 | + |
| 114 | +@dataclass(frozen=True, slots=True) |
| 115 | +class NFSMountRequest(Mount, MountRequest, NFSMount, Request): |
| 116 | + """NFSMountRequest model.""" |
| 117 | + |
| 118 | + type: Literal[MountType.NFS] = field(init=False, default=MountType.NFS) |
| 119 | + |
| 120 | + |
| 121 | +@dataclass(frozen=True, slots=True) |
| 122 | +class MountsInfo(ResponseData): |
| 123 | + """MountsInfo model.""" |
| 124 | + |
| 125 | + default_backup_mount: str | None |
| 126 | + mounts: list[CIFSMountResponse | NFSMountResponse] |
| 127 | + |
| 128 | + |
| 129 | +@dataclass(frozen=True, slots=True) |
| 130 | +class MountsOptions(Request): |
| 131 | + """MountsOptions model.""" |
| 132 | + |
| 133 | + default_backup_mount: str | None |
0 commit comments