[tor-commits] [stem/master] Add FallbackDirectory.from_str() function
atagar at torproject.org
atagar at torproject.org
Fri Jan 12 18:16:53 UTC 2018
commit 2a7a13b1140e87f2ea44a93c3e207df98320faa1
Author: Damian Johnson <atagar at torproject.org>
Date: Mon Jan 8 09:01:36 2018 -0800
Add FallbackDirectory.from_str() function
---
stem/descriptor/remote.py | 56 ++++++++++++++++++++++++++++++-----------------
1 file changed, 36 insertions(+), 20 deletions(-)
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index 1f002e27..34402499 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -1081,31 +1081,47 @@ class FallbackDirectory(Directory):
results = {}
while lines:
- # Example of an entry...
- #
- # "5.9.110.236:9030 orport=9001 id=0756B7CD4DFC8182BE23143FAC0642F515182CEB"
- # " ipv6=[2a01:4f8:162:51e2::2]:9001"
- # /* nickname=rueckgrat */
- # /* extrainfo=1 */
-
section = FallbackDirectory._pop_section(lines)
- if not section:
- continue
+ if section:
+ fallback = FallbackDirectory.from_str('\n'.join(section))
+ results[fallback.fingerprint] = fallback
- address, or_port, dir_port, fingerprint = FallbackDirectory._parse_addr(section)
+ return results
- results[fingerprint] = FallbackDirectory(
- address = address,
- or_port = or_port,
- dir_port = dir_port,
- fingerprint = fingerprint,
- nickname = FallbackDirectory._parse_nickname(section, fingerprint),
- has_extrainfo = FallbackDirectory._parse_has_extrainfo(section),
- orport_v6 = FallbackDirectory._parse_ipv6(section, fingerprint),
- )
+ @staticmethod
+ def from_str(content):
+ """
+ Parses a fallback from its textual representation. For example...
- return results
+ ::
+
+ "5.9.110.236:9030 orport=9001 id=0756B7CD4DFC8182BE23143FAC0642F515182CEB"
+ " ipv6=[2a01:4f8:162:51e2::2]:9001"
+ /* nickname=rueckgrat */
+ /* extrainfo=1 */
+
+ .. versionadded:: 1.7.0
+
+ :param str content: text to parse
+
+ :returns: :class:`~stem.descriptor.remote.FallbackDirectory` in the text
+
+ :raises: **IOError** if content is malformed
+ """
+
+ lines = content.splitlines()
+ address, or_port, dir_port, fingerprint = FallbackDirectory._parse_addr(lines)
+
+ return FallbackDirectory(
+ address = address,
+ or_port = or_port,
+ dir_port = dir_port,
+ fingerprint = fingerprint,
+ nickname = FallbackDirectory._parse_nickname(lines, fingerprint),
+ has_extrainfo = FallbackDirectory._parse_has_extrainfo(lines),
+ orport_v6 = FallbackDirectory._parse_ipv6(lines, fingerprint),
+ )
@staticmethod
def _pop_section(lines):
More information about the tor-commits
mailing list