]> granicus.if.org Git - python/commitdiff
Fix asynchat to use bytes instead of strings.
authorGuido van Rossum <guido@python.org>
Thu, 12 Jul 2007 07:58:54 +0000 (07:58 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 12 Jul 2007 07:58:54 +0000 (07:58 +0000)
Fix by Alexandre Vassalotti, SF# 1752173.

Lib/asynchat.py
Lib/test/test_asynchat.py

index dc7f10f7bfa8d9bd6a5f71d758eb49c0a5114cf3..22069848847dd3823d3e3352a8e941a2e91886ee 100644 (file)
@@ -60,8 +60,8 @@ class async_chat (asyncore.dispatcher):
     ac_out_buffer_size      = 4096
 
     def __init__ (self, conn=None):
-        self.ac_in_buffer = ''
-        self.ac_out_buffer = ''
+        self.ac_in_buffer = b''
+        self.ac_out_buffer = b''
         self.producer_fifo = fifo()
         asyncore.dispatcher.__init__ (self, conn)
 
@@ -91,7 +91,7 @@ class async_chat (asyncore.dispatcher):
             self.handle_error()
             return
 
-        self.ac_in_buffer = self.ac_in_buffer + data
+        self.ac_in_buffer = self.ac_in_buffer + bytes(data)
 
         # Continue to search for self.terminator in self.ac_in_buffer,
         # while calling self.collect_incoming_data.  The while loop
@@ -110,7 +110,7 @@ class async_chat (asyncore.dispatcher):
                 n = terminator
                 if lb < n:
                     self.collect_incoming_data (self.ac_in_buffer)
-                    self.ac_in_buffer = ''
+                    self.ac_in_buffer = b''
                     self.terminator = self.terminator - lb
                 else:
                     self.collect_incoming_data (self.ac_in_buffer[:n])
@@ -147,7 +147,7 @@ class async_chat (asyncore.dispatcher):
                     else:
                         # no prefix, collect it all
                         self.collect_incoming_data (self.ac_in_buffer)
-                        self.ac_in_buffer = ''
+                        self.ac_in_buffer = b''
 
     def handle_write (self):
         self.initiate_send ()
@@ -172,7 +172,7 @@ class async_chat (asyncore.dispatcher):
         # return len(self.ac_out_buffer) or len(self.producer_fifo) or (not self.connected)
         # this is about twice as fast, though not as clear.
         return not (
-                (self.ac_out_buffer == '') and
+                (self.ac_out_buffer == b'') and
                 self.producer_fifo.is_empty() and
                 self.connected
                 )
@@ -194,13 +194,13 @@ class async_chat (asyncore.dispatcher):
                         self.producer_fifo.pop()
                         self.close()
                     return
-                elif isinstance(p, str):
+                elif isinstance(p, str) or isinstance(p, bytes):
                     self.producer_fifo.pop()
-                    self.ac_out_buffer = self.ac_out_buffer + p
+                    self.ac_out_buffer = self.ac_out_buffer + bytes(p)
                     return
                 data = p.more()
                 if data:
-                    self.ac_out_buffer = self.ac_out_buffer + data
+                    self.ac_out_buffer = self.ac_out_buffer + bytes(data)
                     return
                 else:
                     self.producer_fifo.pop()
@@ -226,8 +226,8 @@ class async_chat (asyncore.dispatcher):
 
     def discard_buffers (self):
         # Emergencies only!
-        self.ac_in_buffer = ''
-        self.ac_out_buffer = ''
+        self.ac_in_buffer = b''
+        self.ac_out_buffer = b''
         while self.producer_fifo:
             self.producer_fifo.pop()
 
@@ -245,7 +245,7 @@ class simple_producer:
             return result
         else:
             result = self.data
-            self.data = ''
+            self.data = b''
             return result
 
 class fifo:
index 6bcedd6bd70a619c6f9a20658e2b013c4fa6fe9e..7629296b002e3b4d76ce755d6f98597bed780f10 100644 (file)
@@ -17,8 +17,8 @@ class echo_server(threading.Thread):
         PORT = test_support.bind_port(sock, HOST, PORT)
         sock.listen(1)
         conn, client = sock.accept()
-        buffer = ""
-        while "\n" not in buffer:
+        buffer = b""
+        while b"\n" not in buffer:
             data = conn.recv(1)
             if not data:
                 break
@@ -37,7 +37,7 @@ class echo_client(asynchat.async_chat):
         self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
         self.connect((HOST, PORT))
         self.set_terminator(terminator)
-        self.buffer = ""
+        self.buffer = b""
 
     def handle_connect(self):
         pass
@@ -49,7 +49,7 @@ class echo_client(asynchat.async_chat):
     def found_terminator(self):
         #print "Received:", repr(self.buffer)
         self.contents = self.buffer
-        self.buffer = ""
+        self.buffer = b""
         self.close()
 
 
@@ -70,7 +70,7 @@ class TestAsynchat(unittest.TestCase):
         asyncore.loop()
         s.join()
 
-        self.assertEqual(c.contents, 'hello world')
+        self.assertEqual(c.contents, b'hello world')
 
     def test_numeric_terminator(self):
         # Try reading a fixed number of bytes
@@ -83,7 +83,7 @@ class TestAsynchat(unittest.TestCase):
         asyncore.loop()
         s.join()
 
-        self.assertEqual(c.contents, 'hello ')
+        self.assertEqual(c.contents, b'hello ')
 
 
 def test_main(verbose=None):