[tor-commits] [ooni-probe/master] Re-organize module structure

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


commit 83b169fbae5174255d17939464b29782f81d6de8
Author: Arturo Filastò <art at fuffa.org>
Date:   Sat Jan 12 14:56:48 2013 +0100

    Re-organize module structure
---
 ooni/director.py     |   87 ++++++++++++++++++++++++++++++++++++++++++++++++++
 ooni/managers.py     |   77 --------------------------------------------
 ooni/measurements.py |   77 --------------------------------------------
 ooni/nettest.py      |   61 +++++++++++++++++++++++++++++++++++
 4 files changed, 148 insertions(+), 154 deletions(-)

diff --git a/ooni/director.py b/ooni/director.py
new file mode 100644
index 0000000..cf23269
--- /dev/null
+++ b/ooni/director.py
@@ -0,0 +1,87 @@
+from ooni.managers import ReportingEntryManager, MeasurementsManager
+from ooni.nettest import NetTest
+
+class Director(object):
+    """
+    Singleton object responsible for coordinating the Measurements Manager and the
+    Reporting Manager.
+
+    How this all looks like is as follows:
+
+    +------------------------------------------------+
+    |                   Director                     |<--+
+    +------------------------------------------------+   |
+        ^                                ^               |
+        |        Measurement             |               |
+    +---------+  [---------]    +--------------------+   |
+    |         |                 | MeasurementManager |   |
+    | NetTest |  [---------]    +--------------------+   |
+    |         |                 | [----------------] |   |
+    +---------+  [---------]    | [----------------] |   |
+        |                       | [----------------] |   |
+        |                       +--------------------+   |
+        v                                                |
+    +---------+   ReportEntry                            |
+    |         |   [---------]    +--------------------+  |
+    |  Report |                  | ReportEntryManager |  |
+    |         |   [---------]    +--------------------+  |
+    +---------+                  | [----------------] |  |
+                  [---------]    | [----------------] |--
+                                 | [----------------] |
+                                 +--------------------+
+
+    [------------] are Tasks
+
+    +------+
+    |      |  are TaskManagers
+    +------+
+    |      |
+    +------+
+
+    +------+
+    |      |  are general purpose objects
+    +------+
+
+    """
+    _scheduledTests = 0
+
+    def __init__(self):
+        self.reporters = reporters
+
+        self.netTests = []
+
+        self.measurementsManager = MeasurementsManager(manager=self,
+                netTests=self.netTests)
+        self.measurementsManager.director = self
+
+        self.reportEntryManager = ReportingEntryManager()
+        self.reportEntryManager.director = self
+
+    def startTest(self, net_test_file, inputs, options):
+        """
+        Create the Report for the NetTest and start the report NetTest.
+        """
+        report = Report()
+        report.reportEntryManager = self.reportEntryManager
+
+        net_test = NetTest(net_test_file, inputs, options, report)
+        net_test.director = self
+
+        self.measurementsManager.schedule(net_test.generateMeasurements())
+
+    def measurementTimedOut(self, measurement):
+        """
+        This gets called every time a measurement times out independenty from
+        the fact that it gets re-scheduled or not.
+        """
+        pass
+
+    def measurementFailed(self, failure, measurement):
+        pass
+
+    def writeFailure(self, measurement, failure):
+        pass
+
+    def writeReport(self, report_write_task):
+        self.reportingManager.write(report_write_task)
+
diff --git a/ooni/managers.py b/ooni/managers.py
index c4b4d2a..f6d4c74 100644
--- a/ooni/managers.py
+++ b/ooni/managers.py
@@ -199,80 +199,3 @@ class ReportEntryManager(object):
     def failed(self, failure, measurement):
         pass
 
