[tor-commits] [stem/master] Marking stem.util.str_tools functions as being private

atagar at torproject.org atagar at torproject.org
Sun Mar 10 07:16:29 UTC 2013


commit aab3bf57a87bb09d4d572195e568e73da489f38a
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Mar 9 23:07:23 2013 -0800

    Marking stem.util.str_tools functions as being private
    
    Swapping several of the functions that we don't want to vend as being private.
    The to_bytes() and to_unicode() functions in particular are simply there for
    python 3.x support, so they'll disappear if/when we drop python 2.x support.
---
 stem/connection.py                        |    8 ++++----
 stem/descriptor/__init__.py               |    8 ++++----
 stem/descriptor/extrainfo_descriptor.py   |    2 +-
 stem/descriptor/networkstatus.py          |    4 ++--
 stem/descriptor/router_status_entry.py    |    2 +-
 stem/descriptor/server_descriptor.py      |    6 +++---
 stem/response/authchallenge.py            |    4 ++--
 stem/response/events.py                   |    4 ++--
 stem/socket.py                            |    6 +++---
 stem/util/enum.py                         |    2 +-
 stem/util/str_tools.py                    |   27 +++++++++++----------------
 stem/util/system.py                       |    2 +-
 stem/util/term.py                         |    2 +-
 test/settings.cfg                         |    4 ++--
 test/unit/descriptor/server_descriptor.py |    2 +-
 test/unit/util/str_tools.py               |   22 +++++++++++-----------
 16 files changed, 50 insertions(+), 55 deletions(-)

diff --git a/stem/connection.py b/stem/connection.py
index dc70bce..4f63378 100644
--- a/stem/connection.py
+++ b/stem/connection.py
@@ -596,8 +596,8 @@ def authenticate_cookie(controller, cookie_path, suppress_ctl_errors = True):
     # This seems dumb but oh well. Converting the result to unicode so it won't
     # misbehave.
 
-    auth_token_hex = binascii.b2a_hex(stem.util.str_tools.to_bytes(cookie_data))
-    msg = "AUTHENTICATE %s" % stem.util.str_tools.to_unicode(auth_token_hex)
+    auth_token_hex = binascii.b2a_hex(stem.util.str_tools._to_bytes(cookie_data))
+    msg = "AUTHENTICATE %s" % stem.util.str_tools._to_unicode(auth_token_hex)
     auth_response = _msg(controller, msg)
 
     # if we got anything but an OK response then error
@@ -692,7 +692,7 @@ def authenticate_safecookie(controller, cookie_path, suppress_ctl_errors = True)
   client_nonce = os.urandom(32)
 
   try:
-    client_nonce_hex = binascii.b2a_hex(stem.util.str_tools.to_bytes(client_nonce))
+    client_nonce_hex = binascii.b2a_hex(stem.util.str_tools._to_bytes(client_nonce))
     authchallenge_response = _msg(controller, "AUTHCHALLENGE SAFECOOKIE %s" % client_nonce_hex)
 
     if not authchallenge_response.is_ok():
@@ -744,7 +744,7 @@ def authenticate_safecookie(controller, cookie_path, suppress_ctl_errors = True)
       CLIENT_HASH_CONSTANT,
       cookie_data + client_nonce + authchallenge_response.server_nonce)
 
-    auth_response = _msg(controller, "AUTHENTICATE %s" % (binascii.b2a_hex(stem.util.str_tools.to_bytes(client_hash))))
+    auth_response = _msg(controller, "AUTHENTICATE %s" % (binascii.b2a_hex(stem.util.str_tools._to_bytes(client_hash))))
   except stem.ControllerError, exc:
     try:
       controller.connect()
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 59d66a4..4f0a596 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -307,7 +307,7 @@ class Descriptor(object):
     if stem.prereq.is_python_3():
       return self._raw_contents
     else:
-      return str(stem.util.str_tools.to_bytes(self._raw_contents))
+      return str(stem.util.str_tools._to_bytes(self._raw_contents))
 
 
 class _UnicodeReader(object):
@@ -333,10 +333,10 @@ class _UnicodeReader(object):
     return self.wrapped_file.next()
 
   def read(self, n = -1):
