Skip to content

Commit fb8060a

Browse files
committed
Change staticmethods to classmethods
1 parent b129067 commit fb8060a

File tree

7 files changed

+91
-89
lines changed

7 files changed

+91
-89
lines changed

archinstall/lib/models/application.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass
22
from enum import StrEnum, auto
3-
from typing import Any, NotRequired, TypedDict
3+
from typing import Any, NotRequired, Self, TypedDict
44

55

66
class PowerManagement(StrEnum):
@@ -63,9 +63,9 @@ def json(self) -> AudioConfigSerialization:
6363
'audio': self.audio.value,
6464
}
6565

66-
@staticmethod
67-
def parse_arg(arg: dict[str, Any]) -> 'AudioConfiguration':
68-
return AudioConfiguration(
66+
@classmethod
67+
def parse_arg(cls, arg: dict[str, Any]) -> Self:
68+
return cls(
6969
Audio(arg['audio']),
7070
)
7171

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

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

8484

8585
@dataclass
@@ -91,9 +91,9 @@ def json(self) -> PowerManagementConfigSerialization:
9191
'power_management': self.power_management.value,
9292
}
9393

94-
@staticmethod
95-
def parse_arg(arg: PowerManagementConfigSerialization) -> 'PowerManagementConfiguration':
96-
return PowerManagementConfiguration(
94+
@classmethod
95+
def parse_arg(cls, arg: PowerManagementConfigSerialization) -> Self:
96+
return cls(
9797
PowerManagement(arg['power_management']),
9898
)
9999

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

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

112112

113113
@dataclass
@@ -119,9 +119,9 @@ def json(self) -> FirewallConfigSerialization:
119119
'firewall': self.firewall.value,
120120
}
121121

122-
@staticmethod
123-
def parse_arg(arg: dict[str, Any]) -> 'FirewallConfiguration':
124-
return FirewallConfiguration(
122+
@classmethod
123+
def parse_arg(cls, arg: dict[str, Any]) -> Self:
124+
return cls(
125125
Firewall(arg['firewall']),
126126
)
127127

@@ -131,14 +131,14 @@ class ZramConfiguration:
131131
enabled: bool
132132
algorithm: ZramAlgorithm = ZramAlgorithm.ZSTD
133133

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

139139
enabled = arg.get('enabled', True)
140140
algo = arg.get('algorithm', arg.get('algo', ZramAlgorithm.ZSTD.value))
141-
return ZramConfiguration(enabled=enabled, algorithm=ZramAlgorithm(algo))
141+
return cls(enabled=enabled, algorithm=ZramAlgorithm(algo))
142142

143143

144144
@dataclass
@@ -149,12 +149,13 @@ class ApplicationConfiguration:
149149
print_service_config: PrintServiceConfiguration | None = None
150150
firewall_config: FirewallConfiguration | None = None
151151

152-
@staticmethod
152+
@classmethod
153153
def parse_arg(
154+
cls,
154155
args: dict[str, Any] | None = None,
155156
old_audio_config: dict[str, Any] | None = None,
156-
) -> 'ApplicationConfiguration':
157-
app_config = ApplicationConfiguration()
157+
) -> Self:
158+
app_config = cls()
158159

159160
if args and (bluetooth_config := args.get('bluetooth_config')) is not None:
160161
app_config.bluetooth_config = BluetoothConfiguration.parse_arg(bluetooth_config)

archinstall/lib/models/authentication.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass, field
22
from enum import Enum
3-
from typing import Any, NotRequired, TypedDict
3+
from typing import Any, NotRequired, Self, TypedDict
44

55
from archinstall.lib.models.users import Password, User
66
from archinstall.lib.translationhandler import tr
@@ -40,14 +40,14 @@ def json(self) -> U2FLoginConfigSerialization:
4040
'passwordless_sudo': self.passwordless_sudo,
4141
}
4242

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

4747
if not u2f_login_method:
4848
return None
4949

50-
u2f_config = U2FLoginConfiguration(u2f_login_method=U2FLoginMethod(u2f_login_method))
50+
u2f_config = cls(u2f_login_method=U2FLoginMethod(u2f_login_method))
5151

5252
u2f_config.u2f_login_method = U2FLoginMethod(u2f_login_method)
5353

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

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

7070
if (u2f_config := args.get('u2f_config')) is not None:
7171
auth_config.u2f_config = U2FLoginConfiguration.parse_arg(u2f_config)

archinstall/lib/models/device.py

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from dataclasses import dataclass, field
77
from enum import Enum
88
from pathlib import Path
9-
from typing import NotRequired, TypedDict, override
9+
from typing import NotRequired, Self, TypedDict, override
1010
from uuid import UUID
1111

1212
import parted
@@ -254,17 +254,17 @@ class Unit(Enum):
254254

255255
sectors = 'sectors' # size in sector
256256

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

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

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

269269

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

285-
@staticmethod
286-
def default() -> SectorSize:
287-
return SectorSize(512, Unit.B)
285+
@classmethod
286+
def default(cls) -> Self:
287+
return cls(512, Unit.B)
288288

289289
def json(self) -> _SectorSizeSerialization:
290290
return {
@@ -1087,15 +1087,15 @@ def json(self) -> _LvmVolumeGroupSerialization:
10871087
'volumes': [vol.json() for vol in self.volumes],
10881088
}
10891089

