[tor-commits] [ooni-probe/master] Pep8 related fixes.

art at torproject.org art at torproject.org
Thu Jun 26 13:58:11 UTC 2014


commit 46eebbc9010481264d4ed02af96967ec7a55f8ad
Author: Arturo Filastò <art at fuffa.org>
Date:   Wed Jun 18 11:52:05 2014 +0200

    Pep8 related fixes.
---
 ooni/errors.py   |   77 +++++++++++++++++++++++++++++++++-----
 ooni/reporter.py |  108 ++++++++++++++++++++++++++++++++----------------------
 2 files changed, 133 insertions(+), 52 deletions(-)

diff --git a/ooni/errors.py b/ooni/errors.py
index 3b62b2a..9f9ae75 100644
--- a/ooni/errors.py
+++ b/ooni/errors.py
@@ -15,23 +15,42 @@ from txsocksx.errors import HostUnreachable, ConnectionRefused
 from txsocksx.errors import TTLExpired, CommandNotSupported
 
 from socket import gaierror
+
+
 def handleAllFailures(failure):
     """
     Here we make sure to trap all the failures that are supported by the
     failureToString function and we return the the string that represents the
     failure.
     """
-    failure.trap(ConnectionRefusedError, gaierror, DNSLookupError,
-            TCPTimedOutError, ResponseNeverReceived, DeferTimeoutError,
-            GenericTimeoutError,
-            SOCKSError, MethodsNotAcceptedError, AddressNotSupported,
-            ConnectionError, NetworkUnreachable, ConnectionLostEarly,
-            ConnectionNotAllowed, NoAcceptableMethods, ServerFailure,
-            HostUnreachable, ConnectionRefused, TTLExpired, CommandNotSupported,
-            ConnectError, ConnectionLost, CancelledError)
+    failure.trap(
+        ConnectionRefusedError,
+        gaierror,
+        DNSLookupError,
+        TCPTimedOutError,
+        ResponseNeverReceived,
+        DeferTimeoutError,
+        GenericTimeoutError,
+        SOCKSError,
+        MethodsNotAcceptedError,
+        AddressNotSupported,
+        ConnectionError,
+        NetworkUnreachable,
+        ConnectionLostEarly,
+        ConnectionNotAllowed,
+        NoAcceptableMethods,
+        ServerFailure,
+        HostUnreachable,
+        ConnectionRefused,
+        TTLExpired,
+        CommandNotSupported,
+        ConnectError,
+        ConnectionLost,
+        CancelledError)
 
     return failureToString(failure)
 
+
 def failureToString(failure):
     """
     Given a failure instance return a string representing the kind of error
@@ -119,7 +138,7 @@ def failureToString(failure):
     elif isinstance(failure.value, SOCKSError):
         log.err("Generic SOCKS error")
         string = 'socks_error'
-    
+
     elif isinstance(failure.value, CancelledError):
         log.err("Task timed out")
         string = 'task_timed_out'
@@ -130,99 +149,139 @@ def failureToString(failure):
 
     return string
 
+
 class DirectorException(Exception):
     pass
 
+
 class UnableToStartTor(DirectorException):
     pass
 
+
 class InvalidOONIBCollectorAddress(Exception):
     pass
 
+
 class InvalidOONIBBouncerAddress(Exception):
     pass
 
+
 class AllReportersFailed(Exception):
     pass
 
+
 class GeoIPDataFilesNotFound(Exception):
     pass
 
+
 class ReportNotCreated(Exception):
     pass
 
+
 class ReportAlreadyClosed(Exception):
     pass
 
+
 class TorStateNotFound(Exception):
     pass
 
+
 class TorControlPortNotFound(Exception):
     pass
 
+
 class ReportNotCreated(Exception):
     pass
 
+
 class InsufficientPrivileges(Exception):
     pass
 
+
 class ProbeIPUnknown(Exception):
     pass
 
+
 class GeoIPDataFilesNotFound(Exception):
     pass
 
+
 class NoMoreReporters(Exception):
     pass
 
+
 class TorNotRunning(Exception):
     pass
 
+
 class OONIBError(Exception):
     pass
 
+
 class OONIBReportError(OONIBError):
     pass
 
+
 class OONIBReportUpdateError(OONIBReportError):
     pass
 
+
 class OONIBReportCreationError(OONIBReportError):
     pass
 
+
 class OONIBTestDetailsLookupError(OONIBReportError):
     pass
 
+
 class UnableToLoadDeckInput(Exception):
     pass
 
+
 class CouldNotFindTestHelper(Exception):
     pass
 
+
 class CouldNotFindTestCollector(Exception):
     pass
 
+
 class NetTestNotFound(Exception):
     pass
 
+
 class MissingRequiredOption(Exception):
     pass
 
+
 class FailureToLoadNetTest(Exception):
     pass
 
+
 class NoPostProcessor(Exception):
     pass
 
+
 class InvalidOption(Exception):
     pass
 
+
 class TaskTimedOut(Exception):
     pass
 
+
 class InvalidInputFile(Exception):
     pass
 
+
+class ReporterException(Exception):
+    pass
+
+
+class InvalidDestination(ReporterException):
+    pass
+
+
 def get_error(error_key):
     if error_key == 'test-helpers-key-missing':
         return CouldNotFindTestHelper
diff --git a/ooni/reporter.py b/ooni/reporter.py
index 33b4fdf..c5d07ae 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -4,10 +4,13 @@ import json
 import os
 import re
 
-from yaml.representer import *
-from yaml.emitter import *
-from yaml.serializer import *
-from yaml.resolver import *
+from datetime import datetime
+from contextlib import contextmanager
+
+from yaml.representer import SafeRepresenter
+from yaml.emitter import Emitter
+from yaml.serializer import Serializer
+from yaml.resolver import Resolver
 from twisted.python.util import untilConcludes
 from twisted.internet import defer
 from twisted.internet.error import ConnectionRefusedError
@@ -20,6 +23,7 @@ try:
     from scapy.packet import Packet
 except ImportError:
     log.err("Scapy is not installed.")
+
     class Packet(object):
         pass
 
@@ -32,8 +36,7 @@ from ooni.utils.net import BodyReceiver, StringProducer
 from ooni.settings import config
 
 from ooni.tasks import ReportEntry, ReportTracker
-class ReporterException(Exception):
-    pass
+
 
 def createPacketReport(packet_list):
     """
