diff --git a/subiquity/ui/views/filesystem/partition.py b/subiquity/ui/views/filesystem/partition.py index 1e7cd7f072..c81abf851f 100644 --- a/subiquity/ui/views/filesystem/partition.py +++ b/subiquity/ui/views/filesystem/partition.py @@ -89,6 +89,7 @@ def _make_widget(self, form): class SizeWidget(StringEditor): def __init__(self, form): self.form = form + self.accurate_value: Optional[int] = None super().__init__() def lost_focus(self): @@ -114,6 +115,9 @@ def lost_focus(self): ), ) ) + # This will invoke self.form.clean_size() and it is expected that + # size_str (and therefore self.value) are propertly aligned. + self.accurate_value = self.form.size else: aligned_sz = align_up(sz, self.form.alignment) aligned_sz_str = humanize_size(aligned_sz) @@ -125,6 +129,7 @@ def lost_focus(self): _("Rounded size up to {size}").format(size=aligned_sz_str), ) ) + self.accurate_value = aligned_sz class SizeField(FormField): diff --git a/subiquity/ui/views/filesystem/tests/test_partition.py b/subiquity/ui/views/filesystem/tests/test_partition.py index ab5363aa15..adb7e2832a 100644 --- a/subiquity/ui/views/filesystem/tests/test_partition.py +++ b/subiquity/ui/views/filesystem/tests/test_partition.py @@ -58,6 +58,7 @@ def test_create_partition(self): gap = gaps.Gap(device=disk, offset=1 << 20, size=99 << 30) view, stretchy = make_partition_view(model, disk, gap=gap) view_helpers.enter_data(stretchy.form, valid_data) + stretchy.form.size.widget.lost_focus() view_helpers.click(stretchy.form.done_btn.base_widget) valid_data["mount"] = "/" valid_data["size"] = dehumanize_size(valid_data["size"]) @@ -77,6 +78,7 @@ def test_edit_partition(self): view, stretchy = make_partition_view(model, disk, partition=partition) self.assertTrue(stretchy.form.done_btn.enabled) view_helpers.enter_data(stretchy.form, form_data) + stretchy.form.size.widget.lost_focus() view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { "size": dehumanize_size(form_data["size"]), @@ -111,6 +113,7 @@ def test_edit_existing_partition(self): self.assertFalse(stretchy.form.size.enabled) self.assertTrue(stretchy.form.done_btn.enabled) view_helpers.enter_data(stretchy.form, form_data) + stretchy.form.size.widget.lost_focus() view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { "fstype": "xfs", @@ -177,6 +180,7 @@ def test_edit_boot_partition(self): self.assertEqual(stretchy.form.mount.value, "/boot/efi") view_helpers.enter_data(stretchy.form, form_data) + stretchy.form.size.widget.lost_focus() view_helpers.click(stretchy.form.done_btn.base_widget) expected_data = { "size": dehumanize_size(form_data["size"]), diff --git a/subiquitycore/ui/form.py b/subiquitycore/ui/form.py index ea73c5887b..ad248dad52 100644 --- a/subiquitycore/ui/form.py +++ b/subiquitycore/ui/form.py @@ -531,7 +531,11 @@ def as_data(self): data = {} for field in self._fields: if field.enabled: - data[field.field.name] = field.value + accurate_value = getattr(field.widget, "accurate_value", None) + if accurate_value is not None: + data[field.field.name] = accurate_value + else: + data[field.field.name] = field.value return data