Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 24 additions & 23 deletions archinstall/lib/models/application.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclasses import dataclass
from enum import StrEnum, auto
from typing import Any, NotRequired, TypedDict
from typing import Any, NotRequired, Self, TypedDict


class PowerManagement(StrEnum):
Expand Down Expand Up @@ -63,9 +63,9 @@ def json(self) -> AudioConfigSerialization:
'audio': self.audio.value,
}

@staticmethod
def parse_arg(arg: dict[str, Any]) -> 'AudioConfiguration':
return AudioConfiguration(
@classmethod
def parse_arg(cls, arg: dict[str, Any]) -> Self:
return cls(
Audio(arg['audio']),
)

Expand All @@ -77,9 +77,9 @@ class BluetoothConfiguration:
def json(self) -> BluetoothConfigSerialization:
return {'enabled': self.enabled}

@staticmethod
def parse_arg(arg: BluetoothConfigSerialization) -> 'BluetoothConfiguration':
return BluetoothConfiguration(arg['enabled'])
@classmethod
def parse_arg(cls, arg: BluetoothConfigSerialization) -> Self:
return cls(arg['enabled'])


@dataclass
Expand All @@ -91,9 +91,9 @@ def json(self) -> PowerManagementConfigSerialization:
'power_management': self.power_management.value,
}

@staticmethod
def parse_arg(arg: PowerManagementConfigSerialization) -> 'PowerManagementConfiguration':
return PowerManagementConfiguration(
@classmethod
def parse_arg(cls, arg: PowerManagementConfigSerialization) -> Self:
return cls(
PowerManagement(arg['power_management']),
)

Expand All @@ -105,9 +105,9 @@ class PrintServiceConfiguration:
def json(self) -> PrintServiceConfigSerialization:
return {'enabled': self.enabled}

@staticmethod
def parse_arg(arg: PrintServiceConfigSerialization) -> 'PrintServiceConfiguration':
return PrintServiceConfiguration(arg['enabled'])
@classmethod
def parse_arg(cls, arg: PrintServiceConfigSerialization) -> Self:
return cls(arg['enabled'])


@dataclass
Expand All @@ -119,9 +119,9 @@ def json(self) -> FirewallConfigSerialization:
'firewall': self.firewall.value,
}

@staticmethod
def parse_arg(arg: dict[str, Any]) -> 'FirewallConfiguration':
return FirewallConfiguration(
@classmethod
def parse_arg(cls, arg: dict[str, Any]) -> Self:
return cls(
Firewall(arg['firewall']),
)

Expand All @@ -131,14 +131,14 @@ class ZramConfiguration:
enabled: bool
algorithm: ZramAlgorithm = ZramAlgorithm.ZSTD

@staticmethod
def parse_arg(arg: bool | dict[str, Any]) -> 'ZramConfiguration':
@classmethod
def parse_arg(cls, arg: bool | dict[str, Any]) -> Self:
if isinstance(arg, bool):
return ZramConfiguration(enabled=arg)
return cls(enabled=arg)

enabled = arg.get('enabled', True)
algo = arg.get('algorithm', arg.get('algo', ZramAlgorithm.ZSTD.value))
return ZramConfiguration(enabled=enabled, algorithm=ZramAlgorithm(algo))
return cls(enabled=enabled, algorithm=ZramAlgorithm(algo))


@dataclass
Expand All @@ -149,12 +149,13 @@ class ApplicationConfiguration:
print_service_config: PrintServiceConfiguration | None = None
firewall_config: FirewallConfiguration | None = None

@staticmethod
@classmethod
def parse_arg(
cls,
args: dict[str, Any] | None = None,
old_audio_config: dict[str, Any] | None = None,
) -> 'ApplicationConfiguration':
app_config = ApplicationConfiguration()
) -> Self:
app_config = cls()

if args and (bluetooth_config := args.get('bluetooth_config')) is not None:
app_config.bluetooth_config = BluetoothConfiguration.parse_arg(bluetooth_config)
Expand Down
14 changes: 7 additions & 7 deletions archinstall/lib/models/authentication.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, NotRequired, TypedDict
from typing import Any, NotRequired, Self, TypedDict

from archinstall.lib.models.users import Password, User
from archinstall.lib.translationhandler import tr
Expand Down Expand Up @@ -40,14 +40,14 @@ def json(self) -> U2FLoginConfigSerialization:
'passwordless_sudo': self.passwordless_sudo,
}

@staticmethod
def parse_arg(args: U2FLoginConfigSerialization) -> 'U2FLoginConfiguration | None':
@classmethod
def parse_arg(cls, args: U2FLoginConfigSerialization) -> Self | None:
u2f_login_method = args.get('u2f_login_method')

if not u2f_login_method:
return None

