[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Drop stem.util.str_type
commit ec796c735b826dcce865ec2d1b109e0ce84fd365
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sun May 13 17:28:24 2018 -0700
Drop stem.util.str_type
Our str_type constant was used for a couple things...
* Throughout our library it was pretty much exclusively a cross-version 'is
this a string?' check. Replacing these with an is_str() function instead.
* In our tests it was used to create test data. Interestingly it seems we
actually do just fine without this.
---
stem/client/cell.py | 9 ++---
stem/client/datatype.py | 9 ++---
stem/control.py | 13 +++----
stem/descriptor/__init__.py | 7 ++--
stem/descriptor/certificate.py | 5 ++-
stem/descriptor/reader.py | 13 +++----
stem/descriptor/server_descriptor.py | 3 +-
stem/exit_policy.py | 15 ++++-----
stem/response/events.py | 5 +--
stem/util/__init__.py | 39 ++++++++++++++++++---
stem/util/connection.py | 7 ++--
stem/util/enum.py | 4 +--
stem/util/str_tools.py | 11 +++---
stem/util/system.py | 5 +--
test/settings.cfg | 8 +++--
test/unit/descriptor/microdescriptor.py | 5 ++-
test/unit/descriptor/networkstatus/document_v3.py | 41 +++++++++++------------
test/unit/descriptor/reader.py | 37 ++++++++++----------
test/unit/descriptor/server_descriptor.py | 7 ++--
test/unit/tutorial_examples.py | 13 ++++---
test/unit/util/system.py | 5 ++-
21 files changed, 143 insertions(+), 118 deletions(-)
diff --git a/stem/client/cell.py b/stem/client/cell.py
index 7f801fd6..b40a737f 100644
--- a/stem/client/cell.py
+++ b/stem/client/cell.py
@@ -40,14 +40,15 @@ Messages communicated over a Tor relay's ORPort.
import datetime
import inspect
import io
-import numbers
import os
import random
import sys
+import stem.util
+
from stem import UNDEFINED
from stem.client.datatype import HASH_LEN, ZERO, Address, Certificate, CloseReason, RelayCommand, Size, split
-from stem.util import _hash_attr, datetime_to_unix, str_type, str_tools
+from stem.util import _hash_attr, datetime_to_unix, str_tools
FIXED_PAYLOAD_LEN = 509
AUTH_CHALLENGE_SIZE = 32
@@ -308,9 +309,9 @@ class RelayCell(CircuitCell):
# isinstance() isn't such a great option.
digest = Size.LONG.unpack(digest.digest()[:4])
- elif isinstance(digest, (bytes, str_type)):
+ elif stem.util._is_str(digest):
digest = Size.LONG.unpack(digest[:4])
- elif isinstance(digest, numbers.Integral):
+ elif stem.util._is_int(digest):
pass
else:
raise ValueError('RELAY cell digest must be a hash, string, or int but was a %s' % type(digest).__name__)
diff --git a/stem/client/datatype.py b/stem/client/datatype.py
index 9abea36b..038229d2 100644
--- a/stem/client/datatype.py
+++ b/stem/client/datatype.py
@@ -113,10 +113,10 @@ users.** See our :class:`~stem.client.Relay` the API you probably want.
import collections
import hashlib
import io
-import numbers
import struct
import stem.prereq
+import stem.util
import stem.util.connection
import stem.util.enum
@@ -159,10 +159,7 @@ class _IntegerEnum(stem.util.enum.Enum):
Privides the (enum, int_value) tuple for a given value.
"""
- # TODO: when we drop python 2.x support all "isinstance(val,
- # numbers.Integral)" checks should become "isinstance(val, int)"
-
- if isinstance(val, numbers.Integral):
+ if stem.util._is_int(val):
return self._int_to_enum.get(val, self.UNKNOWN), val
elif val in self:
return val, self._enum_to_int.get(val, val)
@@ -314,7 +311,7 @@ class Size(Field):
raise NotImplementedError("Use our constant's unpack() and pop() instead")
def pack(self, content):
- if not isinstance(content, numbers.Integral):
+ if not stem.util._is_int(content):
raise ValueError('Size.pack encodes an integer, but was a %s' % type(content).__name__)
packed = struct.pack(self.format, content)
diff --git a/stem/control.py b/stem/control.py
index 244aed0b..d10989af 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -269,6 +269,7 @@ import stem.exit_policy
import stem.response
import stem.response.events
import stem.socket
+import stem.util
import stem.util.conf
import stem.util.connection
import stem.util.enum
@@ -278,7 +279,7 @@ import stem.util.tor_tools
import stem.version
from stem import UNDEFINED, CircStatus, Signal
-from stem.util import str_type, log
+from stem.util import log
# When closing the controller we attempt to finish processing enqueued events,
# but if it takes longer than this we terminate.
@@ -1141,7 +1142,7 @@ class Controller(BaseController):
start_time = time.time()
reply = {}
- if isinstance(params, (bytes, str_type)):
+ if stem.util._is_str(params):
is_multiple = False
params = set([params])
else:
@@ -2191,7 +2192,7 @@ class Controller(BaseController):
start_time = time.time()
reply = {}
- if isinstance(params, (bytes, str_type)):
+ if stem.util._is_str(params):
params = [params]
# remove strings which contain only whitespace
@@ -2433,7 +2434,7 @@ class Controller(BaseController):
for param, value in params:
param = param.lower()
- if isinstance(value, (bytes, str_type)):
+ if stem.util._is_str(value):
value = [value]
to_cache[param] = value
@@ -3331,7 +3332,7 @@ class Controller(BaseController):
* :class:`stem.InvalidArguments` if features passed were invalid
"""
- if isinstance(features, (bytes, str_type)):
+ if stem.util._is_str(features):
features = [features]
response = self.msg('USEFEATURE %s' % ' '.join(features))
@@ -3486,7 +3487,7 @@ class Controller(BaseController):
args = [circuit_id]
- if isinstance(path, (bytes, str_type)):
+ if stem.util._is_str(path):
path = [path]
if path:
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index d56b38b8..6a54ef29 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -68,12 +68,11 @@ import string
import tarfile
import stem.prereq
+import stem.util
import stem.util.enum
import stem.util.str_tools
import stem.util.system
-from stem.util import str_type
-
try:
# added in python 2.7
from collections import OrderedDict
@@ -205,7 +204,7 @@ def parse_file(descriptor_file, descriptor_type = None, validate = False, docume
handler = None
- if isinstance(descriptor_file, (bytes, str_type)):
+ if stem.util._is_str(descriptor_file):
if stem.util.system.is_tarfile(descriptor_file):
handler = _parse_file_for_tar_path
else:
@@ -896,7 +895,7 @@ def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_fi
content = None if skip else []
ending_keyword = None
- if isinstance(keywords, (bytes, str_type)):
+ if stem.util._is_str(keywords):
keywords = (keywords,)
if ignore_first:
diff --git a/stem/descriptor/certificate.py b/stem/descriptor/certificate.py
index 3cdf4163..0c4796af 100644
--- a/stem/descriptor/certificate.py
+++ b/stem/descriptor/certificate.py
@@ -162,7 +162,10 @@ class Ed25519CertificateV1(Ed25519Certificate):
raise ValueError("BUG: Ed25519 certificate type is decoded from one byte. It shouldn't be possible to have a value of %i." % cert_type)
# expiration time is in hours since epoch
- self.expiration = datetime.datetime.utcfromtimestamp(stem.util.str_tools._to_int(decoded[2:6]) * 3600)
+ try:
+ self.expiration = datetime.datetime.utcfromtimestamp(stem.util.str_tools._to_int(decoded[2:6]) * 3600)
+ except ValueError as exc:
+ raise ValueError('Invalid expiration timestamp (%s): %s' % (exc, stem.util.str_tools._to_int(decoded[2:6]) * 3600))
self.key_type = stem.util.str_tools._to_int(decoded[6:7])
self.key = decoded[7:39]
diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py
index 1c07cdae..0f8547d7 100644
--- a/stem/descriptor/reader.py
+++ b/stem/descriptor/reader.py
@@ -89,10 +89,10 @@ except ImportError:
import stem.descriptor
import stem.prereq
+import stem.util
+import stem.util.str_tools
import stem.util.system
-from stem.util import str_type
-
# flag to indicate when the reader thread is out of descriptor files to read
FINISHED = 'DONE'
@@ -179,9 +179,9 @@ def load_processed_files(path):
processed_files = {}
- with open(path) as input_file:
+ with open(path, 'rb') as input_file:
for line in input_file.readlines():
- line = line.strip()
+ line = stem.util.str_tools._to_unicode(line.strip())
if not line:
continue # skip blank lines
@@ -265,10 +265,7 @@ class DescriptorReader(object):
"""
def __init__(self, target, validate = False, follow_links = False, buffer_size = 100, persistence_path = None, document_handler = stem.descriptor.DocumentHandler.ENTRIES, **kwargs):
- if isinstance(target, (bytes, str_type)):
- self._targets = [target]
- else:
- self._targets = target
+ self._targets = [target] if stem.util._is_str(target) else target
# expand any relative paths we got
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 63a3d069..afbec8e6 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -64,7 +64,6 @@ import stem.util.tor_tools
import stem.version
from stem.descriptor.router_status_entry import RouterStatusEntryV3
-from stem.util import str_type
from stem.descriptor import (
PGP_BLOCK_END,
@@ -412,7 +411,7 @@ def _parse_history_line(keyword, history_end_attribute, history_interval_attribu
def _parse_exit_policy(descriptor, entries):
if hasattr(descriptor, '_unparsed_exit_policy'):
- if descriptor._unparsed_exit_policy == [str_type('reject *:*')]:
+ if descriptor._unparsed_exit_policy and stem.util.str_tools._to_unicode(descriptor._unparsed_exit_policy[0]) == 'reject *:*':
descriptor.exit_policy = REJECT_ALL_POLICY
else:
descriptor.exit_policy = stem.exit_policy.ExitPolicy(*descriptor._unparsed_exit_policy)
diff --git a/stem/exit_policy.py b/stem/exit_policy.py
index e921fb3c..27475858 100644
--- a/stem/exit_policy.py
+++ b/stem/exit_policy.py
@@ -72,12 +72,11 @@ import socket
import zlib
import stem.prereq
+import stem.util
import stem.util.connection
import stem.util.enum
import stem.util.str_tools
-from stem.util import _hash_attr, str_type
-
try:
# added in python 3.2
from functools import lru_cache
@@ -130,7 +129,7 @@ def get_config_policy(rules, ip_address = None):
elif ip_address and stem.util.connection.is_valid_ipv6_address(ip_address, allow_brackets = True) and not (ip_address[0] == '[' and ip_address[-1] == ']'):
ip_address = '[%s]' % ip_address # ExitPolicy validation expects IPv6 addresses to be bracketed
- if isinstance(rules, (bytes, str_type)):
+ if stem.util._is_str(rules):
rules = rules.split(',')
result = []
@@ -244,7 +243,7 @@ class ExitPolicy(object):
# sanity check the types
for rule in rules:
- if not isinstance(rule, (bytes, str_type, ExitPolicyRule)):
+ if not stem.util._is_str(rule) and not isinstance(rule, ExitPolicyRule):
raise TypeError('Exit policy rules can only contain strings or ExitPolicyRules, got a %s (%s)' % (type(rule), rules))
# Unparsed representation of the rules we were constructed with. Our
@@ -255,7 +254,7 @@ class ExitPolicy(object):
is_all_str = True
for rule in rules:
- if not isinstance(rule, (bytes, str_type)):
+ if not stem.util._is_str(rule):
is_all_str = False
if rules and is_all_str:
@@ -467,7 +466,7 @@ class ExitPolicy(object):
if isinstance(rule, bytes):
rule = stem.util.str_tools._to_unicode(rule)
- if isinstance(rule, str_type):
+ if stem.util._is_str(rule):
if not rule.strip():
continue
@@ -1028,7 +1027,7 @@ class ExitPolicyRule(object):
def __hash__(self):
if self._hash is None:
- self._hash = _hash_attr(self, 'is_accept', 'address', 'min_port', 'max_port') * 1024 + hash(self.get_mask(False))
+ self._hash = stem.util._hash_attr(self, 'is_accept', 'address', 'min_port', 'max_port') * 1024 + hash(self.get_mask(False))
return self._hash
@@ -1074,7 +1073,7 @@ class MicroExitPolicyRule(ExitPolicyRule):
def __hash__(self):
if self._hash is None:
- self._hash = _hash_attr(self, 'is_accept', 'min_port', 'max_port')
+ self._hash = stem.util._hash_attr(self, 'is_accept', 'min_port', 'max_port')
return self._hash
diff --git a/stem/response/events.py b/stem/response/events.py
index cadbb0dc..de52c08f 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -10,9 +10,10 @@ import stem.control
import stem.descriptor.router_status_entry
import stem.prereq
import stem.response
+import stem.util
import stem.version
-from stem.util import str_type, connection, log, str_tools, tor_tools
+from stem.util import connection, log, str_tools, tor_tools
# Matches keyword=value arguments. This can't be a simple "(.*)=(.*)" pattern
# because some positional arguments, like circuit paths, can have an equal
@@ -166,7 +167,7 @@ class Event(stem.response.ControlMessage):
attr_values = getattr(self, attr)
if attr_values:
- if isinstance(attr_values, (bytes, str_type)):
+ if stem.util._is_str(attr_values):
attr_values = [attr_values]
for value in attr_values:
diff --git a/stem/util/__init__.py b/stem/util/__init__.py
index d022af85..c2b4999f 100644
--- a/stem/util/__init__.py
+++ b/stem/util/__init__.py
@@ -24,11 +24,6 @@ __all__ = [
'datetime_to_unix',
]
-if stem.prereq.is_python_3():
- str_type = str
-else:
- str_type = unicode
-
# Python hashes booleans to zero or one. Usually this would be fine, but since
# we use hashes for equality checks we need them to be something less common.
@@ -36,6 +31,40 @@ TRUE_HASH_VALUE = 4813749
FALSE_HASH_VALUE = 5826450
+def _is_str(val):
+ """
+ Check if a value is a string. This will be removed when we no longer provide
+ backward compatibility for the Python 2.x series.
+
+ :param object val: value to be checked
+
+ :returns: **True** if the value is some form of string (unicode or bytes),
+ and **False** otherwise
+ """
+
+ if stem.prereq.is_python_3():
+ return isinstance(val, (bytes, str))
+ else:
+ return isinstance(val, (bytes, unicode))
+
+
+def _is_int(val):
+ """
+ Check if a value is an integer. This will be removed when we no longer
+ provide backward compatibility for the Python 2.x series.
+
+ :param object val: value to be checked
+
+ :returns: **True** if the value is some form of integer (int or long),
+ and **False** otherwise
+ """
+
+ if stem.prereq.is_python_3():
+ return isinstance(val, int)
+ else:
+ return isinstance(val, (int, long))
+
+
def datetime_to_unix(timestamp):
"""
Converts a utc datetime object to a unix timestamp.
diff --git a/stem/util/connection.py b/stem/util/connection.py
index 74fbdde2..4ac8b2ed 100644
--- a/stem/util/connection.py
+++ b/stem/util/connection.py
@@ -61,10 +61,11 @@ import os
import platform
import re
+import stem.util
import stem.util.proc
import stem.util.system
-from stem.util import str_type, conf, enum, log, str_tools
+from stem.util import conf, enum, log, str_tools
# Connection resolution is risky to log about since it's highly likely to
# contain sensitive information. That said, it's also difficult to get right in
@@ -409,7 +410,7 @@ def is_valid_ipv4_address(address):
if isinstance(address, bytes):
address = str_tools._to_unicode(address)
- elif not isinstance(address, str_type):
+ elif not stem.util._is_str(address):
return False
# checks if theres four period separated values
@@ -439,7 +440,7 @@ def is_valid_ipv6_address(address, allow_brackets = False):
if isinstance(address, bytes):
address = str_tools._to_unicode(address)
- elif not isinstance(address, str_type):
+ elif not stem.util._is_str(address):
return False
if allow_brackets:
diff --git a/stem/util/enum.py b/stem/util/enum.py
index 7b628d68..00835ca5 100644
--- a/stem/util/enum.py
+++ b/stem/util/enum.py
@@ -40,7 +40,7 @@ constructed as simple type listings...
+- __iter__ - iterator over our enum keys
"""
-from stem.util import str_type
+import stem.util
def UppercaseEnum(*args):
@@ -76,7 +76,7 @@ class Enum(object):
keys, values = [], []
for entry in args:
- if isinstance(entry, (bytes, str_type)):
+ if stem.util._is_str(entry):
key, val = entry, _to_camel_case(entry)
elif isinstance(entry, tuple) and len(entry) == 2:
key, val = entry
diff --git a/stem/util/str_tools.py b/stem/util/str_tools.py
index 5066a5c8..0f31fb22 100644
--- a/stem/util/str_tools.py
+++ b/stem/util/str_tools.py
@@ -27,10 +27,9 @@ import re
import sys
import stem.prereq
+import stem.util
import stem.util.enum
-from stem.util import str_type
-
# label conversion tuples of the form...
# (bits / bytes / seconds, short label, long label)
@@ -75,13 +74,13 @@ if stem.prereq.is_python_3():
return msg
else:
def _to_bytes_impl(msg):
- if msg is not None and isinstance(msg, str_type):
+ if msg is not None and isinstance(msg, unicode):
return codecs.latin_1_encode(msg, 'replace')[0]
else:
return msg
def _to_unicode_impl(msg):
- if msg is not None and not isinstance(msg, str_type):
+ if msg is not None and not isinstance(msg, unicode):
return msg.decode('utf-8', 'replace')
else:
return msg
@@ -497,7 +496,7 @@ def _parse_timestamp(entry):
:raises: **ValueError** if the timestamp is malformed
"""
- if not isinstance(entry, (str, str_type)):
+ if not stem.util._is_str(entry):
raise ValueError('parse_timestamp() input must be a str, got a %s' % type(entry))
try:
@@ -523,7 +522,7 @@ def _parse_iso_timestamp(entry):
:raises: **ValueError** if the timestamp is malformed
"""
- if not isinstance(entry, (str, str_type)):
+ if not stem.util._is_str(entry):
raise ValueError('parse_iso_timestamp() input must be a str, got a %s' % type(entry))
# based after suggestions from...
diff --git a/stem/util/system.py b/stem/util/system.py
index 82891d7e..3eb2fd4d 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -80,12 +80,13 @@ import tarfile
import threading
import time
+import stem.util
import stem.util.enum
import stem.util.proc
import stem.util.str_tools
from stem import UNDEFINED
-from stem.util import str_type, log
+from stem.util import log
State = stem.util.enum.UppercaseEnum(
'PENDING',
@@ -446,7 +447,7 @@ def is_running(command):
if command_listing:
command_listing = [c.strip() for c in command_listing]
- if isinstance(command, (bytes, str_type)):
+ if stem.util._is_str(command):
command = [command]
for cmd in command:
diff --git a/test/settings.cfg b/test/settings.cfg
index bd99a9d2..c3952567 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -147,9 +147,8 @@ pycodestyle.ignore test/unit/util/connection.py => W291: _tor tor 158
pyflakes.ignore run_tests.py => 'unittest' imported but unused
pyflakes.ignore stem/client/datatype.py => redefinition of unused 'pop' from *
-pyflakes.ignore stem/util/__init__.py => undefined name 'long'
-pyflakes.ignore stem/util/__init__.py => undefined name 'unicode'
pyflakes.ignore stem/control.py => undefined name 'controller'
+pyflakes.ignore stem/interpreter/__init__.py => undefined name 'raw_input'
pyflakes.ignore stem/manual.py => undefined name 'unichr'
pyflakes.ignore stem/prereq.py => 'int_to_bytes' imported but unused
pyflakes.ignore stem/prereq.py => 'int_from_bytes' imported but unused
@@ -174,13 +173,16 @@ pyflakes.ignore stem/prereq.py => 'cryptography.hazmat.primitives.ciphers.algori
pyflakes.ignore stem/prereq.py => 'lzma' imported but unused
pyflakes.ignore stem/prereq.py => 'nacl.encoding' imported but unused
pyflakes.ignore stem/prereq.py => 'nacl.signing' imported but unused
-pyflakes.ignore stem/interpreter/__init__.py => undefined name 'raw_input'
+pyflakes.ignore stem/response/events.py => undefined name 'long'
+pyflakes.ignore stem/util/__init__.py => undefined name 'long'
+pyflakes.ignore stem/util/__init__.py => undefined name 'unicode'
pyflakes.ignore stem/util/conf.py => undefined name 'unicode'
pyflakes.ignore stem/util/test_tools.py => 'pyflakes' imported but unused
pyflakes.ignore stem/util/test_tools.py => 'pycodestyle' imported but unused
pyflakes.ignore test/unit/descriptor/reader.py => 'bz2' imported but unused
pyflakes.ignore test/unit/response/events.py => 'from stem import *' used; unable to detect undefined names
pyflakes.ignore test/unit/response/events.py => *may be undefined, or defined from star imports: stem
+pyflakes.ignore stem/util/str_tools.py => undefined name 'unicode'
pyflakes.ignore test/__init__.py => undefined name 'test'
# Test modules we want to run. Modules are roughly ordered by the dependencies
diff --git a/test/unit/descriptor/microdescriptor.py b/test/unit/descriptor/microdescriptor.py
index aab9ab4c..4fd14f5b 100644
--- a/test/unit/descriptor/microdescriptor.py
+++ b/test/unit/descriptor/microdescriptor.py
@@ -8,7 +8,6 @@ import stem.descriptor
import stem.exit_policy
import test.require
-from stem.util import str_type
from stem.descriptor.microdescriptor import Microdescriptor
from test.unit.descriptor import get_resource
@@ -59,7 +58,7 @@ class TestMicrodescriptor(unittest.TestCase):
router = next(descriptors)
self.assertEqual(SECOND_ONION_KEY, router.onion_key)
- self.assertEqual(str_type('r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k='), router.ntor_onion_key)
+ self.assertEqual('r5572HzD+PMPBbXlZwBhsm6YEbxnYgis8vhZ1jmdI2k=', router.ntor_onion_key)
self.assertEqual([], router.or_addresses)
self.assertEqual(['$6141629FA0D15A6AEAEF3A1BEB76E64C767B3174'], router.family)
self.assertEqual(stem.exit_policy.MicroExitPolicy('reject 1-65535'), router.exit_policy)
@@ -69,7 +68,7 @@ class TestMicrodescriptor(unittest.TestCase):
router = next(descriptors)
self.assertEqual(THIRD_ONION_KEY, router.onion_key)
self.assertEqual(None, router.ntor_onion_key)
- self.assertEqual([(str_type('2001:6b0:7:125::242'), 9001, True)], router.or_addresses)
+ self.assertEqual([('2001:6b0:7:125::242', 9001, True)], router.or_addresses)
self.assertEqual([], router.family)
self.assertEqual(stem.exit_policy.MicroExitPolicy('accept 80,443'), router.exit_policy)
self.assertEqual({b'@last-listed': b'2013-02-24 00:18:36'}, router.get_annotations())
diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py
index a99d76be..20b38563 100644
--- a/test/unit/descriptor/networkstatus/document_v3.py
+++ b/test/unit/descriptor/networkstatus/document_v3.py
@@ -12,7 +12,6 @@ import stem.version
import test.require
from stem import Flag
-from stem.util import str_type
from stem.descriptor import CRYPTO_BLOB
@@ -783,19 +782,19 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
test_values = (
('', {}),
- ('fast-speed=40960', {str_type('fast-speed'): 40960}), # numeric value
- ('guard-wfu=94.669%', {str_type('guard-wfu'): 0.94669}), # percentage value
- ('guard-wfu=94.669% guard-tk=691200', {str_type('guard-wfu'): 0.94669, str_type('guard-tk'): 691200}), # multiple values
+ ('fast-speed=40960', {'fast-speed': 40960}), # numeric value
+ ('guard-wfu=94.669%', {'guard-wfu': 0.94669}), # percentage value
+ ('guard-wfu=94.669% guard-tk=691200', {'guard-wfu': 0.94669, 'guard-tk': 691200}), # multiple values
('stable-uptime=0 stable-mtbf=0 fast-speed=0 guard-wfu=0.000% guard-tk=0 guard-bw-inc-exits=0 guard-bw-exc-exits=0 enough-mtbf=1 ignoring-advertised-bws=0', {
- str_type('stable-uptime'): 0,
- str_type('stable-mtbf'): 0,
- str_type('fast-speed'): 0,
- str_type('guard-wfu'): 0.0,
- str_type('guard-tk'): 0,
- str_type('guard-bw-inc-exits'): 0,
- str_type('guard-bw-exc-exits'): 0,
- str_type('enough-mtbf'): 1,
- str_type('ignoring-advertised-bws'): 0,
+ 'stable-uptime': 0,
+ 'stable-mtbf': 0,
+ 'fast-speed': 0,
+ 'guard-wfu': 0.0,
+ 'guard-tk': 0,
+ 'guard-bw-inc-exits': 0,
+ 'guard-bw-exc-exits': 0,
+ 'enough-mtbf': 1,
+ 'ignoring-advertised-bws': 0,
}),
)
@@ -808,14 +807,14 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w=
full_line = 'stable-uptime=693369 stable-mtbf=153249 fast-speed=40960 guard-wfu=94.669% guard-tk=691200 guard-bw-inc-exits=174080 guard-bw-exc-exits=184320 enough-mtbf=1'
expected_value = {
- str_type('stable-uptime'): 693369,
- str_type('stable-mtbf'): 153249,
- str_type('fast-speed'): 40960,
- str_type('guard-wfu'): 0.94669,
- str_type('guard-tk'): 691200,
- str_type('guard-bw-inc-exits'): 174080,
- str_type('guard-bw-exc-exits'): 184320,
- str_type('enough-mtbf'): 1,
+ 'stable-uptime': 693369,
+ 'stable-mtbf': 153249,
+ 'fast-speed': 40960,
+ 'guard-wfu': 0.94669,
+ 'guard-tk': 691200,
+ 'guard-bw-inc-exits': 174080,
+ 'guard-bw-exc-exits': 184320,
+ 'enough-mtbf': 1,
}
document = NetworkStatusDocumentV3.create({'vote-status': 'vote', 'flag-thresholds': full_line})
diff --git a/test/unit/descriptor/reader.py b/test/unit/descriptor/reader.py
index e450f7ca..76d1d8f3 100644
--- a/test/unit/descriptor/reader.py
+++ b/test/unit/descriptor/reader.py
@@ -14,9 +14,10 @@ import time
import unittest
import stem.descriptor.reader
-import test.unit.descriptor
+import stem.util.str_tools
+import stem.util.system
-from stem.util import str_type, system
+import test.unit.descriptor
try:
# added in python 3.3
@@ -89,13 +90,13 @@ class TestDescriptorReader(unittest.TestCase):
"""
test_lines = (
- str_type('/dir/ 0'),
- str_type('/dir/file 12345'),
- str_type('/dir/file with spaces 7138743'),
- str_type(' /dir/with extra space 12345 '),
- str_type(' \t '),
- str_type(''),
- str_type('/dir/after empty line 12345'),
+ '/dir/ 0',
+ '/dir/file 12345',
+ '/dir/file with spaces 7138743',
+ ' /dir/with extra space 12345 ',
+ ' \t ',
+ '',
+ '/dir/after empty line 12345',
)
expected_value = {
@@ -106,7 +107,7 @@ class TestDescriptorReader(unittest.TestCase):
'/dir/after empty line': 12345,
}
- open_mock.return_value = io.StringIO(str_type('\n'.join(test_lines)))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes('\n'.join(test_lines)))
self.assertEqual(expected_value, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -115,7 +116,7 @@ class TestDescriptorReader(unittest.TestCase):
Tests the load_processed_files() function with an empty file.
"""
- open_mock.return_value = io.StringIO(str_type(''))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes(''))
self.assertEqual({}, stem.descriptor.reader.load_processed_files(''))
@patch('stem.descriptor.reader.open', create = True)
@@ -125,7 +126,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the file path.
"""
- open_mock.return_value = io.StringIO(str_type(' 12345'))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes(' 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -135,7 +136,7 @@ class TestDescriptorReader(unittest.TestCase):
it is missing the timestamp.
"""
- open_mock.return_value = io.StringIO(str_type('/dir/file '))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes('/dir/file '))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -145,7 +146,7 @@ class TestDescriptorReader(unittest.TestCase):
it has an invalid file path.
"""
- open_mock.return_value = io.StringIO(str_type('not_an_absolute_file 12345'))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes('not_an_absolute_file 12345'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
@patch('stem.descriptor.reader.open', create = True)
@@ -155,7 +156,7 @@ class TestDescriptorReader(unittest.TestCase):
it has a non-numeric timestamp.
"""
- open_mock.return_value = io.StringIO(str_type('/dir/file 123a'))
+ open_mock.return_value = io.BytesIO(stem.util.str_tools._to_bytes('/dir/file 123a'))
self.assertRaises(TypeError, stem.descriptor.reader.load_processed_files, '')
def test_load_processed_files_from_data(self):
@@ -197,7 +198,7 @@ class TestDescriptorReader(unittest.TestCase):
# read-only flag with os.chmod(). For more information see...
# http://docs.python.org/library/os.html#os.chmod
- if system.is_windows():
+ if stem.util.system.is_windows():
self.skipTest('(chmod not functional)')
test_listing_path = self._make_processed_files_listing(BASIC_LISTING)
@@ -418,7 +419,7 @@ class TestDescriptorReader(unittest.TestCase):
# Skip on windows since SIGALRM is unavailable
- if system.is_windows():
+ if stem.util.system.is_windows():
self.skipTest('(SIGALRM unavailable)')
is_test_running = True
@@ -558,7 +559,7 @@ class TestDescriptorReader(unittest.TestCase):
if getpass.getuser() == 'root':
self.skipTest('(running as root)')
return
- elif system.is_windows():
+ elif stem.util.system.is_windows():
self.skipTest('(chmod not functional)')
return
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index 99d3c38e..ff1035c4 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -19,7 +19,6 @@ import stem.version
import stem.util.str_tools
import test.require
-from stem.util import str_type
from stem.descriptor.certificate import CertType, ExtensionType
from stem.descriptor.server_descriptor import BridgeDistribution, RelayDescriptor, BridgeDescriptor
@@ -42,9 +41,9 @@ except ImportError:
from mock import Mock, patch
TARFILE_FINGERPRINTS = set([
- str_type('B6D83EC2D9E18B0A7A33428F8CFA9C536769E209'),
- str_type('E0BD57A11F00041A9789577C53A1B784473669E4'),
- str_type('1F43EE37A0670301AD9CB555D94AFEC2C89FDE86'),
+ 'B6D83EC2D9E18B0A7A33428F8CFA9C536769E209',
+ 'E0BD57A11F00041A9789577C53A1B784473669E4',
+ '1F43EE37A0670301AD9CB555D94AFEC2C89FDE86',
])
expect_invalid_attr = functools.partial(base_expect_invalid_attr, RelayDescriptor, 'nickname', 'Unnamed')
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 5ca5993e..c4b26ad0 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -21,7 +21,6 @@ from stem.descriptor.router_status_entry import RouterStatusEntryV3
from stem.descriptor.server_descriptor import RelayDescriptor
from stem.directory import DIRECTORY_AUTHORITIES
from stem.response import ControlMessage
-from stem.util import str_type
from test.unit import exec_documentation_example
@@ -39,7 +38,7 @@ PURPOSE=%s'
PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-LIST_CIRCUITS_OUTPUT = str_type("""\
+LIST_CIRCUITS_OUTPUT = """\
Circuit 4 (GENERAL)
|- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61)
@@ -55,9 +54,9 @@ Circuit 10 (GENERAL)
|- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61)
|- 00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F (ph3x, 86.59.119.83)
+- 65242C91BFF30F165DA4D132C81A9EBA94B71D62 (torexit16, 176.67.169.171)
-""")
+"""
-EXIT_USED_OUTPUT = str_type("""\
+EXIT_USED_OUTPUT = """\
Tracking requests for tor exits. Press 'enter' to end.
Exit relay for our connection to 64.15.112.44:80
@@ -66,15 +65,15 @@ Exit relay for our connection to 64.15.112.44:80
nickname: chaoscomputerclub19
locale: unknown
-""")
+"""
-OUTDATED_RELAYS_OUTPUT = str_type("""\
+OUTDATED_RELAYS_OUTPUT = """\
Checking for outdated relays...
0.1.0 Sambuddha Basu
2 outdated relays found, 1 had contact information
-""")
+"""
COMPARE_FLAGS_OUTPUT = """\
maatuska has the Running flag but moria1 doesn't: E2BB13AA2F6960CD93ABE5257A825687F3973C62
diff --git a/test/unit/util/system.py b/test/unit/util/system.py
index fd8fe2d9..451e6e72 100644
--- a/test/unit/util/system.py
+++ b/test/unit/util/system.py
@@ -12,7 +12,7 @@ import posixpath
import tempfile
import unittest
-from stem.util import str_type, system
+from stem.util import system
try:
# added in python 3.3
@@ -128,8 +128,7 @@ class TestSystem(unittest.TestCase):
"""
# mock response with a linux and bsd resolver
- running_commands = [str_type('irssi'), str_type('moc'), str_type('tor'),
- str_type('ps'), str_type(' firefox ')]
+ running_commands = ['irssi', 'moc', 'tor', 'ps', ' firefox ']
for ps_cmd in (system.IS_RUNNING_PS_LINUX, system.IS_RUNNING_PS_BSD):
call_mock.side_effect = mock_call(ps_cmd, running_commands)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits