[tor-commits] [stem/master] Include fallback header metadata
atagar at torproject.org
atagar at torproject.org
Fri Jan 12 18:16:53 UTC 2018
commit cb883a0cb3d62fd16bad740041ed28516cc27e79
Author: Damian Johnson <atagar at torproject.org>
Date: Thu Jan 11 09:20:48 2018 -0800
Include fallback header metadata
Presently only included when parsing. Adding persistence next.
---
stem/descriptor/remote.py | 11 +++++++----
test/unit/descriptor/remote.py | 3 +++
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index 0a372dce..8f5e5cc3 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -948,8 +948,8 @@ class FallbackDirectory(Directory):
.. versionadded:: 1.5.0
.. versionchanged:: 1.7.0
- Added the nickname and has_extrainfo attributes, which are part of the
- `second version of the fallback directories
+ Added the nickname, has_extrainfo, and header attributes which are part of
+ the `second version of the fallback directories
<https://lists.torproject.org/pipermail/tor-dev/2017-December/012721.html>`_.
:var str nickname: relay nickname
@@ -957,14 +957,16 @@ class FallbackDirectory(Directory):
extrainfo descriptors, **False** otherwise.
:var str orport_v6: **(address, port)** tuple for the directory's IPv6
ORPort, or **None** if it doesn't have one
+ :var dict header: metadata about the fallback directory file this originated from
"""
- def __init__(self, address = None, or_port = None, dir_port = None, fingerprint = None, nickname = None, has_extrainfo = False, orport_v6 = None):
+ def __init__(self, address = None, or_port = None, dir_port = None, fingerprint = None, nickname = None, has_extrainfo = False, orport_v6 = None, header = None):
super(FallbackDirectory, self).__init__(address, or_port, dir_port, fingerprint)
self.nickname = nickname
self.has_extrainfo = has_extrainfo
self.orport_v6 = orport_v6
+ self.header = header if header else {}
@staticmethod
def from_cache():
@@ -1086,6 +1088,7 @@ class FallbackDirectory(Directory):
if section:
try:
fallback = FallbackDirectory.from_str('\n'.join(section))
+ fallback.header = header
results[fallback.fingerprint] = fallback
except ValueError as exc:
raise IOError(str(exc))
@@ -1177,7 +1180,7 @@ class FallbackDirectory(Directory):
return section_lines
def __hash__(self):
- return _hash_attr(self, 'address', 'or_port', 'dir_port', 'fingerprint', 'nickname', 'has_extrainfo', 'orport_v6', parent = Directory)
+ return _hash_attr(self, 'address', 'or_port', 'dir_port', 'fingerprint', 'nickname', 'has_extrainfo', 'orport_v6', 'header', parent = Directory)
def __eq__(self, other):
return hash(self) == hash(other) if isinstance(other, FallbackDirectory) else False
diff --git a/test/unit/descriptor/remote.py b/test/unit/descriptor/remote.py
index 7789ed21..cc0d51b1 100644
--- a/test/unit/descriptor/remote.py
+++ b/test/unit/descriptor/remote.py
@@ -209,6 +209,7 @@ class TestDescriptorDownloader(unittest.TestCase):
def test_fallback_directories_from_remote(self, urlopen_mock):
urlopen_mock.return_value = io.BytesIO(FALLBACK_DIR_CONTENT)
fallback_directories = stem.descriptor.remote.FallbackDirectory.from_remote()
+ header = {'type': 'fallback', 'version': '2.0.0', 'timestamp': '20170526090242'}
expected = {
'0756B7CD4DFC8182BE23143FAC0642F515182CEB': stem.descriptor.remote.FallbackDirectory(
@@ -219,6 +220,7 @@ class TestDescriptorDownloader(unittest.TestCase):
nickname = 'rueckgrat',
has_extrainfo = True,
orport_v6 = ('2a01:4f8:162:51e2::2', 9001),
+ header = header,
),
'01A9258A46E97FF8B2CAC7910577862C14F2C524': stem.descriptor.remote.FallbackDirectory(
address = '193.171.202.146',
@@ -228,6 +230,7 @@ class TestDescriptorDownloader(unittest.TestCase):
nickname = None,
has_extrainfo = False,
orport_v6 = None,
+ header = header,
),
}
More information about the tor-commits
mailing list