[tor-commits] [ooni-probe/master] Refactoring of inputProcessor

isis at torproject.org isis at torproject.org
Sun Mar 10 01:57:02 UTC 2013


commit cc3882df9b7d3d40eb2d3e1d918b3bba475417b1
Author: Arturo Filastò <art at fuffa.org>
Date:   Wed Jan 16 20:59:48 2013 +0100

    Refactoring of inputProcessor
---
 ooni/nettest.py |   55 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/ooni/nettest.py b/ooni/nettest.py
index 728d093..2da1c8f 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -419,11 +419,14 @@ class NetTestCase(object):
         """
         raise NoPostProcessor
 
-    def inputProcessor(self, filename=None):
+    def inputProcessor(self, filename):
         """
         You may replace this with your own custom input processor. It takes as
         input a file name.
 
+        An inputProcessor is an iterator that will yield one item from the file
+        and takes as argument a filename.
+
         This can be useful when you have some input data that is in a certain
         format and you want to set the input attribute of the test to something
         that you will be able to properly process.
@@ -441,36 +444,44 @@ class NetTestCase(object):
         Other fun stuff is also possible.
         """
         log.debug("Running default input processor")
-        if filename:
-            fp = open(filename)
-            for x in fp.xreadlines():
-                yield x.strip()
-            fp.close()
+        with open(filename) as f:
+            for line in f:
+                yield line.strip()
+
+    @property
+    def inputFileSpecified(self):
+        """
+        Returns:
+            True
+                when inputFile is supported and is specified
+            False
+                when input is either not support or not specified
+        """
+        if not self.inputFile:
+            return False
+
+        k = self.inputFile[0]
+        if self.localOptions.get(k):
+            return True
         else:
-            pass
+            return False
 
     def getInputProcessor(self):
         """
         This method must be called after all options are validated by
         _checkValidOptions and _checkRequiredOptions, which ensure that
         if the inputFile is a required option it will be present.
-        """
-        if self.inputFile:
-            if self.inputFile[0] in self.localOptions:
-                self.inputFilename = self.localOptions[self.inputFile[0]]
-
-                inputProcessor = self.inputProcessor
-                inputFilename = self.inputFilename
 
-                class inputProcessorIterator(object):
-                    """
-                    Here we convert the input processor generator into an iterator
-                    so that we can run it twice.
-                    """
-                    def __iter__(self):
-                        return inputProcessor(inputFilename)
+        We check to see if it's possible to have an input file and if the user
+        has specified such file.
 
-                return inputProcessorIterator()
+        Returns:
+            a generator that will yield one item from the file based on the
+            inputProcessor.
+        """
+        if self.inputFileSpecified:
+            self.inputFilename = self.localOptions[self.inputFile[0]]
+            return self.inputProcessor(self.inputFilename)
 
         return None
 





More information about the tor-commits mailing list