[tor-commits] [bridgedb/develop] Define IBridge interface for sufficiently "bridge-like" things.

isis at torproject.org isis at torproject.org
Thu Jun 25 07:10:55 UTC 2015


commit 910941c712f20816c70e06e64add5e8530218c1c
Author: Isis Lovecruft <isis at torproject.org>
Date:   Tue Jun 9 00:16:37 2015 +0000

    Define IBridge interface for sufficiently "bridge-like" things.
    
     * ADD bridgedb.bridges.IBridge interface specification.
     * CHANGE the following classes to declare that they implement the IBridge
       interface:
           - bridgedb.bridges.BridgeAddressBase
           - bridgedb.bridges.PluggableTransport
           - bridgedb.bridges.BridgeBase
           - bridgedb.bridges.BridgeBackwardsCompatibility
           - bridgedb.bridges.Bridge
    
    Conflicts:
    	lib/bridgedb/bridges.py
---
 lib/bridgedb/bridges.py |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/lib/bridgedb/bridges.py b/lib/bridgedb/bridges.py
index 5093bef..747863a 100644
--- a/lib/bridgedb/bridges.py
+++ b/lib/bridgedb/bridges.py
@@ -23,6 +23,10 @@ from Crypto.Util import asn1
 from Crypto.Util.number import bytes_to_long
 from Crypto.Util.number import long_to_bytes
 
+from zope.interface import implementer
+from zope.interface import Attribute
+from zope.interface import Interface
+
 import bridgedb.Storage
 
 from bridgedb import geo
@@ -78,6 +82,18 @@ class InvalidExtraInfoSignature(MalformedBridgeInfo):
     """Raised if the signature on an ``@type bridge-extrainfo`` is invalid."""
 
 
+class IBridge(Interface):
+    """I am a (mostly) stub interface whose primary purpose is merely to allow
+    other classes to signify whether or not they can be treated like a
+    :class:`Bridge`.
+    """
+    fingerprint = Attribute(
+        ("The lowercased, hexadecimal-encoded, hash digest of this Bridge's "
+         "public identity key."))
+    address = Attribute("This Bridge's primary public IP address.")
+    port = Attribute("The port which this Bridge is listening on.")
+
+
 class Flags(object):
     """All the flags which a :class:`Bridge` may have."""
 
@@ -122,6 +138,7 @@ class Flags(object):
         self.valid = 'Valid' in flags
 
 
+ at implementer(IBridge)
 class BridgeAddressBase(object):
     """A base class for describing one of a :class:`Bridge`'s or a
     :class:`PluggableTransport`'s location, including its identity key
@@ -274,6 +291,8 @@ class BridgeAddressBase(object):
         self._port = None
 
 
+
+ at implementer(IBridge)
 class PluggableTransport(BridgeAddressBase):
     """A single instance of a Pluggable Transport (PT) offered by a
     :class:`Bridge`.
@@ -589,6 +608,7 @@ class PluggableTransport(BridgeAddressBase):
         self._runChecks()
 
 
+ at implementer(IBridge)
 class BridgeBase(BridgeAddressBase):
     """The base class for all bridge implementations."""
 
@@ -652,6 +672,7 @@ class BridgeBase(BridgeAddressBase):
         del self.port
 
 
+ at implementer(IBridge)
 class BridgeBackwardsCompatibility(BridgeBase):
     """Backwards compatibility methods for the old Bridge class."""
 
@@ -841,6 +862,7 @@ class BridgeBackwardsCompatibility(BridgeBase):
             return db.getBridgeHistory(self.fingerprint).weightedUptime
 
 
+ at implementer(IBridge)
 class Bridge(BridgeBackwardsCompatibility):
     """A single bridge, and all the information we have for it.
 





More information about the tor-commits mailing list