[PATCH] Fix the Device.id usage.

David Shea dshea at redhat.com
Tue Jan 21 20:22:12 UTC 2014


Set the id for subclasses of ObjectID during __new__ so that the id is
available to subclasses during __init__.
---
 blivet/devices.py | 4 ++--
 blivet/util.py    | 9 ++++++---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index adfc786..e1fde38 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -3925,7 +3925,7 @@ class LoopDevice(StorageDevice):
 
         if not name:
             # set up a temporary name until we've activated the loop device
-            name = "tmploop%d" % Device.id
+            name = "tmploop%d" % self.id
 
         StorageDevice.__init__(self, name, format=format, size=size,
                                exists=True, parents=parents)
@@ -4338,7 +4338,7 @@ class BTRFSDevice(StorageDevice):
     def __init__(self, *args, **kwargs):
         """ Passing None or no name means auto-generate one like btrfs.%d """
         if not args or not args[0]:
-            args = ("btrfs.%d" % Device.id,)
+            args = ("btrfs.%d" % self.id,)
 
         if kwargs.get("parents") is None:
             raise ValueError("BTRFSDevice must have at least one parent")
diff --git a/blivet/util.py b/blivet/util.py
index 3c236a6..aed4a25 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -345,10 +345,13 @@ class ObjectID(object):
 
        The name of the identifier property is id, its type is int.
 
-       The constructor always sets object_id to a new value which is unique
-       for the object type.
+       The id is set during creation of the class instance to a new value
+       which is unique for the object type. Subclasses can use self.id during
+       __init__.
     """
     _newid_gen = itertools.count().next
 
-    def __init__(self):
+    def __new__(cls, *args, **kwargs):
+        self = super(ObjectID, cls).__new__(cls, *args, **kwargs)
         self.id = self._newid_gen()
+        return self
-- 
1.8.5.3



More information about the anaconda-patches mailing list