u2f_config = U2FLoginConfiguration(u2f_login_method=U2FLoginMethod(u2f_login_method))
u2f_config = cls(u2f_login_method=U2FLoginMethod(u2f_login_method))

u2f_config.u2f_login_method = U2FLoginMethod(u2f_login_method)

Expand All @@ -63,9 +63,9 @@ class AuthenticationConfiguration:
users: list[User] = field(default_factory=list)
u2f_config: U2FLoginConfiguration | None = None

@staticmethod
def parse_arg(args: dict[str, Any]) -> 'AuthenticationConfiguration':
auth_config = AuthenticationConfiguration()
@classmethod
def parse_arg(cls, args: dict[str, Any]) -> Self:
auth_config = cls()

if (u2f_config := args.get('u2f_config')) is not None:
auth_config.u2f_config = U2FLoginConfiguration.parse_arg(u2f_config)
Expand Down
56 changes: 28 additions & 28 deletions archinstall/lib/models/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from dataclasses import dataclass, field
from enum import Enum
from pathlib import Path
from typing import NotRequired, TypedDict, override
from typing import NotRequired, Self, TypedDict, override
from uuid import UUID

import parted
Expand Down Expand Up @@ -254,17 +254,17 @@ class Unit(Enum):

sectors = 'sectors' # size in sector

@staticmethod
def get_all_units() -> list[str]:
return [u.name for u in Unit]
@classmethod
def get_all_units(cls) -> list[str]:
return [u.name for u in cls]

@staticmethod
def get_si_units() -> list[Unit]:
return [u for u in Unit if 'i' not in u.name and u.name != 'sectors']
@classmethod
def get_si_units(cls) -> list[Self]:
return [u for u in cls if 'i' not in u.name and u.name != 'sectors']

@staticmethod
def get_binary_units() -> list[Unit]:
return [u for u in Unit if 'i' in u.name or u.name == 'B']
@classmethod
def get_binary_units(cls) -> list[Self]:
return [u for u in cls if 'i' in u.name or u.name == 'B']


class _SectorSizeSerialization(TypedDict):
Expand All @@ -282,9 +282,9 @@ def __post_init__(self) -> None:
case Unit.sectors:
raise ValueError('Unit type sector not allowed for SectorSize')

@staticmethod
def default() -> SectorSize:
return SectorSize(512, Unit.B)
@classmethod
def default(cls) -> Self:
return cls(512, Unit.B)

def json(self) -> _SectorSizeSerialization:
return {
Expand Down Expand Up @@ -1087,15 +1087,15 @@ def json(self) -> _LvmVolumeGroupSerialization:
'volumes': [vol.json() for vol in self.volumes],
}

@staticmethod
def parse_arg(arg: _LvmVolumeGroupSerialization, disk_config: DiskLayoutConfiguration) -> LvmVolumeGroup:
@classmethod
def parse_arg(cls, arg: _LvmVolumeGroupSerialization, disk_config: DiskLayoutConfiguration) -> Self:
lvm_pvs = []
for mod in disk_config.device_modifications:
for part in mod.partitions:
if part.obj_id in arg.get('lvm_pvs', []):
lvm_pvs.append(part)

