[stem/master] Allowing for extra args on lines with multiple

commit e0f8bfcacca963e1cbc7811dd1f9e6e7e104c7f8 Author: Damian Johnson <atagar@torproject.org> Date: Sat Mar 24 18:50:20 2012 -0700 Allowing for extra args on lines with multiple Well, crap. I've been developing against the version 2 spec on the assumption that was both the majority use case and what my test instance was running. However, that's evidently pretty ancient and I've been running against version 3 all along. First change I'm spotting in the spec is that lines with multiple arguments should ignore extras so doing that. --- stem/descriptor/__init__.py | 2 +- stem/descriptor/server_descriptor.py | 24 ++++++++++++------------ test/integ/descriptor/server_descriptor.py | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py index 215864f..325ac4b 100644 --- a/stem/descriptor/__init__.py +++ b/stem/descriptor/__init__.py @@ -41,7 +41,7 @@ def parse_file(path, descriptor_file): descriptor_file.seek(0) if filename == "cached-descriptors" or first_line.startswith("router "): - for desc in stem.descriptor.server_descriptor.parse_file_v2(descriptor_file): + for desc in stem.descriptor.server_descriptor.parse_file_v3(descriptor_file): desc._set_path(path) yield desc else: diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py index 7715a96..c301840 100644 --- a/stem/descriptor/server_descriptor.py +++ b/stem/descriptor/server_descriptor.py @@ -7,8 +7,8 @@ etc). This information is provided from a few sources... - the 'cached-descriptors' file in tor's data directory - tor metrics, at https://metrics.torproject.org/data.html -parse_file_v2 - Iterates over the server descriptors in a file. -ServerDescriptorV2 - Tor server descriptor, version 2. +parse_file_v3 - Iterates over the server descriptors in a file. +ServerDescriptorV3 - Tor server descriptor, version 3. |- get_unrecognized_lines - lines with unrecognized content |- get_annotations - dictionary of content prior to the descriptor entry |- get_annotation_lines - lines that provided the annotations @@ -55,9 +55,9 @@ SINGLE_FIELDS = ( "family", ) -def parse_file_v2(descriptor_file, validate = True): +def parse_file_v3(descriptor_file, validate = True): """ - Iterates over the version 2 server descriptors in a file. + Iterates over the version 3 server descriptors in a file. Arguments: descriptor_file (file) - file with descriptor content @@ -65,7 +65,7 @@ def parse_file_v2(descriptor_file, validate = True): True, skips these checks otherwise Returns: - iterator for ServerDescriptorV2 instances in the file + iterator for ServerDescriptorV3 instances in the file Raises: ValueError if the contents is malformed and validate is True @@ -109,7 +109,7 @@ def parse_file_v2(descriptor_file, validate = True): annotations = map(str.strip, annotations) descriptor_text = "".join(descriptor_content) - descriptor = ServerDescriptorV2(descriptor_text, validate, annotations) + descriptor = ServerDescriptorV3(descriptor_text, validate, annotations) yield descriptor else: break # done parsing descriptors @@ -185,10 +185,10 @@ def _get_psudo_pgp_block(remaining_contents): else: return (None, None) -class ServerDescriptorV2(stem.descriptor.Descriptor): +class ServerDescriptorV3(stem.descriptor.Descriptor): """ - Version 2 server descriptor, as specified in... - https://gitweb.torproject.org/torspec.git/blob/HEAD:/dir-spec-v2.txt + Version 3 server descriptor, as specified in... + https://gitweb.torproject.org/torspec.git/blob/HEAD:/dir-spec.txt Attributes: nickname (str) - relay's nickname (*) @@ -221,7 +221,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor): def __init__(self, contents, validate = True, annotations = None): """ - Version 2 server descriptor constructor, created from an individual relay's + Version 3 server descriptor constructor, created from an individual relay's descriptor content (as provided by "GETINFO desc/*", cached descriptors, and metrics). @@ -350,7 +350,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor): # "router" nickname address ORPort SocksPort DirPort router_comp = value.split() - if len(router_comp) != 5: + if len(router_comp) < 5: if not validate: continue raise ValueError("Router line must have five values: %s" % line) @@ -377,7 +377,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor): # "bandwidth" bandwidth-avg bandwidth-burst bandwidth-observed bandwidth_comp = value.split() - if len(bandwidth_comp) != 3: + if len(bandwidth_comp) < 3: if not validate: continue raise ValueError("Bandwidth line must have three values: %s" % line) diff --git a/test/integ/descriptor/server_descriptor.py b/test/integ/descriptor/server_descriptor.py index 34b77a4..5a070a2 100644 --- a/test/integ/descriptor/server_descriptor.py +++ b/test/integ/descriptor/server_descriptor.py @@ -55,7 +55,7 @@ dskLSPz8beUW7bzwDjR6EVNGpyoZde83Ejvau+5F2c6cGnlu91fiZN3suE88iE6e Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4= -----END SIGNATURE-----""" - desc = stem.descriptor.server_descriptor.ServerDescriptorV2(descriptor_contents) + desc = stem.descriptor.server_descriptor.ServerDescriptorV3(descriptor_contents) self.assertEquals("caerSidi", desc.nickname) self.assertEquals("A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB", desc.fingerprint) self.assertEquals("71.35.133.197", desc.address)
participants (1)
-
atagar@torproject.org