|  | @@ -92,7 +92,7 @@ def decode(b):
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              return b.decode('utf8')
 | 
	
		
			
				|  |  |          except UnicodeDecodeError:
 | 
	
		
			
				|  |  | -            logging.exception('Invalid encoding on {}'.format(b))
 | 
	
		
			
				|  |  | +            logging.exception('Invalid encoding on %s', b)
 | 
	
		
			
				|  |  |              return b.decode('latin1')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -148,36 +148,23 @@ def fully_qualified_method(group, method):
 | 
	
		
			
				|  |  |  class CleanupThread(threading.Thread):
 | 
	
		
			
				|  |  |      """A threading.Thread subclass supporting custom behavior on join().
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  On Python Interpreter exit, Python will attempt to join outstanding threads
 | 
	
		
			
				|  |  | -  prior to garbage collection.  We may need to do additional cleanup, and
 | 
	
		
			
				|  |  | -  we accomplish this by overriding the join() method.
 | 
	
		
			
				|  |  | -  """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __init__(self,
 | 
	
		
			
				|  |  | -                 behavior,
 | 
	
		
			
				|  |  | -                 group=None,
 | 
	
		
			
				|  |  | -                 target=None,
 | 
	
		
			
				|  |  | -                 name=None,
 | 
	
		
			
				|  |  | -                 args=(),
 | 
	
		
			
				|  |  | -                 kwargs={}):
 | 
	
		
			
				|  |  | +    On Python Interpreter exit, Python will attempt to join outstanding threads
 | 
	
		
			
				|  |  | +    prior to garbage collection.  We may need to do additional cleanup, and
 | 
	
		
			
				|  |  | +    we accomplish this by overriding the join() method.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __init__(self, behavior, *args, **kwargs):
 | 
	
		
			
				|  |  |          """Constructor.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Args:
 | 
	
		
			
				|  |  | -      behavior (function): Function called on join() with a single
 | 
	
		
			
				|  |  | -          argument, timeout, indicating the maximum duration of
 | 
	
		
			
				|  |  | -          `behavior`, or None indicating `behavior` has no deadline.
 | 
	
		
			
				|  |  | -          `behavior` must be idempotent.
 | 
	
		
			
				|  |  | -      group (None): should be None.  Reseved for future extensions
 | 
	
		
			
				|  |  | -          when ThreadGroup is implemented.
 | 
	
		
			
				|  |  | -      target (function): The function to invoke when this thread is
 | 
	
		
			
				|  |  | -          run.  Defaults to None.
 | 
	
		
			
				|  |  | -      name (str): The name of this thread.  Defaults to None.
 | 
	
		
			
				|  |  | -        args (tuple[object]): A tuple of arguments to pass to `target`.
 | 
	
		
			
				|  |  | -      kwargs (dict[str,object]): A dictionary of keyword arguments to
 | 
	
		
			
				|  |  | -           pass to `target`.
 | 
	
		
			
				|  |  | -    """
 | 
	
		
			
				|  |  | -        super(CleanupThread, self).__init__(
 | 
	
		
			
				|  |  | -            group=group, target=target, name=name, args=args, kwargs=kwargs)
 | 
	
		
			
				|  |  | +        Args:
 | 
	
		
			
				|  |  | +            behavior (function): Function called on join() with a single
 | 
	
		
			
				|  |  | +                argument, timeout, indicating the maximum duration of
 | 
	
		
			
				|  |  | +                `behavior`, or None indicating `behavior` has no deadline.
 | 
	
		
			
				|  |  | +                `behavior` must be idempotent.
 | 
	
		
			
				|  |  | +            args: Positional arguments passed to threading.Thread constructor.
 | 
	
		
			
				|  |  | +            kwargs: Keyword arguments passed to threading.Thread constructor.
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        super(CleanupThread, self).__init__(*args, **kwargs)
 | 
	
		
			
				|  |  |          self._behavior = behavior
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def join(self, timeout=None):
 |