return LvmVolumeGroup(
return cls(
arg['name'],
lvm_pvs,
[LvmVolume.parse_arg(vol) for vol in arg['volumes']],
Expand Down Expand Up @@ -1191,9 +1191,9 @@ def relative_mountpoint(self) -> Path:

raise ValueError('Mountpoint is not specified')

@staticmethod
def parse_arg(arg: _LvmVolumeSerialization) -> LvmVolume:
volume = LvmVolume(
@classmethod
def parse_arg(cls, arg: _LvmVolumeSerialization) -> Self:
volume = cls(
status=LvmVolumeStatus(arg['status']),
name=arg['name'],
fs_type=FilesystemType(arg['fs_type']),
Expand Down Expand Up @@ -1296,16 +1296,16 @@ def json(self) -> _LvmConfigurationSerialization:
'vol_groups': [vol_gr.json() for vol_gr in self.vol_groups],
}

@staticmethod
def parse_arg(arg: _LvmConfigurationSerialization, disk_config: DiskLayoutConfiguration) -> LvmConfiguration:
@classmethod
def parse_arg(cls, arg: _LvmConfigurationSerialization, disk_config: DiskLayoutConfiguration) -> Self:
lvm_pvs = []
for mod in disk_config.device_modifications:
for part in mod.partitions:
# FIXME: 'lvm_pvs' does not seem like it can ever exist in the 'arg' serialization
if part.obj_id in arg.get('lvm_pvs', []): # type: ignore[operator]
lvm_pvs.append(part)

return LvmConfiguration(
return cls(
config_type=LvmLayoutType(arg['config_type']),
vol_groups=[LvmVolumeGroup.parse_arg(vol_group, disk_config) for vol_group in arg['vol_groups']],
)
Expand Down Expand Up @@ -1354,9 +1354,9 @@ class SnapshotConfig:
def json(self) -> _SnapshotConfigSerialization:
return {'type': self.snapshot_type.value}

@staticmethod
def parse_args(args: _SnapshotConfigSerialization) -> SnapshotConfig:
return SnapshotConfig(SnapshotType(args['type']))
@classmethod
def parse_args(cls, args: _SnapshotConfigSerialization) -> Self:
return cls(SnapshotType(args['type']))


@dataclass
Expand All @@ -1366,12 +1366,12 @@ class BtrfsOptions:
def json(self) -> _BtrfsOptionsSerialization:
return {'snapshot_config': self.snapshot_config.json() if self.snapshot_config else None}

@staticmethod
def parse_arg(arg: _BtrfsOptionsSerialization) -> BtrfsOptions | None:
@classmethod
def parse_arg(cls, arg: _BtrfsOptionsSerialization) -> Self | None:
snapshot_args = arg.get('snapshot_config')
if snapshot_args:
snapshot_config = SnapshotConfig.parse_args(snapshot_args)
return BtrfsOptions(snapshot_config)
return cls(snapshot_config)

return None

Expand Down
8 changes: 4 additions & 4 deletions archinstall/lib/models/locale.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dataclasses import dataclass
from typing import Any
from typing import Any, Self

from archinstall.lib.translationhandler import tr

Expand All @@ -12,12 +12,12 @@ class LocaleConfiguration:
sys_lang: str
sys_enc: str

@staticmethod
def default() -> 'LocaleConfiguration':
@classmethod
def default(cls) -> Self:
layout = get_kb_layout()
if layout == '':
layout = 'us'
return LocaleConfiguration(layout, 'en_US.UTF-8', 'UTF-8')
return cls(layout, 'en_US.UTF-8', 'UTF-8')

def json(self) -> dict[str, str]:
return {
Expand Down
26 changes: 13 additions & 13 deletions archinstall/lib/models/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import re
from dataclasses import dataclass, field
from enum import Enum
from typing import TYPE_CHECKING, NotRequired, TypedDict, override
from typing import TYPE_CHECKING, NotRequired, Self, TypedDict, override

from archinstall.lib.output import debug
from archinstall.lib.translationhandler import tr
Expand Down Expand Up @@ -66,9 +66,9 @@ def json(self) -> _NicSerialization:
'dns': self.dns,
}

@staticmethod
def parse_arg(arg: _NicSerialization) -> Nic:
return Nic(
@classmethod
def parse_arg(cls, arg: _NicSerialization) -> Self:
return cls(
iface=arg.get('iface', None),
ip=arg.get('ip', None),
dhcp=arg.get('dhcp', True),
Expand Down Expand Up @@ -121,22 +121,22 @@ def json(self) -> _NetworkConfigurationSerialization:

return config

@staticmethod
def parse_arg(config: _NetworkConfigurationSerialization) -> NetworkConfiguration | None:
@classmethod
def parse_arg(cls, config: _NetworkConfigurationSerialization) -> Self | None:
nic_type = config.get('type', None)
if not nic_type:
return None

match NicType(nic_type):
case NicType.ISO:
return NetworkConfiguration(NicType.ISO)
return cls(NicType.ISO)
case NicType.NM:
return NetworkConfiguration(NicType.NM)
return cls(NicType.NM)
case NicType.MANUAL:
nics_arg = config.get('nics', [])
if nics_arg:
nics = [Nic.parse_arg(n) for n in nics_arg]
return NetworkConfiguration(NicType.MANUAL, nics)
return cls(NicType.MANUAL, nics)

return None

Expand Down Expand Up @@ -199,9 +199,9 @@ def table_data(self) -> dict[str, str | int]:
'BSSID': self.bssid,
}

@staticmethod
def from_wpa(results: str) -> list[WifiNetwork]:
entries: list[WifiNetwork] = []
@classmethod
def from_wpa(cls, results: str) -> list[Self]:
entries = []

for line in results.splitlines():
line = line.strip()
Expand All @@ -212,7 +212,7 @@ def from_wpa(results: str) -> list[WifiNetwork]:
if len(parts) != 5:
continue

wifi = WifiNetwork(bssid=parts[0], frequency=parts[1], signal_level=parts[2], flags=parts[3], ssid=parts[4])
wifi = cls(bssid=parts[0], frequency=parts[1], signal_level=parts[2], flags=parts[3], ssid=parts[4])
entries.append(wifi)

return entries
Expand Down
Loading