@@ -45,16 +48,19 @@ def createPacketReport(packet_list):
     report = []
     for packet in packet_list:
         report.append({'raw_packet': str(packet),
-            'summary': str([packet])})
+                       'summary': str([packet])})
     return report
 
+
 class OSafeRepresenter(SafeRepresenter):
+
     """
     This is a custom YAML representer that allows us to represent reports
     safely.
     It extends the SafeRepresenter to be able to also represent complex
     numbers and scapy packet.
     """
+
     def represent_data(self, data):
         """
         This is very hackish. There is for sure a better way either by using
@@ -82,29 +88,32 @@ class OSafeRepresenter(SafeRepresenter):
 OSafeRepresenter.add_representer(complex,
                                  OSafeRepresenter.represent_complex)
 
+
 class OSafeDumper(Emitter, Serializer, OSafeRepresenter, Resolver):
+
     """
     This is a modification of the YAML Safe Dumper to use our own Safe
     Representer that supports complex numbers.
     """
+
     def __init__(self, stream,
-            default_style=None, default_flow_style=None,
-            canonical=None, indent=None, width=None,
-            allow_unicode=None, line_break=None,
-            encoding=None, explicit_start=None, explicit_end=None,
-            version=None, tags=None):
+                 default_style=None, default_flow_style=None,
+                 canonical=None, indent=None, width=None,
+                 allow_unicode=None, line_break=None,
+                 encoding=None, explicit_start=None, explicit_end=None,
+                 version=None, tags=None):
+
         Emitter.__init__(self, stream, canonical=canonical,
-                indent=indent, width=width,
-                allow_unicode=allow_unicode, line_break=line_break)
+                         indent=indent, width=width,
+                         allow_unicode=allow_unicode, line_break=line_break)
         Serializer.__init__(self, encoding=encoding,
-                explicit_start=explicit_start, explicit_end=explicit_end,
-                version=version, tags=tags)
+                            explicit_start=explicit_start,
+                            explicit_end=explicit_end,
+                            version=version, tags=tags)
         OSafeRepresenter.__init__(self, default_style=default_style,
-                default_flow_style=default_flow_style)
+                                  default_flow_style=default_flow_style)
         Resolver.__init__(self)
 
-class NoTestIDSpecified(Exception):
-    pass
 
 def safe_dump(data, stream=None, **kw):
     """
@@ -112,7 +121,9 @@ def safe_dump(data, stream=None, **kw):
     """
     return yaml.dump_all([data], stream, Dumper=OSafeDumper, **kw)
 
+
 class OReporter(object):
+
     def __init__(self, test_details):
         self.testDetails = test_details
 
@@ -149,10 +160,9 @@ class OReporter(object):
 
         return defer.maybeDeferred(self.writeReportEntry, test_report)
 
-class InvalidDestination(ReporterException):
-    pass
 
 class YAMLReporter(OReporter):
+
     """
     These are useful functions for reporting to YAML format.
 