-    return stem.util.str_tools.to_unicode(self.wrapped_file.read(n))
+    return stem.util.str_tools._to_unicode(self.wrapped_file.read(n))
 
   def readline(self):
-    return stem.util.str_tools.to_unicode(self.wrapped_file.readline())
+    return stem.util.str_tools._to_unicode(self.wrapped_file.readline())
 
   def readlines(self, sizehint = None):
     # being careful to do in-place conversion so we don't accidently double our
@@ -348,7 +348,7 @@ class _UnicodeReader(object):
       results = self.wrapped_file.readlines()
 
     for i in xrange(len(results)):
-      results[i] = stem.util.str_tools.to_unicode(results[i])
+      results[i] = stem.util.str_tools._to_unicode(results[i])
 
     return results
 
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 3d7bb3c..5f1c423 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -825,7 +825,7 @@ class RelayExtraInfoDescriptor(ExtraInfoDescriptor):
       # our digest is calculated from everything except our signature
       raw_content, ending = str(self), "\nrouter-signature\n"
       raw_content = raw_content[:raw_content.find(ending) + len(ending)]
-      self._digest = hashlib.sha1(stem.util.str_tools.to_bytes(raw_content)).hexdigest().upper()
+      self._digest = hashlib.sha1(stem.util.str_tools._to_bytes(raw_content)).hexdigest().upper()
 
     return self._digest
 
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index e032f76..de0b945 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -265,7 +265,7 @@ class NetworkStatusDocumentV2(NetworkStatusDocument):
   """
 
   def __init__(self, raw_content, validate = True):
-    raw_content = stem.util.str_tools.to_unicode(raw_content)
+    raw_content = stem.util.str_tools._to_unicode(raw_content)
     super(NetworkStatusDocumentV2, self).__init__(raw_content)
 
     self.version = None
@@ -464,7 +464,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
     :raises: **ValueError** if the document is invalid
     """
 
-    raw_content = stem.util.str_tools.to_unicode(raw_content)
+    raw_content = stem.util.str_tools._to_unicode(raw_content)
     super(NetworkStatusDocumentV3, self).__init__(raw_content)
     document_file = StringIO.StringIO(raw_content)
 
diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py
index ef810ec..68c1b38 100644
--- a/stem/descriptor/router_status_entry.py
+++ b/stem/descriptor/router_status_entry.py
@@ -703,7 +703,7 @@ def _decode_fingerprint(identity, validate):
   fingerprint = ""
 
   try:
-    identity_decoded = base64.b64decode(stem.util.str_tools.to_bytes(identity))
+    identity_decoded = base64.b64decode(stem.util.str_tools._to_bytes(identity))
   except (TypeError, binascii.Error):
     if not validate:
       return None
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 298b480..89795c9 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -665,7 +665,7 @@ class RelayDescriptor(ServerDescriptor):
 
       if start >= 0 and sig_start > 0 and end > start:
         for_digest = raw_descriptor[start:end]
-        digest_hash = hashlib.sha1(stem.util.str_tools.to_bytes(for_digest))
+        digest_hash = hashlib.sha1(stem.util.str_tools._to_bytes(for_digest))
         self._digest = digest_hash.hexdigest().upper()
       else:
         raise ValueError("unable to calculate digest for descriptor")
@@ -686,7 +686,7 @@ class RelayDescriptor(ServerDescriptor):
     if self.fingerprint:
       # calculate the signing key hash
 
-      key_der_as_hash = hashlib.sha1(stem.util.str_tools.to_bytes(key_as_bytes)).hexdigest()
+      key_der_as_hash = hashlib.sha1(stem.util.str_tools._to_bytes(key_as_bytes)).hexdigest()
 
       if key_der_as_hash != self.fingerprint.lower():
         log.warn("Signing key hash: %s != fingerprint: %s" % (key_der_as_hash, self.fingerprint.lower()))
@@ -821,7 +821,7 @@ class RelayDescriptor(ServerDescriptor):
 
     # get the key representation in bytes
 
-    key_bytes = base64.b64decode(stem.util.str_tools.to_bytes(key_as_string))
+    key_bytes = base64.b64decode(stem.util.str_tools._to_bytes(key_as_string))
 
     return key_bytes
 