1090-
@staticmethod
1091-
def parse_arg(arg: _LvmVolumeGroupSerialization, disk_config: DiskLayoutConfiguration) -> LvmVolumeGroup:
1090+
@classmethod
1091+
def parse_arg(cls, arg: _LvmVolumeGroupSerialization, disk_config: DiskLayoutConfiguration) -> Self:
10921092
lvm_pvs = []
10931093
for mod in disk_config.device_modifications:
10941094
for part in mod.partitions:
10951095
if part.obj_id in arg.get('lvm_pvs', []):
10961096
lvm_pvs.append(part)
10971097

1098-
return LvmVolumeGroup(
1098+
return cls(
10991099
arg['name'],
11001100
lvm_pvs,
11011101
[LvmVolume.parse_arg(vol) for vol in arg['volumes']],
@@ -1191,9 +1191,9 @@ def relative_mountpoint(self) -> Path:
11911191

11921192
raise ValueError('Mountpoint is not specified')
11931193

1194-
@staticmethod
1195-
def parse_arg(arg: _LvmVolumeSerialization) -> LvmVolume:
1196-
volume = LvmVolume(
1194+
@classmethod
1195+
def parse_arg(cls, arg: _LvmVolumeSerialization) -> Self:
1196+
volume = cls(
11971197
status=LvmVolumeStatus(arg['status']),
11981198
name=arg['name'],
11991199
fs_type=FilesystemType(arg['fs_type']),
@@ -1296,16 +1296,16 @@ def json(self) -> _LvmConfigurationSerialization:
12961296
'vol_groups': [vol_gr.json() for vol_gr in self.vol_groups],
12971297
}
12981298

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

1308-
return LvmConfiguration(
1308+
return cls(
13091309
config_type=LvmLayoutType(arg['config_type']),
13101310
vol_groups=[LvmVolumeGroup.parse_arg(vol_group, disk_config) for vol_group in arg['vol_groups']],
13111311
)
@@ -1354,9 +1354,9 @@ class SnapshotConfig:
13541354
def json(self) -> _SnapshotConfigSerialization:
13551355
return {'type': self.snapshot_type.value}
13561356

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

13611361

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

1369-
@staticmethod
1370-
def parse_arg(arg: _BtrfsOptionsSerialization) -> BtrfsOptions | None:
1369+
@classmethod
1370+
def parse_arg(cls, arg: _BtrfsOptionsSerialization) -> Self | None:
13711371
snapshot_args = arg.get('snapshot_config')
13721372
if snapshot_args:
13731373
snapshot_config = SnapshotConfig.parse_args(snapshot_args)
1374-
return BtrfsOptions(snapshot_config)
1374+
return cls(snapshot_config)
13751375

13761376
return None
13771377

archinstall/lib/models/locale.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass
2-
from typing import Any
2+
from typing import Any, Self
33

44
from archinstall.lib.translationhandler import tr
55

@@ -12,12 +12,12 @@ class LocaleConfiguration:
1212
sys_lang: str
1313
sys_enc: str
1414

15-
@staticmethod
16-
def default() -> 'LocaleConfiguration':
15+
@classmethod
16+
def default(cls) -> Self:
1717
layout = get_kb_layout()
1818
if layout == '':
1919
layout = 'us'
20-
return LocaleConfiguration(layout, 'en_US.UTF-8', 'UTF-8')
20+
return cls(layout, 'en_US.UTF-8', 'UTF-8')
2121

2222
def json(self) -> dict[str, str]:
2323
return {

archinstall/lib/models/network.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import re
44
from dataclasses import dataclass, field
55
from enum import Enum
6-
from typing import TYPE_CHECKING, NotRequired, TypedDict, override
6+
from typing import TYPE_CHECKING, NotRequired, Self, TypedDict, override
77

88
from archinstall.lib.output import debug
99
from archinstall.lib.translationhandler import tr
@@ -66,9 +66,9 @@ def json(self) -> _NicSerialization:
6666
'dns': self.dns,
6767
}
6868

69-
@staticmethod
70-
def parse_arg(arg: _NicSerialization) -> Nic:
71-
return Nic(
69+
@classmethod
70+
def parse_arg(cls, arg: _NicSerialization) -> Self:
71+
return cls(
7272
iface=arg.get('iface', None),
7373
ip=arg.get('ip', None),
7474
dhcp=arg.get('dhcp', True),
@@ -121,22 +121,22 @@ def json(self) -> _NetworkConfigurationSerialization:
121121

122122
return config
123123

124-
@staticmethod
125-
def parse_arg(config: _NetworkConfigurationSerialization) -> NetworkConfiguration | None:
124+
@classmethod
125+
def parse_arg(cls, config: _NetworkConfigurationSerialization) -> Self | None:
126126
nic_type = config.get('type', None)
127127
if not nic_type:
128128
return None
129129

130130
match NicType(nic_type):
131131
case NicType.ISO:
132-
return NetworkConfiguration(NicType.ISO)
132+
return cls(NicType.ISO)
133133
case NicType.NM:
134-
return NetworkConfiguration(NicType.NM)
134+
return cls(NicType.NM)
135135
case NicType.MANUAL:
136136
nics_arg = config.get('nics', [])
137137
if nics_arg:
138138
nics = [Nic.parse_arg(n) for n in nics_arg]
139-
return NetworkConfiguration(NicType.MANUAL, nics)
139+
return cls(NicType.MANUAL, nics)
140140

141141
return None
142142

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

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

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

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

218218
return entries

0 commit comments

Comments
 (0)