[PATCH 3/3] Use namedtuple, where possible, in the resize dialog.

Chris Lumens clumens at redhat.com
Tue Jun 4 17:27:34 UTC 2013


---
 pyanaconda/ui/gui/spokes/lib/resize.py | 59 ++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/lib/resize.py b/pyanaconda/ui/gui/spokes/lib/resize.py
index 1ec737a..a44db64 100644
--- a/pyanaconda/ui/gui/spokes/lib/resize.py
+++ b/pyanaconda/ui/gui/spokes/lib/resize.py
@@ -20,6 +20,7 @@
 #
 
 from __future__ import division
+from collections import namedtuple
 
 # pylint: disable-msg=E0611
 from gi.repository import Gdk, Gtk
@@ -41,6 +42,10 @@ TOOLTIP_COL = 6
 RESIZE_TARGET_COL = 7
 NAME_COL = 8
 
+PartStoreRow = namedtuple("PartStoreRow", ["id", "desc", "fs", "reclaimable",
+                                           "action", "editable", "tooltip",
+                                           "target", "name"])
+
 PRESERVE = N_("Preserve")
 SHRINK = N_("Shrink")
 DELETE = N_("Delete")
@@ -239,32 +244,33 @@ class ResizeDialog(GUIObject):
         self._resizeSlider.add_mark(device.size, Gtk.PositionType.BOTTOM, size_str(device.size))
 
     def _update_action_buttons(self, row):
-        device = self.storage.devicetree.getDeviceByID(row[DEVICE_ID_COL])
+        obj = PartStoreRow._make(row)
+        device = self.storage.devicetree.getDeviceByID(obj.id)
 
         # Disks themselves may be editable in certain ways, but they are never
         # shrinkable.
-        self._preserveButton.set_sensitive(row[EDITABLE_COL])
-        self._shrinkButton.set_sensitive(row[EDITABLE_COL] and not device.isDisk)
-        self._deleteButton.set_sensitive(row[EDITABLE_COL])
+        self._preserveButton.set_sensitive(obj.editable)
+        self._shrinkButton.set_sensitive(obj.editable and not device.isDisk)
+        self._deleteButton.set_sensitive(obj.editable)
         self._resizeSlider.set_visible(False)
 
-        if not row[EDITABLE_COL]:
+        if not obj.editable:
             return
 
         # If the selected filesystem does not support shrinking, make that
         # button insensitive.
         self._shrinkButton.set_sensitive(device.resizable)
 
-        self._setup_slider(device, row[RESIZE_TARGET_COL])
+        self._setup_slider(device, obj.target)
 
         # Then, disable the button for whatever action is currently selected.
         # It doesn't make a lot of sense to allow clicking that.
-        if row[ACTION_COL] == _(PRESERVE):
+        if obj.action == _(PRESERVE):
             self._preserveButton.set_sensitive(False)
-        elif row[ACTION_COL] == _(SHRINK):
+        elif obj.action == _(SHRINK):
             self._shrinkButton.set_sensitive(False)
             self._resizeSlider.set_visible(True)
-        elif row[ACTION_COL] == _(DELETE):
+        elif obj.action == _(DELETE):
             self._deleteButton.set_sensitive(False)
 
     def _update_reclaim_button(self, got):
@@ -301,17 +307,17 @@ class ResizeDialog(GUIObject):
             self._deleteButton.emit("clicked")
 
     def _sumReclaimableSpace(self, model, path, itr, *args):
-        (editable, action, ident, targetSize) = model.get(itr, EDITABLE_COL, ACTION_COL, DEVICE_ID_COL, RESIZE_TARGET_COL)
+        obj = PartStoreRow._make(model[itr])
 
-        if not editable:
+        if not obj.editable:
             return False
 
-        device = self.storage.devicetree.getDeviceByID(ident)
-        if action == _(PRESERVE):
+        device = self.storage.devicetree.getDeviceByID(obj.id)
+        if obj.action == _(PRESERVE):
             return False
-        if action == _(SHRINK):
-            self._selectedReclaimableSpace += device.size - targetSize
-        elif action == _(DELETE):
+        if obj.action == _(SHRINK):
+            self._selectedReclaimableSpace += device.size - obj.target
+        elif obj.action == _(DELETE):
             self._selectedReclaimableSpace += device.size
 
         return False
@@ -364,21 +370,20 @@ class ResizeDialog(GUIObject):
         self._update_action_buttons(selectedRow)
 
     def _scheduleActions(self, model, path, itr, *args):
-        (editable, action, ident, target) = model.get(itr, EDITABLE_COL, ACTION_COL, DEVICE_ID_COL, RESIZE_TARGET_COL)
-
-        device = self.storage.devicetree.getDeviceByID(ident)
+        obj = PartStoreRow._make(model[itr])
+        device = self.storage.devicetree.getDeviceByID(obj.id)
 
-        if not editable:
+        if not obj.editable:
             return False
 
-        if action == _(PRESERVE):
+        if obj.action == _(PRESERVE):
             return False
-        elif action == _(SHRINK):
+        elif obj.action == _(SHRINK):
             if device.resizable:
-                self.storage.resizeDevice(device, target)
+                self.storage.resizeDevice(device, obj.target)
             else:
                 self.storage.recursiveRemove(device)
-        elif action == _(DELETE):
+        elif obj.action == _(DELETE):
             self.storage.recursiveRemove(device)
 
         return False
@@ -396,12 +401,12 @@ class ResizeDialog(GUIObject):
 
         itr = self._diskStore.get_iter_first()
         while itr:
-            if not self._diskStore[itr][EDITABLE_COL]:
+            obj = PartStoreRow._make(self._diskStore[itr])
+            if not obj.editable:
                 itr = self._diskStore.iter_next(itr)
                 continue
 
-            (ident, ) = self._diskStore.get(itr, DEVICE_ID_COL) 
-            device = self.storage.devicetree.getDeviceByID(ident)
+            device = self.storage.devicetree.getDeviceByID(obj.id)
             if device.isDisk:
                 self._actionChanged(itr, action)
 
-- 
1.8.1.2



More information about the anaconda-patches mailing list