commit 8d9ebc7b0e807618ae79951ea850396b4788b3d5 Author: Damian Johnson atagar@torproject.org Date: Fri Jan 10 13:07:22 2020 -0800
Replace usage of xrange
Python 2.x had two functios to get a numeric range...
* range() returned a list of numbers * xrange() returned a generator of numbers
The later was slightly more efficient for loops, so as a rule of thumb 99% of the time you wanted xrange().
Python 3.x only has a single range() function which uses xrange()'s behavior. If you want the old range()'s behavior (ie. to get a list) you do...
my_list = list(range(from, to))
This fixes the following stacktraces...
Traceback (most recent call last): File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_schedule.py", line 188, in test_ScheduledInterval_getInterval_minute self._check_getInterval(15, 'minutes', 15*60) File "/home/atagar/Desktop/tor/bridgedb/bridgedb/test/test_schedule.py", line 171, in _check_getInterval [secs.append(0) for _ in xrange(6-len(secs))] builtins.NameError: name 'xrange' is not defined
Test results change as follows:
before: FAILED (skips=1, failures=3, errors=61, successes=242) after: FAILED (skips=1, failures=6, errors=54, successes=246) --- bridgedb/Bridges.py | 2 +- bridgedb/test/email_helpers.py | 4 ++-- bridgedb/test/legacy_Tests.py | 30 +++++++++++++++--------------- bridgedb/test/test_https_distributor.py | 8 ++++---- bridgedb/test/test_parse_addr.py | 4 ++-- bridgedb/test/test_schedule.py | 2 +- bridgedb/test/util.py | 8 ++++---- 7 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/bridgedb/Bridges.py b/bridgedb/Bridges.py index 3c94fdf..f80f4cd 100644 --- a/bridgedb/Bridges.py +++ b/bridgedb/Bridges.py @@ -405,7 +405,7 @@ class FixedBridgeSplitter(object): description is ``"IPv6 obfs2 bridges"`` the line would read: ``"IPv6 obfs2 bridges ring=3"``. """ - for index, ring in zip(xrange(len(self.rings)), self.rings): + for index, ring in zip(range(len(self.rings)), self.rings): ring.dumpAssignments(filename, "%s ring=%s" % (description, index))
diff --git a/bridgedb/test/email_helpers.py b/bridgedb/test/email_helpers.py index 645fc93..e149dd5 100644 --- a/bridgedb/test/email_helpers.py +++ b/bridgedb/test/email_helpers.py @@ -138,7 +138,7 @@ class DummyEmailDistributor(object): self.answerParameters = answerParameters
def getBridges(self, bridgeRequest, epoch): - return [util.DummyBridge() for _ in xrange(self._bridgesPerResponseMin)] + return [util.DummyBridge() for _ in range(self._bridgesPerResponseMin)]
def cleanDatabase(self): pass @@ -167,7 +167,7 @@ class DummyEmailDistributorWithState(DummyEmailDistributor): self.alreadySeen[bridgeRequest.client] += 1
if self.alreadySeen[bridgeRequest.client] <= 1: - return [util.DummyBridge() for _ in xrange(self._bridgesPerResponseMin)] + return [util.DummyBridge() for _ in range(self._bridgesPerResponseMin)] elif self.alreadySeen[bridgeRequest.client] == 2: raise TooSoonEmail( "Seen client '%s' %d times" diff --git a/bridgedb/test/legacy_Tests.py b/bridgedb/test/legacy_Tests.py index 00e1d12..37bce70 100644 --- a/bridgedb/test/legacy_Tests.py +++ b/bridgedb/test/legacy_Tests.py @@ -61,17 +61,17 @@ def fakeBridge(orport=8080, running=True, stable=True, or_addresses=False, transports=False): ip = randomIPv4() nn = "bridge-%s" % int(ip) - fp = "".join([random.choice("0123456789ABCDEF") for _ in xrange(40)]) + fp = "".join([random.choice("0123456789ABCDEF") for _ in range(40)]) b = bridgedb.Bridges.Bridge(nn,ip,orport,fingerprint=fp) b.setStatus(running, stable)
oraddrs = [] if or_addresses: - for i in xrange(8): + for i in range(8): b.orAddresses.append((randomValidIPv6(), randomPort(), 6))
if transports: - for i in xrange(0,8): + for i in range(0,8): b.transports.append(bridgedb.Bridges.PluggableTransport(b, random.choice(["obfs", "obfs2", "pt1"]), randomIP(), randomPort())) @@ -81,17 +81,17 @@ def fakeBridge6(orport=8080, running=True, stable=True, or_addresses=False, transports=False): ip = randomIPv6() nn = "bridge-%s" % int(ip) - fp = "".join([random.choice("0123456789ABCDEF") for _ in xrange(40)]) + fp = "".join([random.choice("0123456789ABCDEF") for _ in range(40)]) b = bridgedb.Bridges.Bridge(nn,ip,orport,fingerprint=fp) b.setStatus(running, stable)
oraddrs = [] if or_addresses: - for i in xrange(8): + for i in range(8): b.orAddresses.append((randomValidIPv6(), randomPort(), 6))
if transports: - for i in xrange(0,8): + for i in range(0,8): b.transports.append(bridgedb.Bridges.PluggableTransport(b, random.choice(["obfs", "obfs2", "pt1"]), randomIP(), randomPort())) @@ -226,7 +226,7 @@ class BridgeStabilityTests(unittest.TestCase): db = self.db b = random.choice([fakeBridge,fakeBridge6])() def timestampSeries(x): - for i in xrange(61): + for i in range(61): yield (i+1)*60*30 + x # 30 minute intervals now = time.time() time_on_address = long(60*30*60) # 30 hours @@ -244,17 +244,17 @@ class BridgeStabilityTests(unittest.TestCase):
def testLastSeenWithDifferentAddressAndPort(self): db = self.db - for i in xrange(10): + for i in range(10): num_desc = 30 time_start = time.time() - ts = [ 60*30*(i+1) + time_start for i in xrange(num_desc) ] + ts = [ 60*30*(i+1) + time_start for i in range(num_desc) ] b = random.choice([fakeBridge(), fakeBridge6()]) [ bridgedb.Stability.addOrUpdateBridgeHistory(b, t) for t in ts ]
# change the port b.orport = b.orport+1 last_seen = ts[-1] - ts = [ 60*30*(i+1) + last_seen for i in xrange(num_desc) ] + ts = [ 60*30*(i+1) + last_seen for i in range(num_desc) ] [ bridgedb.Stability.addOrUpdateBridgeHistory(b, t) for t in ts ] b = db.getBridgeHistory(b.fingerprint) assert b.tosa == ts[-1] - last_seen @@ -267,11 +267,11 @@ class BridgeStabilityTests(unittest.TestCase): num_bridges = 10 num_desc = 4*48 # 30m intervals, 48 per day time_start = time.time() - bridges = [ fakeBridge() for x in xrange(num_bridges) ] + bridges = [ fakeBridge() for x in range(num_bridges) ] t = time.time() - ts = [ (i+1)*60*30+t for i in xrange(num_bridges) ] + ts = [ (i+1)*60*30+t for i in range(num_bridges) ] for b in bridges: - time_series = [ 60*30*(i+1) + time_start for i in xrange(num_desc) ] + time_series = [ 60*30*(i+1) + time_start for i in range(num_desc) ] [ bridgedb.Stability.addOrUpdateBridgeHistory(b, i) for i in time_series ] assert None not in bridges # +1 to avoid rounding errors @@ -288,7 +288,7 @@ class BridgeStabilityTests(unittest.TestCase): num_bridges = 20 time_start = time.time() bridges = [random.choice([fakeBridge, fakeBridge6])() - for i in xrange(num_bridges)] + for i in range(num_bridges)]
# run some of the bridges for the full time series running = bridges[:num_bridges/2] @@ -303,7 +303,7 @@ class BridgeStabilityTests(unittest.TestCase): # figure out how many intervals it will take for weightedUptime to # decay to < 1 num_desc = int(30*log(1/float(num_successful*30*60))/(-0.05)) - timeseries = [ 60*30*(i+1) + time_start for i in xrange(num_desc) ] + timeseries = [ 60*30*(i+1) + time_start for i in range(num_desc) ]
for i in timeseries: for b in running: diff --git a/bridgedb/test/test_https_distributor.py b/bridgedb/test/test_https_distributor.py index c25c598..dd56785 100644 --- a/bridgedb/test/test_https_distributor.py +++ b/bridgedb/test/test_https_distributor.py @@ -261,7 +261,7 @@ class HTTPSDistributorTests(unittest.TestCase):
[dist.insert(bridge) for bridge in bridges]
- for i in xrange(5): + for i in range(5): bridgeRequest1 = self.randomClientRequestForNotBlockedIn('cn') bridgeRequest1.transports.append('obfs2') bridgeRequest1.generateFilters() @@ -335,7 +335,7 @@ class HTTPSDistributorTests(unittest.TestCase): [dist.insert(bridge) for bridge in bridges] [dist.insert(bridge) for bridge in self.bridges[:250]]
- for _ in xrange(32): + for _ in range(32): bridgeRequest = self.randomClientRequest() answer = dist.getBridges(bridgeRequest, 1) count = 0 @@ -399,7 +399,7 @@ class HTTPSDistributorTests(unittest.TestCase): dist = distributor.HTTPSDistributor(3, self.key) [dist.insert(bridge) for bridge in self.bridges[:250]]
- for i in xrange(500): + for i in range(500): bridgeRequest = self.randomClientRequest() bridgeRequest.withIPv6() bridgeRequest.generateFilters() @@ -421,7 +421,7 @@ class HTTPSDistributorTests(unittest.TestCase): dist = distributor.HTTPSDistributor(1, self.key) [dist.insert(bridge) for bridge in self.bridges[:250]]
- for i in xrange(500): + for i in range(500): bridgeRequest = self.randomClientRequest() bridgeRequest.generateFilters()
diff --git a/bridgedb/test/test_parse_addr.py b/bridgedb/test/test_parse_addr.py index 81e4508..124ea0f 100644 --- a/bridgedb/test/test_parse_addr.py +++ b/bridgedb/test/test_parse_addr.py @@ -669,7 +669,7 @@ class PortListTest(unittest.TestCase): ports. """ tooMany = addr.PortList.PORTSPEC_LEN + 1 - ports = [self.getRandomPort() for x in xrange(tooMany)] + ports = [self.getRandomPort() for x in range(tooMany)] log.msg("Testing addr.PortList(%s))" % ', '.join([type('')(port) for port in ports])) portList = addr.PortList(*ports) @@ -699,7 +699,7 @@ class PortListTest(unittest.TestCase): ports = (443, 9001, 9030) portList = addr.PortList(*ports) iterator = iter(portList) - for x in xrange(len(ports)): + for x in range(len(ports)): self.assertIn(iterator.next(), portList)
def test_str(self): diff --git a/bridgedb/test/test_schedule.py b/bridgedb/test/test_schedule.py index 1bcec07..c95d6f9 100644 --- a/bridgedb/test/test_schedule.py +++ b/bridgedb/test/test_schedule.py @@ -168,7 +168,7 @@ class ScheduledIntervalTests(unittest.TestCase): ts = sched.getInterval(now) self.assertIsInstance(ts, str) secs = [int(x) for x in ts.replace('-', ' ').replace(':', ' ').split()] - [secs.append(0) for _ in xrange(6-len(secs))] + [secs.append(0) for _ in range(6-len(secs))] secs = schedule.calendar.timegm(secs) self.assertApproximates(now, secs, variance)
diff --git a/bridgedb/test/util.py b/bridgedb/test/util.py index 9fc16b8..43219d5 100644 --- a/bridgedb/test/util.py +++ b/bridgedb/test/util.py @@ -135,7 +135,7 @@ def randomIPv6(): return ipaddr.IPv6Address(random.getrandbits(128))
def randomIP(): - if random.choice(xrange(2)): + if random.choice(range(2)): return randomIPv4() return randomIPv6()
@@ -146,7 +146,7 @@ def randomIPv6String(): return bracketIPv6(randomIPv6().compressed)
def randomIPString(): - if random.choice(xrange(2)): + if random.choice(range(2)): return randomIPv4String() return randomIPv6String()
@@ -194,7 +194,7 @@ def generateFakeBridges(n=500): # Real tor currently only supports one extra ORAddress, and it can # only be IPv6. addrs = [(randomValidIPv6(), randomHighPort(), 6)] - fpr = "".join(random.choice('abcdef0123456789') for _ in xrange(40)) + fpr = "".join(random.choice('abcdef0123456789') for _ in range(40))
supported = ["obfs2", "obfs3", "fte"] transports = [] @@ -282,7 +282,7 @@ class DummyBridge(object): self.address = ipaddr.IPv4Address(ipv4) self.orPort = randomPort() self.fingerprint = "".join(random.choice('abcdef0123456789') - for _ in xrange(40)) + for _ in range(40)) self.orAddresses = [(randomIPv6(), randomPort(), 6)]
def getBridgeLine(self, bridgeRequest, includeFingerprint=True):