[tor-commits] [stem/master] Fixing /info for python3
atagar at torproject.org
atagar at torproject.org
Tue Jun 3 15:24:28 UTC 2014
commit 4e458ee979569f2be2cf1cacd1f653b5bb8a9667
Author: Damian Johnson <atagar at torproject.org>
Date: Tue Jun 3 08:10:22 2014 -0700
Fixing /info for python3
On irc zoltan reported that the /info command balks under python3...
>>> /info moria1
Traceback (most recent call last):
File "/usr/local/bin/tor-prompt", line 8, in <module>
stem.interpreter.main()
File "/usr/local/lib/python3.2/dist-packages/stem/interpreter/__init__.py", line 116, in main
response = interpreter.run_command(user_input)
File "/usr/local/lib/python3.2/dist-packages/stem/util/conf.py", line 276, in wrapped
return func(*args, config = config, **kwargs)
File "/usr/local/lib/python3.2/dist-packages/stem/interpreter/commands.py", line 317, in run_command
output = self.do_info(arg)
File "/usr/local/lib/python3.2/dist-packages/stem/interpreter/commands.py", line 184, in do_info
for desc in server_desc_query:
File "/usr/local/lib/python3.2/dist-packages/stem/descriptor/remote.py", line 328, in __iter__
for desc in self._run(True):
File "/usr/local/lib/python3.2/dist-packages/stem/descriptor/remote.py", line 317, in _run
for desc in results:
File "/usr/local/lib/python3.2/dist-packages/stem/descriptor/__init__.py", line 211, in parse_file
for desc in file_parser(descriptor_file):
File "/usr/local/lib/python3.2/dist-packages/stem/descriptor/__init__.py", line 261, in _parse_metrics_file
for desc in stem.descriptor.server_descriptor._parse_file(descriptor_file, is_bridge = False, validate = validate, **kwargs):
File "/usr/local/lib/python3.2/dist-packages/stem/descriptor/server_descriptor.py", line 146, in _parse_file
if descriptor_content[0].startswith('@type'):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str
https://trac.torproject.org/projects/tor/ticket/12185
There's a couple issues here. First is a last minute change I added to strip
@type annotations. It ran into the normal bytes/unicode python3 gotcha
resulting in the stacktrace above. The other is that our contact field is
bytes, so it needs to be converted to unicode before mingling with the other
lines.
---
stem/descriptor/extrainfo_descriptor.py | 2 +-
stem/descriptor/microdescriptor.py | 2 +-
stem/descriptor/networkstatus.py | 2 +-
stem/descriptor/server_descriptor.py | 2 +-
stem/interpreter/commands.py | 3 ++-
5 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 000b4ec..da81567 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -175,7 +175,7 @@ def _parse_file(descriptor_file, is_bridge = False, validate = True, **kwargs):
extrainfo_content += _read_until_keywords(block_end_prefix, descriptor_file, True)
if extrainfo_content:
- if extrainfo_content[0].startswith('@type'):
+ if extrainfo_content[0].startswith(b'@type'):
extrainfo_content = extrainfo_content[1:]
if is_bridge:
diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py
index 33ad4e0..3c92aca 100644
--- a/stem/descriptor/microdescriptor.py
+++ b/stem/descriptor/microdescriptor.py
@@ -138,7 +138,7 @@ def _parse_file(descriptor_file, validate = True, **kwargs):
descriptor_lines.append(line)
if descriptor_lines:
- if descriptor_lines[0].startswith('@type'):
+ if descriptor_lines[0].startswith(b'@type'):
descriptor_lines = descriptor_lines[1:]
# strip newlines from annotations
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index fbe96fb..6cf0880 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -198,7 +198,7 @@ def _parse_file(document_file, document_type = None, validate = True, is_microde
header = _read_until_keywords((ROUTERS_START, FOOTER_START, V2_FOOTER_START), document_file)
- if header and header[0].startswith('@type'):
+ if header and header[0].startswith(b'@type'):
header = header[1:]
routers_start = document_file.tell()
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 97781da..9416582 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -143,7 +143,7 @@ def _parse_file(descriptor_file, is_bridge = False, validate = True, **kwargs):
descriptor_content += _read_until_keywords(block_end_prefix, descriptor_file, True)
if descriptor_content:
- if descriptor_content[0].startswith('@type'):
+ if descriptor_content[0].startswith(b'@type'):
descriptor_content = descriptor_content[1:]
# strip newlines from annotations
diff --git a/stem/interpreter/commands.py b/stem/interpreter/commands.py
index f7de765..5473628 100644
--- a/stem/interpreter/commands.py
+++ b/stem/interpreter/commands.py
@@ -10,6 +10,7 @@ import stem.control
import stem.descriptor.remote
import stem.interpreter.help
import stem.util.connection
+import stem.util.str_tools
import stem.util.tor_tools
from stem.interpreter import STANDARD_OUTPUT, BOLD_OUTPUT, ERROR_OUTPUT, uses_settings, msg
@@ -220,7 +221,7 @@ class ControlInterpretor(code.InteractiveConsole):
lines.append(format('exit policy: ', *BOLD_OUTPUT) + exit_policy_label)
if server_desc:
- contact = server_desc.contact
+ contact = stem.util.str_tools._to_unicode(server_desc.contact)
# clears up some highly common obscuring
More information about the tor-commits
mailing list