diff --git a/stem/response/authchallenge.py b/stem/response/authchallenge.py
index c14369b..93be385 100644
--- a/stem/response/authchallenge.py
+++ b/stem/response/authchallenge.py
@@ -41,7 +41,7 @@ class AuthChallengeResponse(stem.response.ControlMessage):
       if not stem.util.tor_tools.is_hex_digits(value, 64):
         raise stem.ProtocolError("SERVERHASH has an invalid value: %s" % value)
 
-      self.server_hash = binascii.a2b_hex(stem.util.str_tools.to_bytes(value))
+      self.server_hash = binascii.a2b_hex(stem.util.str_tools._to_bytes(value))
     else:
       raise stem.ProtocolError("Missing SERVERHASH mapping: %s" % line)
 
@@ -51,6 +51,6 @@ class AuthChallengeResponse(stem.response.ControlMessage):
       if not stem.util.tor_tools.is_hex_digits(value, 64):
         raise stem.ProtocolError("SERVERNONCE has an invalid value: %s" % value)
 
-      self.server_nonce = binascii.a2b_hex(stem.util.str_tools.to_bytes(value))
+      self.server_nonce = binascii.a2b_hex(stem.util.str_tools._to_bytes(value))
     else:
       raise stem.ProtocolError("Missing SERVERNONCE mapping: %s" % line)
diff --git a/stem/response/events.py b/stem/response/events.py
index af8c8e5..a2c43ff 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -345,7 +345,7 @@ class CircuitEvent(Event):
 
     if self.created is not None:
       try:
-        self.created = str_tools.parse_iso_timestamp(self.created)
+        self.created = str_tools._parse_iso_timestamp(self.created)
       except ValueError, exc:
         raise stem.ProtocolError("Unable to parse create date (%s): %s" % (exc, self))
 
@@ -401,7 +401,7 @@ class CircMinorEvent(Event):
 
     if self.created is not None:
       try:
-        self.created = str_tools.parse_iso_timestamp(self.created)
+        self.created = str_tools._parse_iso_timestamp(self.created)
       except ValueError, exc:
         raise stem.ProtocolError("Unable to parse create date (%s): %s" % (exc, self))
 
diff --git a/stem/socket.py b/stem/socket.py
index 3b9498c..d459fb7 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -425,7 +425,7 @@ def send_message(control_file, message, raw = False):
     message = send_formatting(message)
 
   try:
-    control_file.write(stem.util.str_tools.to_bytes(message))
+    control_file.write(stem.util.str_tools._to_bytes(message))
     control_file.flush()
 
     log_message = message.replace("\r\n", "\n").rstrip()
@@ -473,7 +473,7 @@ def recv_message(control_file):
       line = control_file.readline()
 
       if stem.prereq.is_python_3():
-        line = stem.util.str_tools.to_unicode(line)
+        line = stem.util.str_tools._to_unicode(line)
     except AttributeError:
       # if the control_file has been closed then we will receive:
       # AttributeError: 'NoneType' object has no attribute 'recv'
@@ -542,7 +542,7 @@ def recv_message(control_file):
           line = control_file.readline()
 
           if stem.prereq.is_python_3():
-            line = stem.util.str_tools.to_unicode(line)
+            line = stem.util.str_tools._to_unicode(line)
         except socket.error, exc:
           prefix = logging_prefix % "SocketClosed"
           log.info(prefix + "received an exception while mid-way through a data reply (exception: \"%s\", read content: \"%s\")" % (exc, log.escape(raw_content)))
diff --git a/stem/util/enum.py b/stem/util/enum.py
index bd983ee..504af48 100644
--- a/stem/util/enum.py
+++ b/stem/util/enum.py
@@ -75,7 +75,7 @@ class Enum(object):
 
     for entry in args:
       if isinstance(entry, str):
-        key, val = entry, stem.util.str_tools.to_camel_case(entry)
+        key, val = entry, stem.util.str_tools._to_camel_case(entry)
       elif isinstance(entry, tuple) and len(entry) == 2:
         key, val = entry
       else:
diff --git a/stem/util/str_tools.py b/stem/util/str_tools.py
index 14198b4..d575cfa 100644
--- a/stem/util/str_tools.py
+++ b/stem/util/str_tools.py
@@ -8,16 +8,11 @@ Toolkit for various string activity.
 
 ::
 
