From 63bb2a13e9543eb694e92150142a8dc85394cd89 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 27 Apr 2008 07:22:58 +0000 Subject: [PATCH] Take the classes that initialize variables in __slots__ with keyword constructor arguments and make them all derive from a new SlotObject class. svn path=/main/trunk/; revision=9994 --- pym/_emerge/__init__.py | 73 +++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 7e8308a9a..c3c4a896a 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -829,14 +829,25 @@ def filter_iuse_defaults(iuse): else: yield flag -class AbstractDepPriority(object): - __slots__ = ("__weakref__", "buildtime", "runtime", "runtime_post") +class SlotObject(object): + __slots__ = ("__weakref__") + def __init__(self, **kwargs): - for myattr in chain(self.__slots__, AbstractDepPriority.__slots__): - if myattr == "__weakref__": + classes = [self.__class__] + while classes: + c = classes.pop() + if c is SlotObject: + continue + classes.extend(c.__bases__) + slots = getattr(c, "__slots__", None) + if not slots: continue - myvalue = kwargs.get(myattr, False) - setattr(self, myattr, myvalue) + for myattr in slots: + myvalue = kwargs.get(myattr, None) + setattr(self, myattr, myvalue) + +class AbstractDepPriority(SlotObject): + __slots__ = ("buildtime", "runtime", "runtime_post") def __lt__(self, other): return self.__int__() < other @@ -1207,28 +1218,14 @@ def show_masked_packages(masked_packages): shown_licenses.add(l) return have_eapi_mask -class Task(object): - __slots__ = ("__weakref__", "_hash_key",) - - def __init__(self, **kwargs): - classes = [self.__class__] - while classes: - c = classes.pop() - if c is Task: - continue - classes.extend(c.__bases__) - slots = getattr(c, "__slots__", None) - if not slots: - continue - for myattr in slots: - myvalue = kwargs.get(myattr, None) - setattr(self, myattr, myvalue) +class Task(SlotObject): + __slots__ = ("_hash_key",) def _get_hash_key(self): - try: - return self._hash_key - except AttributeError: + hash_key = getattr(self, "_hash_key", None) + if hash_key is None: raise NotImplementedError(self) + return hash_key def __eq__(self, other): return self._get_hash_key() == other @@ -1258,9 +1255,8 @@ class Blocker(Task): __slots__ = ("root", "atom", "satisfied") def _get_hash_key(self): - try: - return self._hash_key - except AttributeError: + hash_key = getattr(self, "_hash_key", None) + if hash_key is None: self._hash_key = \ ("blocks", self.root, self.atom) return self._hash_key @@ -1276,9 +1272,8 @@ class Package(Task): self.cpv_slot = "%s:%s" % (self.cpv, self.metadata["SLOT"]) def _get_hash_key(self): - try: - return self._hash_key - except AttributeError: + hash_key = getattr(self, "_hash_key", None) + if hash_key is None: operation = "merge" if self.onlydeps or self.installed: operation = "nomerge" @@ -1307,9 +1302,8 @@ class Package(Task): class Uninstall(Package): __slots__ = () def _get_hash_key(self): - try: - return self._hash_key - except AttributeError: + hash_key = getattr(self, "_hash_key", None) + if hash_key is None: self._hash_key = \ (self.type_name, self.root, self.cpv, "uninstall") return self._hash_key @@ -1341,16 +1335,11 @@ class SetArg(DependencyArg): self.set = set self.name = self.arg[len(SETPREFIX):] -class Dependency(object): - __slots__ = ("__weakref__", "atom", "blocker", "depth", +class Dependency(SlotObject): + __slots__ = ("atom", "blocker", "depth", "parent", "onlydeps", "priority", "root") def __init__(self, **kwargs): - for myattr in self.__slots__: - if myattr == "__weakref__": - continue - myvalue = kwargs.get(myattr, None) - setattr(self, myattr, myvalue) - + SlotObject.__init__(self, **kwargs) if self.priority is None: self.priority = DepPriority() if self.depth is None: -- 2.26.2