[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Using byte string for base64.b64decode in python 3
commit 2e7913aa6c59d147ef5ae926d456c54ec459dd52
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sun Jan 27 12:17:43 2013 -0800
Using byte string for base64.b64decode in python 3
First correction for the ASCII -> Unicode switch over in python 3.
======================================================================
ERROR: test_get_network_status
----------------------------------------------------------------------
Traceback:
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 702, in _decode_fingerprint
identity_decoded = base64.b64decode(identity)
File "/usr/lib/python3.2/base64.py", line 83, in b64decode
raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
During handling of the above exception, another exception occurred:
Traceback:
File "/home/atagar/Desktop/stem/test/data/python3/test/unit/control/controller.py", line 247, in test_get_network_status
router = stem.descriptor.router_status_entry.RouterStatusEntryV2(desc)
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 254, in __init__
super(RouterStatusEntryV2, self).__init__(content, validate, document)
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 149, in __init__
self._parse(entries, validate)
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 261, in _parse
_parse_r_line(self, value, validate, True)
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 495, in _parse_r_line
desc.fingerprint = _decode_fingerprint(r_comp[1], validate)
File "/home/atagar/Desktop/stem/test/data/python3/stem/descriptor/router_status_entry.py", line 707, in _decode_fingerprint
raise ValueError("Unable to decode identity string '%s'" % identity)
ValueError: Unable to decode identity string '/96bKo4soysolMgKn5Hex2nyFSY='
----------------------------------------------------------------------
Ran 9 tests in 0.063s
---
stem/descriptor/router_status_entry.py | 6 ++++--
stem/descriptor/server_descriptor.py | 3 ++-
stem/prereq.py | 4 ++--
stem/util/str_tools.py | 28 ++++++++++++++++++++++++++++
test/settings.cfg | 1 +
5 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py
index 9af2f44..7f9875b 100644
--- a/stem/descriptor/router_status_entry.py
+++ b/stem/descriptor/router_status_entry.py
@@ -21,6 +21,7 @@ import datetime
import stem.descriptor
import stem.exit_policy
+import stem.util.str_tools
def _parse_file(document_file, validate, entry_class, entry_keyword = "r", start_position = None, end_position = None, section_end_keywords = (), extra_args = ()):
@@ -699,7 +700,7 @@ def _decode_fingerprint(identity, validate):
fingerprint = ""
try:
- identity_decoded = base64.b64decode(identity)
+ identity_decoded = base64.b64decode(stem.util.str_tools.to_bytes(identity))
except TypeError:
if not validate:
return None
@@ -717,7 +718,8 @@ def _decode_fingerprint(identity, validate):
# >>> '0xa'[2:].zfill(2).upper()
# '0A'
- fingerprint += hex(ord(char))[2:].zfill(2).upper()
+ char_int = char if isinstance(char, int) else ord(char)
+ fingerprint += hex(char_int)[2:].zfill(2).upper()
if not stem.util.tor_tools.is_valid_fingerprint(fingerprint):
if not validate:
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 38781bd..1cf4d31 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -36,6 +36,7 @@ import stem.descriptor.extrainfo_descriptor
import stem.exit_policy
import stem.prereq
import stem.util.connection
+import stem.util.str_tools
import stem.util.tor_tools
import stem.version
@@ -818,7 +819,7 @@ class RelayDescriptor(ServerDescriptor):
# get the key representation in bytes
- key_bytes = base64.b64decode(key_as_string)
+ key_bytes = base64.b64decode(stem.util.str_tools.to_bytes(key_as_string))
return key_bytes
diff --git a/stem/prereq.py b/stem/prereq.py
index b0a508e..46913e4 100644
--- a/stem/prereq.py
+++ b/stem/prereq.py
@@ -23,8 +23,6 @@ series). Other requirements for complete functionality are...
import sys
-from stem.util import log
-
IS_CRYPTO_AVAILABLE = None
@@ -76,6 +74,8 @@ def is_crypto_available():
global IS_CRYPTO_AVAILABLE
if IS_CRYPTO_AVAILABLE is None:
+ from stem.util import log
+
try:
from Crypto.PublicKey import RSA
from Crypto.Util import asn1
diff --git a/stem/util/str_tools.py b/stem/util/str_tools.py
index 25512b6..022874e 100644
--- a/stem/util/str_tools.py
+++ b/stem/util/str_tools.py
@@ -5,6 +5,7 @@ Toolkit for various string activity.
::
+ to_bytes - normalizes string ASCII bytes
to_camel_case - converts a string to camel case
get_size_label - human readable label for a number of bytes
get_time_label - human readable label for a number of seconds
@@ -17,6 +18,8 @@ Toolkit for various string activity.
import datetime
+import stem.prereq
+
# label conversion tuples of the form...
# (bits / bytes / seconds, short label, long label)
SIZE_UNITS_BITS = (
@@ -44,6 +47,31 @@ TIME_UNITS = (
(1.0, "s", " second"),
)
+if stem.prereq.is_python_3():
+ import codecs
+
+ def _to_bytes(msg):
+ return codecs.latin_1_encode(msg)[0]
+else:
+ def _to_bytes(msg):
+ return msg
+
+
+def to_bytes(msg):
+ """
+ Provides the ASCII bytes for the given string. This is purely to provide
+ python 3 compatability, normalizing the unicode/ASCII change in the version
+ bump. For an explanation of this see...
+
+ http://python3porting.com/problems.html#nicer-solutions
+
+ :param msg label: string to be converted
+
+ :returns: ASCII bytes for string
+ """
+
+ return _to_bytes(msg)
+
def to_camel_case(label, divider = "_", joiner = " "):
"""
diff --git a/test/settings.cfg b/test/settings.cfg
index 66475ee..4d99bfe 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -157,6 +157,7 @@ pyflakes.ignore stem/prereq.py => 'RSA' imported but unused
pyflakes.ignore stem/prereq.py => 'asn1' imported but unused
pyflakes.ignore stem/prereq.py => 'long_to_bytes' imported but unused
pyflakes.ignore stem/descriptor/__init__.py => redefinition of unused 'OrderedDict' from line 32
+pyflakes.ignore stem/util/str_tools.py => redefinition of function '_to_bytes' from line 53
pyflakes.ignore test/mocking.py => undefined name 'builtins'
pyflakes.ignore test/unit/response/events.py => 'from stem import *' used; unable to detect undefined names
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits