[tor-commits] [stem/master] Simplify socket logging

atagar at torproject.org atagar at torproject.org
Thu Sep 21 17:32:54 UTC 2017


commit cc3656a4fb6597a7c3b2296495c752fc8a044e63
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Sep 17 14:44:58 2017 -0700

    Simplify socket logging
    
    We created quite a few pointless strings for socket exception logging. Both
    clunky in inefficient.
---
 stem/socket.py | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/stem/socket.py b/stem/socket.py
index 171e9417..ca56ea69 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -81,6 +81,7 @@ import stem.util.str_tools
 from stem.util import log
 
 MESSAGE_PREFIX = re.compile(b'^[a-zA-Z0-9]{3}[-+ ]')
+ERROR_MSG = 'Error while receiving a control message (%s): %s'
 
 # lines to limit our trace logging to, you can disable this by setting it to None
 
@@ -526,7 +527,6 @@ def recv_message(control_file):
   """
 
   parsed_content, raw_content = [], []
-  logging_prefix = 'Error while receiving a control message (%s): '
 
   while True:
     try:
@@ -539,8 +539,7 @@ def recv_message(control_file):
       # if the control_file has been closed then we will receive:
       # AttributeError: 'NoneType' object has no attribute 'recv'
 
-      prefix = logging_prefix % 'SocketClosed'
-      log.info(prefix + 'socket file has been closed')
+      log.info(ERROR_MSG % ('SocketClosed', 'socket file has been closed'))
       raise stem.SocketClosed('socket file has been closed')
     except (socket.error, ValueError) as exc:
       # When disconnected we get...
@@ -551,8 +550,7 @@ def recv_message(control_file):
       # Python 3:
       #   ValueError: I/O operation on closed file.
 
-      prefix = logging_prefix % 'SocketClosed'
-      log.info(prefix + 'received exception "%s"' % exc)
+      log.info(ERROR_MSG % ('SocketClosed', 'received exception "%s"' % exc))
       raise stem.SocketClosed(exc)
 
     raw_content.append(line)
@@ -564,20 +562,16 @@ def recv_message(control_file):
       # if the socket is disconnected then the readline() method will provide
       # empty content
 
-      prefix = logging_prefix % 'SocketClosed'
-      log.info(prefix + 'empty socket content')
+      log.info(ERROR_MSG % ('SocketClosed', 'empty socket content'))
       raise stem.SocketClosed('Received empty socket content.')
     elif len(line) < 4:
-      prefix = logging_prefix % 'ProtocolError'
-      log.info(prefix + 'line too short, "%s"' % log.escape(line))
+      log.info(ERROR_MSG % ('ProtocolError', 'line too short, "%s"' % log.escape(line)))
       raise stem.ProtocolError('Badly formatted reply line: too short')
     elif not MESSAGE_PREFIX.match(line):
-      prefix = logging_prefix % 'ProtocolError'
-      log.info(prefix + 'malformed status code/divider, "%s"' % log.escape(line))
+      log.info(ERROR_MSG % ('ProtocolError', 'malformed status code/divider, "%s"' % log.escape(line)))
       raise stem.ProtocolError('Badly formatted reply line: beginning is malformed')
     elif not line.endswith(b'\r\n'):
-      prefix = logging_prefix % 'ProtocolError'
-      log.info(prefix + 'no CRLF linebreak, "%s"' % log.escape(line))
+      log.info(ERROR_MSG % ('ProtocolError', 'no CRLF linebreak, "%s"' % log.escape(line)))
       raise stem.ProtocolError('All lines should end with CRLF')
 
     line = line[:-2]  # strips off the CRLF
@@ -618,15 +612,13 @@ def recv_message(control_file):
         try:
           line = stem.util.str_tools._to_bytes(control_file.readline())
         except socket.error as 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(b''.join(raw_content))))
+          log.info(ERROR_MSG % ('SocketClosed', 'received an exception while mid-way through a data reply (exception: "%s", read content: "%s")' % (exc, log.escape(b''.join(raw_content)))))
           raise stem.SocketClosed(exc)
 
         raw_content.append(line)
 
         if not line.endswith(b'\r\n'):
-          prefix = logging_prefix % 'ProtocolError'
-          log.info(prefix + 'CRLF linebreaks missing from a data reply, "%s"' % log.escape(b''.join(raw_content)))
+          log.info(ERROR_MSG % ('ProtocolError', 'CRLF linebreaks missing from a data reply, "%s"' % log.escape(b''.join(raw_content))))
           raise stem.ProtocolError('All lines should end with CRLF')
         elif line == b'.\r\n':
           break  # data block termination
@@ -648,8 +640,8 @@ def recv_message(control_file):
     else:
       # this should never be reached due to the prefix regex, but might as well
       # be safe...
-      prefix = logging_prefix % 'ProtocolError'
-      log.warn(prefix + "\"%s\" isn't a recognized divider type" % divider)
+
+      log.warn(ERROR_MSG % ('ProtocolError', "\"%s\" isn't a recognized divider type" % divider))
       raise stem.ProtocolError("Unrecognized divider type '%s': %s" % (divider, stem.util.str_tools._to_unicode(line)))
 
 





More information about the tor-commits mailing list