commit cc3882df9b7d3d40eb2d3e1d918b3bba475417b1 Author: Arturo Filastò art@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