From bda64afc3bf7f73dc8b18df7fa7a72945dd72c97 Mon Sep 17 00:00:00 2001 From: Nigel Metheringham Date: Thu, 28 Feb 2013 09:07:54 +0000 Subject: [PATCH] Restructured inheritance of BSD network classes Now all BSD network classes directly inherit from Network as well as from the generic BSD network class. This removes the need for itersubclasses(). --- setup | 46 +++------------------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/setup b/setup index 6953df09d3c..25f5264d9dc 100644 --- a/setup +++ b/setup @@ -602,46 +602,6 @@ class FreeBSDHardware(Hardware): if s: self.facts['devices'][d.group(1)].append(s.group(1)) -def itersubclasses(cls, _seen=None): - """ - itersubclasses(cls) - - Generator over all subclasses of a given class, in depth first order. - - >>> list(itersubclasses(int)) == [bool] - True - >>> class A(object): pass - >>> class B(A): pass - >>> class C(A): pass - >>> class D(B,C): pass - >>> class E(D): pass - >>> - >>> for cls in itersubclasses(A): - ... print(cls.__name__) - B - D - E - C - >>> # get ALL (new-style) classes currently defined - >>> [cls.__name__ for cls in itersubclasses(object)] #doctest: +ELLIPSIS - ['type', ...'tuple', ...] - """ - - if not isinstance(cls, type): - raise TypeError('itersubclasses must be called with ' - 'new-style classes, not %.100r' % cls) - if _seen is None: _seen = set() - try: - subs = cls.__subclasses__() - except TypeError: # fails only when cls is type - subs = cls.__subclasses__(cls) - for sub in subs: - if sub not in _seen: - _seen.add(sub) - yield sub - for sub in itersubclasses(sub, _seen): - yield sub - class Network(Facts): """ This is a generic Network subclass of Facts. This should be further @@ -663,7 +623,7 @@ class Network(Facts): def __new__(cls, *arguments, **keyword): subclass = cls - for sc in itersubclasses(Network): + for sc in Network.__subclasses__(): if sc.platform == platform.system(): subclass = sc return super(cls, subclass).__new__(subclass, *arguments, **keyword) @@ -969,14 +929,14 @@ class GenericBsdIfconfigNetwork(Network): for item in ifinfo[ip_type][0].keys(): defaults[item] = ifinfo[ip_type][0][item] -class DarwinNetwork(GenericBsdIfconfigNetwork): +class DarwinNetwork(GenericBsdIfconfigNetwork, Network): """ This is the Mac OS X/Darwin Network Class. It uses the GenericBsdIfconfigNetwork unchanged """ platform = 'Darwin' -class FreeBSDNetwork(GenericBsdIfconfigNetwork): +class FreeBSDNetwork(GenericBsdIfconfigNetwork, Network): """ This is the FreeBSD Network Class. It uses the GenericBsdIfconfigNetwork unchanged