[blivet 1/2] Use a setter for Device.name as foretold by the prophecy of TODO

David Shea dshea at redhat.com
Tue May 20 14:47:05 UTC 2014


Remove the uses of Device._name except the parts that actually need it.
Change the property to use _getName and _setName methods to make it less
confusing to override.
---
 blivet/devicefactory.py | 14 ++++++-------
 blivet/devices.py       | 53 +++++++++++++++++++++++++++++++++----------------
 2 files changed, 42 insertions(+), 25 deletions(-)

diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
index c655a71..b30c55b 100644
--- a/blivet/devicefactory.py
+++ b/blivet/devicefactory.py
@@ -674,17 +674,16 @@ class DeviceFactory(object):
                                                   swap=(self.fstype == "swap"),
                                                   mountpoint=self.mountpoint)
 
-        # TODO: write a StorageDevice.name setter
         safe_new_name = self.storage.safeDeviceName(self.device_name)
         if self.device.name != safe_new_name:
             if safe_new_name in self.storage.names:
                 log.error("not renaming '%s' to in-use name '%s'",
-                            self.device._name, safe_new_name)
+                            self.device.name, safe_new_name)
                 return
 
             log.debug("renaming device '%s' to '%s'",
-                        self.device._name, safe_new_name)
-            self.device._name = safe_new_name
+                        self.device.name, safe_new_name)
+            self.device.name = safe_new_name
 
     def _post_create(self):
         """ Hook for post-creation operations. """
@@ -1234,13 +1233,12 @@ class LVMFactory(DeviceFactory):
                                                   swap=(self.fstype == "swap"),
                                                   mountpoint=self.mountpoint)
 
-        # TODO: write a StorageDevice.name setter
         lvname = "%s-%s" % (self.container.name, self.device_name)
         safe_new_name = self.storage.safeDeviceName(lvname)
         if self.device.name != safe_new_name:
             if safe_new_name in self.storage.names:
                 log.error("not renaming '%s' to in-use name '%s'",
-                            self.device._name, safe_new_name)
+                            self.device.name, safe_new_name)
                 return
 
             if not safe_new_name.startswith(self.container.name):
@@ -1250,8 +1248,8 @@ class LVMFactory(DeviceFactory):
             # strip off the vg name before setting
             safe_new_name = safe_new_name[len(self.container.name)+1:]
             log.debug("renaming device '%s' to '%s'",
-                        self.device._name, safe_new_name)
-            self.device._name = safe_new_name
+                        self.device.name, safe_new_name)
+            self.device.name = safe_new_name
 
     def _configure(self):
         self._set_container()
diff --git a/blivet/devices.py b/blivet/devices.py
index 86c869e..163ebd3 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -385,11 +385,16 @@ class Device(util.ObjectID):
         """ Is this device currently active and ready for use? """
         return False
 
-    @property
-    def name(self):
-        """ This device's name. """
+    def _getName(self):
         return self._name
 
+    def _setName(self, value):
+        self._name = value
+
+    name = property(lambda s: s._getName(), 
+                    lambda s, v: s._setName(v),
+                    doc="This device's name")
+
     @property
     def isleaf(self):
         """ True if no other device depends on this one. """
@@ -649,6 +654,21 @@ class StorageDevice(Device):
 
         return self._partedDevice
 
+    def _setName(self, value):
+        """Set the device's name.
+
+        :param value: the new device name
+        :raises errors.DeviceError: if the device exists
+        """
+
+        if value == self._name:
+            return
+
+        if self.exists:
+            raise errors.DeviceError("Cannot rename existing device.")
+
+        super(StorageDevice, self)._setName(value)
+
     def _getTargetSize(self):
         return self._targetSize
 
@@ -1483,9 +1503,9 @@ class PartitionDevice(StorageDevice):
 
     def updateName(self):
         if self.partedPartition is None:
-            self._name = self.req_name
+            self.name = self.req_name
         else:
-            self._name = \
+            self.name = \
                 devicePathToName(self.partedPartition.getDeviceNodeName())
 
     def dependsOn(self, dep):
@@ -1992,18 +2012,18 @@ class DMDevice(StorageDevice):
             if dev.startswith(prefix) and dev[len(prefix):].isdigit():
                 dm.dm_remove(dev)
 
-    def _setName(self, name):
+    def _setName(self, value):
         """ Set the device's map name. """
+        if value == self._name:
+            return
+
         log_method_call(self, self.name, status=self.status)
         if self.status:
             raise errors.DeviceError("cannot rename active device", self.name)
 
-        self._name = name
+        super(DMDevice, self)._setName(value)
         #self.sysfsPath = "/dev/disk/by-id/dm-name-%s" % self.name
 
-    name = property(lambda d: d._name,
-                    lambda d,n: d._setName(n))
-
     @property
     def slave(self):
         """ This device's backing device. """
@@ -2136,7 +2156,7 @@ class LUKSDevice(DMCryptDevice):
         return size
 
     def _postCreate(self):
-        self._name = self.slave.format.mapName
+        self.name = self.slave.format.mapName
         StorageDevice._postCreate(self)
 
     def _postTeardown(self, recursive=False):
@@ -2845,8 +2865,7 @@ class LVMLogicalVolumeDevice(DMDevice):
 
         return dm.dm_node_from_name(self.mapName)
 
-    @property
-    def name(self):
+    def _getName(self):
         """ This device's name. """
         return "%s-%s" % (self.vg.name, self._name)
 
@@ -4116,7 +4135,7 @@ class LoopDevice(StorageDevice):
 
         name = loop.get_loop_name(self.slave.path)
         if name.startswith("loop"):
-            self._name = name
+            self.name = name
 
         return self.name
 
@@ -4154,7 +4173,7 @@ class LoopDevice(StorageDevice):
 
     def _postTeardown(self, recursive=False):
         StorageDevice._postTeardown(self, recursive=recursive)
-        self._name = "tmploop%d" % self.id
+        self.name = "tmploop%d" % self.id
         self.sysfsPath = ''
 
     @property
@@ -4634,10 +4653,10 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice):
     def _setFormat(self, fmt):
         """ Set the Device's format. """
         super(BTRFSVolumeDevice, self)._setFormat(fmt)
-        self._name = "btrfs.%d" % self.id
+        self.name = "btrfs.%d" % self.id
         label = getattr(self.format, "label", None)
         if label:
-            self._name = label
+            self.name = label
 
     def _getSize(self):
         size = sum([d.size for d in self.parents])
-- 
1.9.0



More information about the anaconda-patches mailing list