-  to_bytes - normalizes string ASCII bytes
-  to_unicode - normalizes string to unicode
-  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
   get_time_labels - human readable labels for each time unit
   get_short_time_label - condensed time label output
   parse_short_time_label - seconds represented by a short time label
-
-  parse_iso_timestamp - parses an ISO timestamp as a datetime value
 """
 
 import codecs
@@ -53,32 +48,32 @@ TIME_UNITS = (
 )
 
 if stem.prereq.is_python_3():
-  def _to_bytes(msg):
+  def _to_bytes_impl(msg):
     if isinstance(msg, str):
       return codecs.latin_1_encode(msg, "replace")[0]
     else:
       return msg
 
-  def _to_unicode(msg):
+  def _to_unicode_impl(msg):
     if msg is not None and not isinstance(msg, str):
       return msg.decode("utf-8", "replace")
     else:
       return msg
 else:
-  def _to_bytes(msg):
+  def _to_bytes_impl(msg):
     if msg is not None and isinstance(msg, unicode):
       return codecs.latin_1_encode(msg, "replace")[0]
     else:
       return msg
 
-  def _to_unicode(msg):
+  def _to_unicode_impl(msg):
     if msg is not None and not isinstance(msg, unicode):
       return msg.decode("utf-8", "replace")
     else:
       return msg
 
 
-def to_bytes(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
@@ -91,10 +86,10 @@ def to_bytes(msg):
   :returns: ASCII bytes for string
   """
 
-  return _to_bytes(msg)
+  return _to_bytes_impl(msg)
 
 
-def to_unicode(msg):
+def _to_unicode(msg):
   """
   Provides the unicode string for the given ASCII bytes. This is purely to
   provide python 3 compatability, normalizing the unicode/ASCII change in the
@@ -105,16 +100,16 @@ def to_unicode(msg):
   :returns: unicode conversion
   """
 
-  return _to_unicode(msg)
+  return _to_unicode_impl(msg)
 
 
-def to_camel_case(label, divider = "_", joiner = " "):
+def _to_camel_case(label, divider = "_", joiner = " "):
   """
   Converts the given string to camel case, ie:
 
   ::
 
-    >>> to_camel_case("I_LIKE_PEPPERJACK!")
+    >>> _to_camel_case("I_LIKE_PEPPERJACK!")
     'I Like Pepperjack!'
 
   :param str label: input string to be converted
@@ -315,7 +310,7 @@ def parse_short_time_label(label):
     raise ValueError("Non-numeric value in time entry: %s" % label)
 
 
-def parse_iso_timestamp(entry):
+def _parse_iso_timestamp(entry):
   """
   Parses the ISO 8601 standard that provides for timestamps like...
 
diff --git a/stem/util/system.py b/stem/util/system.py
index 688475f..0a94b57 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -814,7 +814,7 @@ def _set_prctl_name(process_name):
 
   libc = ctypes.CDLL(ctypes.util.find_library("c"))
   name_buffer = ctypes.create_string_buffer(len(process_name) + 1)
-  name_buffer.value = stem.util.str_tools.to_bytes(process_name)
+  name_buffer.value = stem.util.str_tools._to_bytes(process_name)
   libc.prctl(PR_SET_NAME, ctypes.byref(name_buffer), 0, 0, 0)
 
 
diff --git a/stem/util/term.py b/stem/util/term.py
index 5f54b5d..05efcfe 100644
--- a/stem/util/term.py
+++ b/stem/util/term.py
@@ -87,7 +87,7 @@ def format(msg, *attr):
 
   encodings = []
   for text_attr in attr:
-    text_attr, encoding = stem.util.str_tools.to_camel_case(text_attr), None
+    text_attr, encoding = stem.util.str_tools._to_camel_case(text_attr), None
     encoding = FG_ENCODING.get(text_attr, encoding)
     encoding = BG_ENCODING.get(text_attr, encoding)
     encoding = ATTR_ENCODING.get(text_attr, encoding)
