summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-07-12 07:58:54 (GMT)
committerGuido van Rossum <guido@python.org>2007-07-12 07:58:54 (GMT)
commit076da0957b1af50cccf40ec5c60742212b4a1f90 (patch)
tree249b3131cfd00f85e76e7ece18b0ff93cabe8cff
parente7a0d3997846155e1a9dcd95eb559039da34ee08 (diff)
downloadcpython-076da0957b1af50cccf40ec5c60742212b4a1f90.zip
cpython-076da0957b1af50cccf40ec5c60742212b4a1f90.tar.gz
cpython-076da0957b1af50cccf40ec5c60742212b4a1f90.tar.bz2
Fix asynchat to use bytes instead of strings.
Fix by Alexandre Vassalotti, SF# 1752173.
-rw-r--r--Lib/asynchat.py24
-rw-r--r--Lib/test/test_asynchat.py12
2 files changed, 18 insertions, 18 deletions
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index dc7f10f..2206984 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -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:
diff --git a/Lib/test/test_asynchat.py b/Lib/test/test_asynchat.py
index 6bcedd6..7629296 100644
--- a/Lib/test/test_asynchat.py
+++ b/Lib/test/test_asynchat.py
@@ -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):