SlotObject: validate __slots__ and keyword args
authorZac Medico <zmedico@gentoo.org>
Fri, 17 Feb 2012 22:31:37 +0000 (14:31 -0800)
committerZac Medico <zmedico@gentoo.org>
Fri, 17 Feb 2012 22:31:37 +0000 (14:31 -0800)
pym/_emerge/SlotObject.py

index fdc6f35adacf0e42997467272d1d9609be3a5358..a59dfc199b35c9f9fbf8115782dad0586ab8cd4a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 1999-2009 Gentoo Foundation
+# Copyright 1999-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 class SlotObject(object):
@@ -15,9 +15,18 @@ class SlotObject(object):
                        if not slots:
                                continue
                        for myattr in slots:
-                               myvalue = kwargs.get(myattr, None)
+                               myvalue = kwargs.pop(myattr, None)
+                               if myvalue is None and getattr(self, myattr, None) is not None:
+                                       raise AssertionError(
+                                               "class '%s' duplicates '%s' value in __slots__ of base class '%s'" %
+                                               (self.__class__.__name__, myattr, c.__name__))
                                setattr(self, myattr, myvalue)
 
+               if kwargs:
+                       raise TypeError(
+                               "'%s' is an invalid keyword argument for this constructor" %
+                               (next(iter(kwargs)),))
+
        def copy(self):
                """
                Create a new instance and copy all attributes