[tor-commits] [bridgedb/master] Add generic Dist.Distributor class for common functionality.
isis at torproject.org
isis at torproject.org
Sun Jan 12 06:06:35 UTC 2014
commit d8d06359681f3c8e613c4a108defff5ba8552491
Author: Isis Lovecruft <isis at torproject.org>
Date: Sat Jan 11 16:40:18 2014 +0000
Add generic Dist.Distributor class for common functionality.
This class currently serves very little purpose because I am still
nervous about making major changes to the IPBasedDistributor and
EmailBasedDistributor classes. However, I did add functionality for
naming a Distributor's hashrings after the distributor's class, so that
which hashring a bridge is being added to is much clearer in the logs.
* ADD bridgedb.Dist.Distributor class.
* CHANGE IPBasedDistributor and EmailBasedDistributor to inherit from
Distributor.
* ADD functionality for naming hashrings after their distributor.
---
lib/bridgedb/Dist.py | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/lib/bridgedb/Dist.py b/lib/bridgedb/Dist.py
index 163916d..0b9bff2 100644
--- a/lib/bridgedb/Dist.py
+++ b/lib/bridgedb/Dist.py
@@ -48,7 +48,38 @@ def getNumBridgesPerAnswer(ring, max_bridges_per_answer=3):
return n_bridges_per_answer
-class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
+class Distributor(bridgedb.Bridges.BridgeHolder):
+ """Distributes bridges to clients."""
+
+ def __init__(self):
+ super(Distributor, self).__init__()
+
+ def setDistributorName(self, name):
+ """Set a **name** for identifying this distributor.
+
+ This is used to identify the distributor in the logs; the **name**
+ doesn't necessarily need to be unique. The hashrings created for this
+ distributor will be named after this distributor's name in
+ :meth:`propopulateRings`, and any sub hashrings of each of those
+ hashrings will also carry that name.
+
+ >>> from bridgedb import Dist
+ >>> ipDist = Dist.IPBasedDistributor(Dist.uniformMap,
+ ... 5,
+ ... 'fake-hmac-key')
+ >>> ipDist.setDistributorName('HTTPS Distributor')
+ >>> ipDist.prepopulateRings()
+ >>> hashrings = ipDist.splitter.filterRings
+ >>> for (ringname, (filterFn, subring)) in hashrings.items():
+ ... print subring.name
+
+ :param str name: A name for this distributor.
+ """
+ self.name = name
+ self.splitter.distributorName = name
+
+
+class IPBasedDistributor(Distributor):
"""A Distributor that hands out bridges based on the IP address of an
incoming request and the current time period.
@@ -123,6 +154,8 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
logging.debug("Added splitter %s to IPBasedDistributor."
% self.splitter.__class__)
+ self.setDistributorName(self.__class__.__name__)
+
def prepopulateRings(self):
# populate all rings (for dumping assignments and testing)
for filterFn in [None, filterBridgesByIP4, filterBridgesByIP6]:
@@ -141,6 +174,7 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
% n)
n += 1
ring = bridgedb.Bridges.BridgeRing(key1, self.answerParameters)
+ ring.setName('{0} Ring'.format(self.name))
self.splitter.addRing(ring,
ruleset,
filterBridgesByRules(bridgeFilterRules),
@@ -372,7 +406,7 @@ def normalizeEmail(addr, domainmap, domainrules):
return "%s@%s"%(localpart, domain)
-class EmailBasedDistributor(bridgedb.Bridges.BridgeHolder):
+class EmailBasedDistributor(Distributor):
"""Object that hands out bridges based on the email address of an incoming
request and the current time period.
"""
More information about the tor-commits
mailing list