[tor-commits] [ooni-probe/master] * Added constructor override to call setUpClass, for handling inputs.

isis at torproject.org isis at torproject.org
Sun Nov 4 13:50:41 UTC 2012


commit e526c0f715d00dfe0f0135081436b36e24f5d4f5
Author: Isis Lovecruft <isis at torproject.org>
Date:   Sun Nov 4 04:27:12 2012 +0000

    * Added constructor override to call setUpClass, for handling inputs.
---
 ooni/nettest.py |  120 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 62 insertions(+), 58 deletions(-)

diff --git a/ooni/nettest.py b/ooni/nettest.py
index e01c4f1..8cd3c07 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -11,6 +11,7 @@
 #
 # <-------------------
 
+from functools import partial
 import sys
 import os
 import itertools
@@ -64,11 +65,60 @@ class InputTestSuite(pyunit.TestSuite):
             self._idx += 1
         return result
 
-
 class NetTestAdaptor(unittest.TestCase):
     """
     XXX fill me in
     """
+
+    @classmethod
+    def __new__(cls, *args, **kwargs):
+        super( NetTestAdaptor, cls ).__new__(*args, **kwargs)
+        if hasattr(cls, setUpClass):
+            setUpClass(cls)
+        else:
+            log.debug("NetTestAdaptor: constructor could not find setUpClass")
+
+    def __init__(self, *args, **kwargs):
+        """
+        If you override me, you must call
+
+            ``super(NetTestCase, self).__init__(*args, **kwargs)``
+
+        at the beginning of your __init__ method. Keyword arguments passed to
+        the above statement become attributes of the adaptor, and can be used
+        to alter the logic of input handling and parent class instantiation.
+        Therefore, You probably do not need to pass me any keyword arguments
+        when calling me, i.e. using ``(*args, **kwargs)`` will work just fine.
+        """
+        log.debug("NetTestAdaptor: created")
+        if kwargs:
+            if 'methodName' in kwargs:
+                log.debug("NetTestAdaptor: found 'methodName' in kwargs")
+                log.debug("NetTestAdaptor: calling unittest.TestCase.__init()")
+                super( NetTestAdaptor, self ).__init__(
+                    methodName=kwargs['methodName'] )
+            else:
+                log.debug("NetTestAdaptor: calling unittest.TestCase.__init()")
+                super( NetTestAdaptor, self ).__init__( )
+
+            for key, value in kwargs.items():     ## Let subclasses define their
+                if key != 'methodName':           ## instantiation without
+                    if not hasattr(self, key):    ## overriding parent classes
+                        log.debug("NetTestAdaptor: calling setattr(self,%s,%s)"
+                                  % (key, value) )
+                        setattr(self, key, value)
+
+        #setattr(self, "copyattr", __copy_attr__)
+
+        ## Internal attribute copies:
+        #self._input_parser = copyattr("inputParser", alt=__input_parser__)
+        #self._nettest_name = copyattr("name", alt="NetTestAdaptor"))
+
+        if self.parsed_inputs:
+            self.inputs = self.parsed_inputs
+        else:
+            log.debug("Unable to find parsed inputs")
+
     @staticmethod
     def __copyattr__(obj, old, new=None, alt=None):
         """
@@ -125,63 +175,17 @@ class NetTestAdaptor(unittest.TestCase):
                     _copy = alt
                 setattr(obj, new, _copy)
 
-    ## Using setattr in __init__ for now:
-    #def copyattr(self, *args, **kwargs):
-    #    if len(args) >= 1:
-    #        _copy = partial(__copyattr__, args[0])
-    #        if len(args) == 2:
-    #            return _copy(new=args[1])
-    #        elif len(args) == 3:
-    #            return _copy(new=args[1], alt=args[2])
-    #        elif kwargs:
-    #            return _copy(kwargs)
-    #    else:
-    #        return
-
-    def __init__(self, *args, **kwargs):
-        """
-        If you override me, you must call
-
-            ``super(NetTestCase, self).__init__(*args, **kwargs)``
-
-        at the beginning of your __init__ method. Keyword arguments passed to
-        the above statement become attributes of the adaptor, and can be used
-        to alter the logic of input handling and parent class instantiation.
-        Therefore, You probably do not need to pass me any keyword arguments
-        when calling me, i.e. using ``(*args, **kwargs)`` will work just fine.
-        """
-        log.debug("NetTestAdapter: created")
-        if kwargs:
-            if 'methodName' in kwargs:
-                log.debug("NetTestAdaptor: found 'methodName' in kwargs")
-                log.debug("NetTestAdaptor: calling unittest.TestCase.__init()")
-                super( NetTestAdaptor, self ).__init__(
-                    methodName=kwargs['methodName'] )
-            else:
-                log.debug("NetTestAdaptor: calling unittest.TestCase.__init()")
-                super( NetTestAdaptor, self ).__init__( )
-
-            for key, value in kwargs.items():     ## Let subclasses define their
-                if key != 'methodName':           ## instantiation without
-                    if not hasattr(self, key):    ## overriding parent classes
-                        log.debug("NetTestAdaptor: calling setattr(self,%s,%s)"
-                                  % (key, value) )
-                        setattr(self, key, value)
-
-        #setattr(self, "copyattr", __copy_attr__)
-
-        ## Internal attribute copies:
-        #self._input_parser = copyattr("inputParser", alt=__input_parser__)
-        #self._nettest_name = copyattr("name", alt="NetTestAdaptor"))
-
-        ## Set our inputs to the parsed and processed inputs:
-        #self.inputs = __get_inputs__()
-
-        ## xxx do we need:
-        if self.parsed_inputs:
-            self.inputs = self.parsed_inputs
-        else:
-            log.debug("Unable to find parsed inputs")
+    def copyattr(self, *args, **kwargs):
+        if len(args) >= 1:
+           _copy = partial(__copyattr__, args[0])
+           if len(args) == 2:
+               return _copy(new=args[1])
+           elif len(args) == 3:
+               return _copy(new=args[1], alt=args[2])
+           elif kwargs:
+               return _copy(kwargs)
+       else:
+           return
 
     @staticmethod
     def __input_parser__(one_input): return one_input





More information about the tor-commits mailing list