[pykickstart] Reset method seen attrs when switching method (#1004889)

Brian C. Lane bcl at redhat.com
Mon Sep 9 22:21:08 UTC 2013


From: "Brian C. Lane" <bcl at redhat.com>

The method initially gets set to cdrom, it can then be switched to
another method via UI or when falling back to closest mirror if a repo
isn't found. This would result in .seen to be set on multiple methods,
and since .cdrom.seen was checked first it would be used for the
attributes -- some of which don't exist.

This clears the .seen attr when switching methods or setting it to None.

It also fixes a problem where None was being returned for too many attrs
which caused problems with the internal operations of copy.copy used by
the software spoke to detect changes from the previous method settings.
Only return None if the name is "method" otherwise pass it through to
the superclass' __getattr__
---
 pykickstart/commands/method.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/pykickstart/commands/method.py b/pykickstart/commands/method.py
index 1e0cf90..0dbcb52 100644
--- a/pykickstart/commands/method.py
+++ b/pykickstart/commands/method.py
@@ -28,6 +28,13 @@ class FC3_Method(KickstartCommand):
     internals = ["method",
                  "writePriority", "currentCmd", "currentLine", "handler", "lineno", "seen"]
 
+    _methods = ["cdrom", "harddrive", "nfs", "url"]
+
+    def _clear_seen(self):
+        """ Reset all the method's seen attrs to False"""
+        for method in self._methods:
+            setattr(getattr(self.handler, method), "seen", False)
+
     def __getattr__(self, name):
         if self.handler.cdrom.seen:
             if name == "method":
@@ -49,11 +56,15 @@ class FC3_Method(KickstartCommand):
                 return "url"
             else:
                 return getattr(self.handler.url, name)
-        else:
+        elif name == "method":
             return None
+        else:
+            return KickstartCommand.__getattr__(self, name)
 
     def __setattr__(self, name, value):
         if name in self.internals:
+            if name == "method":
+                self._clear_seen()
             if name == "method" and value == "cdrom":
                 setattr(self.handler.cdrom, "seen", True)
             elif name == "method" and value == "harddrive":
@@ -88,6 +99,8 @@ class F19_Method(FC3_Method):
     removedKeywords = FC3_Method.removedKeywords
     removedAttrs = FC3_Method.removedAttrs
 
+    _methods = FC3_Method._methods + ["liveimg"]
+
     def __getattr__(self, name):
         if self.handler.liveimg.seen:
             if name == "method":
@@ -99,6 +112,8 @@ class F19_Method(FC3_Method):
 
     def __setattr__(self, name, value):
         if name in self.internals:
+            if name == "method":
+                self._clear_seen()
             if name == "method" and value == "liveimg":
                 setattr(self.handler.liveimg, "seen", True)
             else:
-- 
1.8.3.1



More information about the anaconda-patches mailing list