-class Director(object):
-    """
-    Singleton object responsible for coordinating the Measurements Manager and the
-    Reporting Manager.
-
-    How this all looks like is as follows:
-
-    +------------------------------------------------+
-    |                   Director                     |<--+
-    +------------------------------------------------+   |
-        ^                                ^               |
-        |        Measurement             |               |
-    +---------+  [---------]    +--------------------+   |
-    |         |                 | MeasurementManager |   |
-    | NetTest |  [---------]    +--------------------+   |
-    |         |                 | [----------------] |   |
-    +---------+  [---------]    | [----------------] |   |
-        |                       | [----------------] |   |
-        |                       +--------------------+   |
-        v                                                |
-    +---------+   ReportEntry                            |
-    |         |   [---------]    +--------------------+  |
-    |  Report |                  | ReportEntryManager |  |
-    |         |   [---------]    +--------------------+  |
-    +---------+                  | [----------------] |  |
-                  [---------]    | [----------------] |--
-                                 | [----------------] |
-                                 +--------------------+
-
-    [------------] are Tasks
-
-    +------+
-    |      |  are TaskManagers
-    +------+
-    |      |
-    +------+
-
-    +------+
-    |      |  are general purpose objects
-    +------+
-
-    """
-    _scheduledTests = 0
-
-    def __init__(self):
-        self.reporters = reporters
-
-        self.netTests = []
-
-        self.measurementsManager = MeasurementsManager(manager=self,
-                netTests=self.netTests)
-        self.measurementsManager.director = self
-
-        self.reportingManager = ReportingEntryManager()
-        self.reportingManager.director = self
-
-    def startTest(self, net_test_file, inputs, options):
-        """
-        Create the Report for the NetTest and start the report NetTest.
-        """
-        report = Report()
-        net_test = NetTest(net_test_file, inputs, options, report)
-        net_test.director = self
-
-    def measurementTimedOut(self, measurement):
-        """
-        This gets called every time a measurement times out independenty from
-        the fact that it gets re-scheduled or not.
-        """
-        pass
-
-    def measurementFailed(self, measurement, failure):
-        pass
-
-    def writeFailure(self, measurement, failure):
-        pass
-
diff --git a/ooni/measurements.py b/ooni/measurements.py
deleted file mode 100644
index 0ef8ef6..0000000
--- a/ooni/measurements.py
+++ /dev/null
@@ -1,77 +0,0 @@
-from .tasks import TaskWithTimeout
-
-class NetTest(object):
-    director = None
-
-    def __init__(self, net_test_file, inputs, options, report):
-        """
-        net_test_file:
-            is a file object containing the test to be run.
-
-        inputs:
-            is a generator containing the inputs to the net test.
-
-        options:
-            is a dict containing the opitions to be passed to the net test.
-        """
-        self.test_cases = self.loadNetTestFile(net_test_file)
-        self.inputs = inputs
-        self.options = options
-
-    def loadNetTestFile(self, net_test_file):
-        """
-        Creates all the necessary test_cases (a list of tuples containing the
-        NetTestCase (test_class, test_method))
-
-        example:
-            [(test_classA, test_method1),
-            (test_classA, test_method2),
-            (test_classA, test_method3),
-            (test_classA, test_method4),
-            (test_classA, test_method5),
-
-            (test_classB, test_method1),
-            (test_classB, test_method2)]
-
-        Note: the inputs must be valid for test_classA and test_classB.
-
-        net_test_file:
-            is a file like object that will be used to generate the test_cases.
-        """
-        # XXX Not implemented
-        raise NotImplemented
-
-    def timedOut(self, measurement):
-        """
-        This gets called when a measurement has timed out. This may or may not
-        trigger a retry inside of MeasurementsTracker.
-        """
-        self.director.measurementTimedOut(measurement)
-
-    def failed(self, measurement, failure):
-        """
-        This gets called when a measurement has failed in the sense that all
-        the retries have failed at successfully running the test.
-        This means that it's a definitive failure and we will no longer make
-        any attempts at re-running the measurement.
-        """
-        self.director.measurementFailed(measurement, failure)
-
-    def succeeded(self, measurement):
-        """
-        This gets called when a measurement has failed.
-        """
-        self.report.write(measurement)
-
-    def generateMeasurements(self):
-        """
-        This is a generator that yields measurements and sets their timeout
-        value and their netTest attribute.
-        """
-        for test_input in self.inputs:
-            for test_class, test_method in self.test_cases:
-                measurement = Measurement(test_class, test_method, test_input)
-                measurement.netTest = self
-                measurement.timeout = self.rateLimiter.timeout
-                yield measurement
-
diff --git a/ooni/nettest.py b/ooni/nettest.py
index 538fcf9..2b1c550 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -10,6 +10,67 @@ from twisted.python import usage
 from ooni.errors import handleAllFailures, failureToString
 from ooni.utils import log
 
+class NetTest(object):
+    director = None
+
+    def __init__(self, net_test_file, inputs, options, report):
+        """
+        The NetTest object is responsible for keeping a reference to the
+        Report and the loading of NetTestCases from test files.
+
+        net_test_file:
+            is a file object containing the test to be run.
+
+        inputs:
+            is a generator containing the inputs to the net test.
+
+        options:
+            is a dict containing the opitions to be passed to the net test.
+        """
+        self.test_cases = self.loadNetTestFile(net_test_file)
+        self.inputs = inputs
+        self.options = options
+
+    def loadNetTestFile(self, net_test_file):
+        """
+        Creates all the necessary test_cases (a list of tuples containing the
+        NetTestCase (test_class, test_method))
+
+        example:
+            [(test_classA, test_method1),
+            (test_classA, test_method2),
+            (test_classA, test_method3),
+            (test_classA, test_method4),
+            (test_classA, test_method5),
+
+            (test_classB, test_method1),
+            (test_classB, test_method2)]
+
+        Note: the inputs must be valid for test_classA and test_classB.
+
+        net_test_file:
+            is a file like object that will be used to generate the test_cases.
+        """
+        # XXX Not implemented
+        raise NotImplemented
+
+    def succeeded(self, measurement):
+        """
+        This gets called when a measurement has failed.
+        """
+        self.report.write(measurement)
+
+    def generateMeasurements(self):
+        """
+        This is a generator that yields measurements and sets their timeout
+        value and their netTest attribute.
+        """
+        for test_input in self.inputs:
+            for test_class, test_method in self.test_cases:
+                measurement = Measurement(test_class, test_method, test_input)
+                measurement.netTest = self
+                measurement.timeout = self.rateLimiter.timeout
+                yield measurement
 
 class NoPostProcessor(Exception):
     pass





More information about the tor-commits mailing list