Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/models
diff options
context:
space:
mode:
authorDaniel Girtler <blackrabbit256@gmail.com>2022-06-07 01:28:46 +1000
committerGitHub <noreply@github.com>2022-06-06 17:28:46 +0200
commita7ca037a26de53fd242f89bc6a90fd53337b4d13 (patch)
tree5919ce42f32a7dac45b543ac15835a11086bd41b /archinstall/lib/models
parent2d4b2620462a0fb4c9496ed0629d7ab8930fc73a (diff)
Update the subvolume menu - fix for #1278 (#1297)
* Update subvolume * Add mypy compliance Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com> Co-authored-by: Anton Hvornum <anton@hvornum.se>
Diffstat (limited to 'archinstall/lib/models')
-rw-r--r--archinstall/lib/models/subvolume.py68
-rw-r--r--archinstall/lib/models/users.py6
2 files changed, 72 insertions, 2 deletions
diff --git a/archinstall/lib/models/subvolume.py b/archinstall/lib/models/subvolume.py
new file mode 100644
index 00000000..34a09227
--- /dev/null
+++ b/archinstall/lib/models/subvolume.py
@@ -0,0 +1,68 @@
+from dataclasses import dataclass
+from typing import List, Any, Dict
+
+
+@dataclass
+class Subvolume:
+ name: str
+ mountpoint: str
+ compress: bool = False
+ nodatacow: bool = False
+
+ def display(self) -> str:
+ options_str = ','.join(self.options)
+ return f'{_("Subvolume")}: {self.name:15} {_("Mountpoint")}: {self.mountpoint:20} {_("Options")}: {options_str}'
+
+ @property
+ def options(self) -> List[str]:
+ options = [
+ 'compress' if self.compress else '',
+ 'nodatacow' if self.nodatacow else ''
+ ]
+ return [o for o in options if len(o)]
+
+ def json(self) -> Dict[str, Any]:
+ return {
+ 'name': self.name,
+ 'mountpoint': self.mountpoint,
+ 'compress': self.compress,
+ 'nodatacow': self.nodatacow
+ }
+
+ @classmethod
+ def _parse(cls, config_subvolumes: List[Dict[str, Any]]) -> List['Subvolume']:
+ subvolumes = []
+ for entry in config_subvolumes:
+ if not entry.get('name', None) or not entry.get('mountpoint', None):
+ continue
+
+ subvolumes.append(
+ Subvolume(
+ entry['name'],
+ entry['mountpoint'],
+ entry.get('compress', False),
+ entry.get('nodatacow', False)
+ )
+ )
+
+ return subvolumes
+
+ @classmethod
+ def _parse_backwards_compatible(cls, config_subvolumes) -> List['Subvolume']:
+ subvolumes = []
+ for name, mountpoint in config_subvolumes.items():
+ if not name or not mountpoint:
+ continue
+
+ subvolumes.append(Subvolume(name, mountpoint))
+
+ return subvolumes
+
+ @classmethod
+ def parse_arguments(cls, config_subvolumes: Any) -> List['Subvolume']:
+ if isinstance(config_subvolumes, list):
+ return cls._parse(config_subvolumes)
+ elif isinstance(config_subvolumes, dict):
+ return cls._parse_backwards_compatible(config_subvolumes)
+
+ raise ValueError('Unknown disk layout btrfs subvolume format')
diff --git a/archinstall/lib/models/users.py b/archinstall/lib/models/users.py
index f72cabde..a8feb9ef 100644
--- a/archinstall/lib/models/users.py
+++ b/archinstall/lib/models/users.py
@@ -27,8 +27,10 @@ class User:
}
def display(self) -> str:
- strength = PasswordStrength.strength(self.password)
- password = '*' * len(self.password) + f' ({strength.value})'
+ password = '*' * (len(self.password) if self.password else 0)
+ if password:
+ strength = PasswordStrength.strength(self.password)
+ password += f' ({strength.value})'
return f'{_("Username")}: {self.username:16} {_("Password")}: {password:20} sudo: {str(self.sudo)}'
@classmethod