diff --git a/test/settings.cfg b/test/settings.cfg
index c184eec..8e96214 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -158,8 +158,8 @@ 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 60
-pyflakes.ignore stem/util/str_tools.py => redefinition of function '_to_bytes' from line 56
-pyflakes.ignore stem/util/str_tools.py => redefinition of function '_to_unicode' from line 62
+pyflakes.ignore stem/util/str_tools.py => redefinition of function '_to_bytes_impl' from line 51
+pyflakes.ignore stem/util/str_tools.py => redefinition of function '_to_unicode_impl' from line 57
 pyflakes.ignore test/mocking.py => undefined name 'builtins'
 pyflakes.ignore test/unit/response/events.py => 'from stem import *' used; unable to detect undefined names
 
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index 07fb50c..3da01b5 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -210,7 +210,7 @@ class TestServerDescriptor(unittest.TestCase):
     desc_text += "\ntrailing text that should be ignored, ho hum"
 
     # running _parse_file should provide an iterator with a single descriptor
-    desc_iter = stem.descriptor.server_descriptor._parse_file(StringIO.StringIO(stem.util.str_tools.to_unicode(desc_text)))
+    desc_iter = stem.descriptor.server_descriptor._parse_file(StringIO.StringIO(stem.util.str_tools._to_unicode(desc_text)))
     desc_entries = list(desc_iter)
     self.assertEquals(1, len(desc_entries))
     desc = desc_entries[0]
diff --git a/test/unit/util/str_tools.py b/test/unit/util/str_tools.py
index 4b35278..550edeb 100644
--- a/test/unit/util/str_tools.py
+++ b/test/unit/util/str_tools.py
@@ -11,19 +11,19 @@ from stem.util import str_tools
 class TestStrTools(unittest.TestCase):
   def test_to_camel_case(self):
     """
-    Checks the to_camel_case() function.
+    Checks the _to_camel_case() function.
     """
 
     # test the pydoc example
-    self.assertEquals("I Like Pepperjack!", str_tools.to_camel_case("I_LIKE_PEPPERJACK!"))
+    self.assertEquals("I Like Pepperjack!", str_tools._to_camel_case("I_LIKE_PEPPERJACK!"))
 
     # check a few edge cases
-    self.assertEquals("", str_tools.to_camel_case(""))
-    self.assertEquals("Hello", str_tools.to_camel_case("hello"))
-    self.assertEquals("Hello", str_tools.to_camel_case("HELLO"))
-    self.assertEquals("Hello  World", str_tools.to_camel_case("hello__world"))
-    self.assertEquals("Hello\tworld", str_tools.to_camel_case("hello\tWORLD"))
-    self.assertEquals("Hello\t\tWorld", str_tools.to_camel_case("hello__world", "_", "\t"))
+    self.assertEquals("", str_tools._to_camel_case(""))
+    self.assertEquals("Hello", str_tools._to_camel_case("hello"))
+    self.assertEquals("Hello", str_tools._to_camel_case("HELLO"))
+    self.assertEquals("Hello  World", str_tools._to_camel_case("hello__world"))
+    self.assertEquals("Hello\tworld", str_tools._to_camel_case("hello\tWORLD"))
+    self.assertEquals("Hello\t\tWorld", str_tools._to_camel_case("hello__world", "_", "\t"))
 
   def test_get_size_label(self):
     """
@@ -125,7 +125,7 @@ class TestStrTools(unittest.TestCase):
 
   def test_parse_iso_timestamp(self):
     """
-    Checks the parse_iso_timestamp() function.
+    Checks the _parse_iso_timestamp() function.
     """
 
     test_inputs = {
@@ -138,7 +138,7 @@ class TestStrTools(unittest.TestCase):
     }
 
     for arg, expected in test_inputs.items():
-      self.assertEqual(expected, str_tools.parse_iso_timestamp(arg))
+      self.assertEqual(expected, str_tools._parse_iso_timestamp(arg))
 
     invalid_input = [
       None,
@@ -150,4 +150,4 @@ class TestStrTools(unittest.TestCase):
     ]
 
     for arg in invalid_input:
-      self.assertRaises(ValueError, str_tools.parse_iso_timestamp, arg)
+      self.assertRaises(ValueError, str_tools._parse_iso_timestamp, arg)





More information about the tor-commits mailing list