From 360a1b4f337e45b2dc26c9af067e53fbd364231f Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Sun, 24 Sep 2023 18:14:02 +1000 Subject: Unify json functions (#2102) Co-authored-by: Daniel Girtler --- archinstall/lib/disk/device_model.py | 34 +++++++++++++------------ archinstall/lib/general.py | 8 +++--- archinstall/lib/models/audio_configuration.py | 2 +- archinstall/lib/models/bootloader.py | 8 +++--- archinstall/lib/models/network_configuration.py | 6 ++--- archinstall/lib/output.py | 2 -- 6 files changed, 29 insertions(+), 31 deletions(-) (limited to 'archinstall') diff --git a/archinstall/lib/disk/device_model.py b/archinstall/lib/disk/device_model.py index b520ad1b..8bc41e0c 100644 --- a/archinstall/lib/disk/device_model.py +++ b/archinstall/lib/disk/device_model.py @@ -49,10 +49,10 @@ class DiskLayoutConfiguration: if self.config_type == DiskLayoutType.Pre_mount and self.relative_mountpoint is None: raise ValueError('Must set a relative mountpoint when layout type is pre-mount"') - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: return { 'config_type': self.config_type.value, - 'device_modifications': [mod.__dump__() for mod in self.device_modifications] + 'device_modifications': [mod.json() for mod in self.device_modifications] } @classmethod @@ -171,12 +171,12 @@ class Size: raise ValueError('Percent unit size must specify a total size') return self.total_size # type: ignore - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: return { 'value': self.value, 'unit': self.unit.name, - 'sector_size': self.sector_size.__dump__() if self.sector_size else None, - 'total_size': self._total_size.__dump__() if self._total_size else None + 'sector_size': self.sector_size.json() if self.sector_size else None, + 'total_size': self._total_size.json() if self._total_size else None } @classmethod @@ -457,7 +457,7 @@ class SubvolumeModification: return self.mountpoint == Path('/') return False - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: return { 'name': str(self.name), 'mountpoint': str(self.mountpoint), @@ -466,12 +466,7 @@ class SubvolumeModification: } def table_data(self) -> Dict[str, Any]: - return { - 'name': str(self.name), - 'mountpoint': str(self.mountpoint), - 'compress': self.compress, - 'nodatacow': self.nodatacow - } + return self.json() class DeviceGeometry: @@ -755,14 +750,14 @@ class PartitionModification: 'obj_id': self.obj_id, 'status': self.status.value, 'type': self.type.value, - 'start': self.start.__dump__(), - 'length': self.length.__dump__(), + 'start': self.start.json(), + 'length': self.length.json(), 'fs_type': self.fs_type.value if self.fs_type else '', 'mountpoint': str(self.mountpoint) if self.mountpoint else None, 'mount_options': self.mount_options, 'flags': [f.name for f in self.flags], 'dev_path': str(self.dev_path) if self.dev_path else None, - 'btrfs': [vol.__dump__() for vol in self.btrfs_subvols] + 'btrfs': [vol.json() for vol in self.btrfs_subvols] } def table_data(self) -> Dict[str, Any]: @@ -830,7 +825,7 @@ class DeviceModification: filtered = filter(lambda x: x.is_root(relative_path), self.partitions) return next(filtered, None) - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: """ Called when generating configuration files """ @@ -922,6 +917,13 @@ class Fido2Device: 'product': self.product } + def table_data(self) -> Dict[str, str]: + return { + 'Path': str(self.path), + 'Manufacturer': self.manufacturer, + 'Product': self.product + } + @classmethod def parse_arg(cls, arg: Dict[str, str]) -> 'Fido2Device': return Fido2Device( diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index e22e7eed..71981fb6 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -69,8 +69,6 @@ def jsonify(obj: Any, safe: bool = True) -> Any: # a dictionary representation of the object so that it can be # processed by the json library. return jsonify(obj.json(), safe) - if hasattr(obj, '__dump__'): - return obj.__dump__() if isinstance(obj, (datetime, date)): return obj.isoformat() if isinstance(obj, (list, set, tuple)): @@ -462,13 +460,13 @@ def run_custom_user_commands(commands :List[str], installation :Installer) -> No for index, command in enumerate(commands): script_path = f"/var/tmp/user-command.{index}.sh" chroot_path = f"{installation.target}/{script_path}" - + info(f'Executing custom command "{command}" ...') with open(chroot_path, "w") as user_script: user_script.write(command) - + SysCommand(f"arch-chroot {installation.target} bash {script_path}") - + os.unlink(chroot_path) diff --git a/archinstall/lib/models/audio_configuration.py b/archinstall/lib/models/audio_configuration.py index 3a4029db..88cd5d8e 100644 --- a/archinstall/lib/models/audio_configuration.py +++ b/archinstall/lib/models/audio_configuration.py @@ -24,7 +24,7 @@ class Audio(Enum): class AudioConfiguration: audio: Audio - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: return { 'audio': self.audio.value } diff --git a/archinstall/lib/models/bootloader.py b/archinstall/lib/models/bootloader.py index be9812a0..fa3f32c8 100644 --- a/archinstall/lib/models/bootloader.py +++ b/archinstall/lib/models/bootloader.py @@ -14,12 +14,12 @@ class Bootloader(Enum): Efistub = 'Efistub' Limine = 'Limine' - def json(self): + def json(self) -> str: return self.value - @classmethod - def values(cls) -> List[str]: - return [e.value for e in cls] + @staticmethod + def values() -> List[str]: + return [e.value for e in Bootloader] @classmethod def get_default(cls) -> Bootloader: diff --git a/archinstall/lib/models/network_configuration.py b/archinstall/lib/models/network_configuration.py index fac7bbef..1777df62 100644 --- a/archinstall/lib/models/network_configuration.py +++ b/archinstall/lib/models/network_configuration.py @@ -42,7 +42,7 @@ class Nic: 'dns': self.dns } - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: return { 'iface': self.iface, 'ip': self.ip, @@ -94,10 +94,10 @@ class NetworkConfiguration: type: NicType nics: List[Nic] = field(default_factory=list) - def __dump__(self) -> Dict[str, Any]: + def json(self) -> Dict[str, Any]: config: Dict[str, Any] = {'type': self.type.value} if self.nics: - config['nics'] = [n.__dump__() for n in self.nics] + config['nics'] = [n.json() for n in self.nics] return config diff --git a/archinstall/lib/output.py b/archinstall/lib/output.py index 62a1ba27..945a6c4f 100644 --- a/archinstall/lib/output.py +++ b/archinstall/lib/output.py @@ -38,8 +38,6 @@ class FormattedOutput: raise ValueError('Unsupported formatting call') elif hasattr(o, 'table_data'): return o.table_data() - elif hasattr(o, 'json'): - return o.json() elif is_dataclass(o): return asdict(o) else: -- cgit v1.2.3-70-g09d2