@@ -160,11 +170,13 @@ class YAMLReporter(OReporter):
         the destination directory of the report
 
     """
-    def __init__(self, test_details, report_destination='.', report_filename=None):
+
+    def __init__(self, test_details, report_destination='.',
+                 report_filename=None):
         self.reportDestination = report_destination
 
         if not os.path.isdir(report_destination):
-            raise InvalidDestination
+            raise errors.InvalidDestination
 
         if not report_filename:
             report_filename = "report-" + \
@@ -216,8 +228,11 @@ class YAMLReporter(OReporter):
 
         self._writeln("###########################################")
 
-        self._writeln("# OONI Probe Report for %s (%s)" % (self.testDetails['test_name'],
-                    self.testDetails['test_version']))
+        self._writeln("# OONI Probe Report for %s (%s)" % (
+            self.testDetails['test_name'],
+            self.testDetails['test_version'])
+        )
+
         self._writeln("# %s" % otime.prettyDateNow())
         self._writeln("###########################################")
 
@@ -226,13 +241,16 @@ class YAMLReporter(OReporter):
     def finish(self):
         self._stream.close()
 
+
 def collector_supported(collector_address):
     if collector_address.startswith('httpo') \
             and (not (config.tor_state or config.tor.socks_port)):
         return False
     return True
 
+
 class OONIBReporter(OReporter):
+
     def __init__(self, test_details, collector_address):
         self.collectorAddress = collector_address
         self.validateCollectorAddress()
@@ -265,7 +283,7 @@ class OONIBReporter(OReporter):
         url = self.collectorAddress + '/report'
 
         request = {'report_id': self.reportID,
-                'content': content}
+                   'content': content}
 
         log.debug("Updating report with id %s (%s)" % (self.reportID, url))
         request_json = json.dumps(request)
@@ -274,8 +292,8 @@ class OONIBReporter(OReporter):
         bodyProducer = StringProducer(json.dumps(request))
 
         try:
-            response = yield self.agent.request("PUT", url,
-                                bodyProducer=bodyProducer)
+            yield self.agent.request("PUT", url,
+                                     bodyProducer=bodyProducer)
         except:
             # XXX we must trap this in the runner and make sure to report the
             # data later.
@@ -298,10 +316,10 @@ class OONIBReporter(OReporter):
 
         if self.collectorAddress.startswith('httpo://'):
             self.collectorAddress = \
-                    self.collectorAddress.replace('httpo://', 'http://')
-            self.agent = SOCKS5Agent(reactor,
-                    proxyEndpoint=TCP4ClientEndpoint(reactor, '127.0.0.1',
-                        config.tor.socks_port))
+                self.collectorAddress.replace('httpo://', 'http://')
+            proxyEndpoint = TCP4ClientEndpoint(reactor, '127.0.0.1',
+                                               config.tor.socks_port)
+            self.agent = SOCKS5Agent(reactor, proxyEndpoint=proxyEndpoint)
 
         elif self.collectorAddress.startswith('https://'):
             # XXX add support for securely reporting to HTTPS collectors.
@@ -313,15 +331,16 @@ class OONIBReporter(OReporter):
         content += safe_dump(self.testDetails)
         content += '...\n'
 
-        request = {'software_name': self.testDetails['software_name'],
+        request = {
+            'software_name': self.testDetails['software_name'],
             'software_version': self.testDetails['software_version'],
             'probe_asn': self.testDetails['probe_asn'],
             'test_name': self.testDetails['test_name'],
             'test_version': self.testDetails['test_version'],
             'input_hashes': self.testDetails['input_hashes'],
             # XXX there is a bunch of redundancy in the arguments getting sent
-            # to the backend. This may need to get changed in the client and the
-            # backend.
+            # to the backend. This may need to get changed in the client and
+            # the backend.
             'content': content
         }
 
@@ -336,9 +355,11 @@ class OONIBReporter(OReporter):
 
         try:
             response = yield self.agent.request("POST", url,
-                                bodyProducer=bodyProducer)
+                                                bodyProducer=bodyProducer)
+
         except ConnectionRefusedError:
-            log.err("Connection to reporting backend failed (ConnectionRefusedError)")
+            log.err("Connection to reporting backend failed "
+                    "(ConnectionRefusedError)")
             raise errors.OONIBReportCreationError
 
         except errors.HostUnreachable:
@@ -366,8 +387,10 @@ class OONIBReporter(OReporter):
 
         if response.code == 406:
             # XXX make this more strict
-            log.err("The specified input or nettests cannot be submitted to this collector.")
-            log.msg("Try running a different test or try reporting to a different collector.")
+            log.err("The specified input or nettests cannot be submitted to "
+                    "this collector.")
+            log.msg("Try running a different test or try reporting to a "
+                    "different collector.")
             raise errors.OONIBReportCreationError
 
         self.reportID = parsed_response['report_id']
@@ -380,10 +403,9 @@ class OONIBReporter(OReporter):
         log.debug("Closing the report %s" % url)
         response = yield self.agent.request("POST", str(url))
 
-class ReportClosed(Exception):
-    pass
 
 class Report(object):
+
     def __init__(self, reporters, reportEntryManager):
         """
         This is an abstraction layer on top of all the configured reporters.
@@ -499,7 +521,8 @@ class Report(object):
             log.err("Failed to write to %s reporter, giving up..." % reporter)
             self.reporters.remove(reporter)
         else:
-            log.err("Failed to write to (already) removed reporter %s" % reporter)
+            log.err("Failed to write to (already) removed reporter %s" %
+                    reporter)
 
         # Don't forward the exception unless there are no more reporters
         if len(self.reporters) == 0:
@@ -516,7 +539,6 @@ class Report(object):
         """
         log.err("Failed to open %s reporter, giving up..." % reporter)
         log.err("Reporter %s failed, removing from report..." % reporter)
-        #log.exception(failure)
         if reporter in self.reporters:
             self.reporters.remove(reporter)
         # Don't forward the exception unless there are no more reporters





More information about the tor-commits mailing list