[tor-commits] [stem/master] Deprecate is_bandwidth_authority attribute
atagar at torproject.org
atagar at torproject.org
Tue May 8 20:20:09 UTC 2018
commit 6e40a303a96fccd2db3e0370efc3d7d4c54d82a4
Author: Damian Johnson <atagar at torproject.org>
Date: Mon May 7 10:57:39 2018 -0700
Deprecate is_bandwidth_authority attribute
This is a moving target that isn't tracked in tor, so I don't think we'll track
it in Stem either. Folks can download the votes to check who is/isn't a
bandwidth auth. This is how it's defined (providing bandwidth measurements in
votes), after all.
---
.../example/votes_by_bandwidth_authorities.py | 14 ++++----
stem/directory.py | 38 +++++++++-------------
test/integ/directory/authority.py | 22 +------------
test/unit/directory/authority.py | 1 -
4 files changed, 24 insertions(+), 51 deletions(-)
diff --git a/docs/_static/example/votes_by_bandwidth_authorities.py b/docs/_static/example/votes_by_bandwidth_authorities.py
index 9504bd94..840d50d8 100644
--- a/docs/_static/example/votes_by_bandwidth_authorities.py
+++ b/docs/_static/example/votes_by_bandwidth_authorities.py
@@ -7,11 +7,10 @@ queries = {}
downloader = stem.descriptor.remote.DescriptorDownloader()
for authority in stem.directory.Authority.from_cache().values():
- if authority.is_bandwidth_authority:
- queries[authority.nickname] = downloader.query(
- '/tor/status-vote/current/authority',
- endpoints = [(authority.address, authority.dir_port)],
- )
+ queries[authority.nickname] = downloader.query(
+ '/tor/status-vote/current/authority',
+ endpoints = [(authority.address, authority.dir_port)],
+ )
for authority_name, query in queries.items():
try:
@@ -25,6 +24,9 @@ for authority_name, query in queries.items():
else:
unmeasured += 1
- print(' %i measured entries and %i unmeasured' % (measured, unmeasured))
+ if measured == 0:
+ print(' %s is not a bandwidth authority' % authority_name)
+ else:
+ print(' %i measured entries and %i unmeasured' % (measured, unmeasured))
except Exception as exc:
print(" failed to get the vote (%s)" % exc)
diff --git a/stem/directory.py b/stem/directory.py
index 7b78696a..c70cbecf 100644
--- a/stem/directory.py
+++ b/stem/directory.py
@@ -2,7 +2,7 @@
# See LICENSE for licensing information
"""
-Directories with `tor descriptor information
+Directories that provide `relay descriptor information
<../tutorials/mirror_mirror_on_the_wall.html>`_. At a very high level tor works
as follows...
@@ -60,7 +60,7 @@ except ImportError:
GITWEB_AUTHORITY_URL = 'https://gitweb.torproject.org/tor.git/plain/src/or/auth_dirs.inc'
GITWEB_FALLBACK_URL = 'https://gitweb.torproject.org/tor.git/plain/src/or/fallback_dirs.inc'
-CACHE_PATH = os.path.join(os.path.dirname(__file__), 'cached_fallbacks.cfg')
+FALLBACK_CACHE_PATH = os.path.join(os.path.dirname(__file__), 'cached_fallbacks.cfg')
AUTHORITY_NAME = re.compile('"(\S+) orport=(\d+) .*"')
AUTHORITY_V3IDENT = re.compile('"v3ident=([\dA-F]{40}) "')
@@ -78,14 +78,14 @@ FALLBACK_IPV6 = re.compile('" ipv6=\[([\da-f:]+)\]:(\d+)"')
class Directory(object):
"""
- Relay we can contact for directory information.
+ Relay we can contact for descriptor information.
Our :func:`~stem.directory.Directory.from_cache` and
:func:`~stem.directory.Directory.from_remote` functions key off a
different identifier based on our subclass...
- * **Authority** keys off the nickname.
- * **Fallback** keys off fingerprints.
+ * :class:`~stem.directory.Authority` keys off the nickname.
+ * :class:`~stem.directory.Fallback` keys off fingerprints.
This is because authorities are highly static and canonically known by their
names, whereas fallbacks vary more and don't necessarily have a nickname to
@@ -112,8 +112,8 @@ class Directory(object):
def from_cache():
"""
Provides cached Tor directory information. This information is hardcoded
- into Tor and occasionally changes, so the information this provides might
- not necessarily match the latest version of tor.
+ into Tor and occasionally changes, so the information provided by this
+ method may not necessarily match the latest version of tor.
.. versionadded:: 1.5.0
@@ -169,14 +169,16 @@ class Authority(Directory):
"""
Tor directory authority, a special type of relay `hardcoded into tor
<https://gitweb.torproject.org/tor.git/plain/src/or/auth_dirs.inc>`_
- that enumerates the other relays within the network.
+ to enumerate the relays in the network.
.. versionchanged:: 1.3.0
Added the is_bandwidth_authority attribute.
+ .. deprecated:: 1.7.0
+ The is_bandwidth_authority attribute is deprecated and will be removed in
+ the future.
+
:var str v3ident: identity key fingerprint used to sign votes and consensus
- :var bool is_bandwidth_authority: **True** if this is a bandwidth authority,
- **False** otherwise
"""
def __init__(self, address = None, or_port = None, dir_port = None, fingerprint = None, nickname = None, v3ident = None, is_bandwidth_authority = False):
@@ -357,7 +359,7 @@ class Fallback(Directory):
self.header = header if header else OrderedDict()
@staticmethod
- def from_cache(path = CACHE_PATH):
+ def from_cache(path = FALLBACK_CACHE_PATH):
conf = stem.util.conf.Config()
conf.load(path)
headers = OrderedDict([(k.split('.', 1)[1], conf.get(k)) for k in conf.keys() if k.startswith('header.')])
@@ -375,7 +377,7 @@ class Fallback(Directory):
attr[attr_name] = conf.get(key)
if not attr[attr_name] and attr_name not in ('nickname', 'has_extrainfo', 'orport6_address', 'orport6_port'):
- raise IOError("'%s' is missing from %s" % (key, CACHE_PATH))
+ raise IOError("'%s' is missing from %s" % (key, FALLBACK_CACHE_PATH))
if not connection.is_valid_ipv4_address(attr['address']):
raise IOError("'%s.address' was an invalid IPv4 address (%s)" % (fingerprint, attr['address']))
@@ -540,7 +542,7 @@ class Fallback(Directory):
return section_lines
@staticmethod
- def _write(fallbacks, tor_commit, stem_commit, headers, path = CACHE_PATH):
+ def _write(fallbacks, tor_commit, stem_commit, headers, path = FALLBACK_CACHE_PATH):
"""
Persists fallback directories to a location in a way that can be read by
from_cache().
@@ -635,7 +637,6 @@ DIRECTORY_AUTHORITIES = {
address = '128.31.0.39',
or_port = 9101,
dir_port = 9131,
- is_bandwidth_authority = True,
fingerprint = '9695DFC35FFEB861329B9F1AB04C46397020CE31',
v3ident = 'D586D18309DED4CD6D57C18FDB97EFA96D330566',
),
@@ -644,7 +645,6 @@ DIRECTORY_AUTHORITIES = {
address = '86.59.21.38',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = False,
fingerprint = '847B1F850344D7876491A54892F904934E4EB85D',
v3ident = '14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4',
),
@@ -653,7 +653,6 @@ DIRECTORY_AUTHORITIES = {
address = '194.109.206.212',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = False,
fingerprint = '7EA6EAD6FD83083C538F44038BBFA077587DD755',
v3ident = 'E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58',
),
@@ -662,7 +661,6 @@ DIRECTORY_AUTHORITIES = {
address = '131.188.40.189',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = True,
fingerprint = 'F2044413DAC2E02E3D6BCF4735A19BCA1DE97281',
v3ident = 'ED03BB616EB2F60BEC80151114BB25CEF515B226',
),
@@ -671,7 +669,6 @@ DIRECTORY_AUTHORITIES = {
address = '193.23.244.244',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = False,
fingerprint = '7BE683E65D48141321C5ED92F075C55364AC7123',
v3ident = '0232AF901C31A04EE9848595AF9BB7620D4C5B2E',
),
@@ -680,7 +677,6 @@ DIRECTORY_AUTHORITIES = {
address = '171.25.193.9',
or_port = 80,
dir_port = 443,
- is_bandwidth_authority = True,
fingerprint = 'BD6A829255CB08E66FBE7D3748363586E46B3810',
v3ident = '49015F787433103580E3B66A1707A00E60F2D15B',
),
@@ -689,7 +685,6 @@ DIRECTORY_AUTHORITIES = {
address = '154.35.175.225',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = True,
fingerprint = 'CF6D0AAFB385BE71B8E111FC5CFF4B47923733BC',
v3ident = 'EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97',
),
@@ -698,7 +693,6 @@ DIRECTORY_AUTHORITIES = {
address = '199.58.81.140',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = False,
fingerprint = '74A910646BCEEFBCD2E874FC1DC997430F968145',
v3ident = '23D15D965BC35114467363C165C4F724B64B4F66',
),
@@ -707,7 +701,6 @@ DIRECTORY_AUTHORITIES = {
address = '204.13.164.118',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = True,
fingerprint = '24E2F139121D4394C54B5BCC368B3B411857C413',
v3ident = '27102BC123E7AF1D4741AE047E160C91ADC76B21',
),
@@ -716,7 +709,6 @@ DIRECTORY_AUTHORITIES = {
address = '37.218.247.217',
or_port = 443,
dir_port = 80,
- is_bandwidth_authority = False,
fingerprint = '1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1',
v3ident = None, # does not vote in the consensus
),
diff --git a/test/integ/directory/authority.py b/test/integ/directory/authority.py
index fc5eb13e..c188fae3 100644
--- a/test/integ/directory/authority.py
+++ b/test/integ/directory/authority.py
@@ -15,24 +15,4 @@ class TestAuthority(unittest.TestCase):
Check if the cached authorities we bundle are up to date.
"""
- cached_authorities = stem.directory.Authority.from_cache()
- latest_authorities = stem.directory.Authority.from_remote()
-
- for nickname in cached_authorities:
- if nickname not in latest_authorities:
- self.fail('%s is no longer a directory authority in tor' % nickname)
-
- for nickname in latest_authorities:
- if nickname not in cached_authorities:
- self.fail('%s is now a directory authority in tor' % nickname)
-
- # tor doesn't note if an autority is a bwauth or not, so we need to exclude
- # that from our comparison
-
- for attr in ('address', 'or_port', 'dir_port', 'fingerprint', 'nickname', 'v3ident'):
- for auth in cached_authorities.values():
- cached_value = getattr(auth, attr)
- latest_value = getattr(latest_authorities[auth.nickname], attr)
-
- if cached_value != latest_value:
- self.fail('The %s of the %s authority is %s in tor but %s in stem' % (attr, auth.nickname, latest_value, cached_value))
+ self.assertEqual(stem.directory.Authority.from_cache(), stem.directory.Authority.from_remote())
diff --git a/test/unit/directory/authority.py b/test/unit/directory/authority.py
index dcee4916..431cbf52 100644
--- a/test/unit/directory/authority.py
+++ b/test/unit/directory/authority.py
@@ -36,7 +36,6 @@ class TestAuthority(unittest.TestCase):
'fingerprint': '0756B7CD4DFC8182BE23143FAC0642F515182CEB',
'nickname': 'rueckgrat',
'v3ident': '23D15D965BC35114467363C165C4F724B64B4F66',
- 'is_bandwidth_authority': False,
}
self.assertEqual(stem.directory.Authority(**authority_attr), stem.directory.Authority(**authority_attr))
More information about the tor-commits
mailing list