Skip to content

Commit

Permalink
feat: print read and test
Browse files Browse the repository at this point in the history
  • Loading branch information
zTrix committed Sep 19, 2020
1 parent 92823ec commit 62473d9
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 11 deletions.
2 changes: 1 addition & 1 deletion test2/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ cd "${0%/*}" && pwd

PYTHON=`which python2`

$PYTHON ./test_packing.py
$PYTHON ./test_basic.py
File renamed without changes.
2 changes: 1 addition & 1 deletion test3/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ cd "${0%/*}" && pwd

PYTHON=`which python3`

$PYTHON ./test_packing.py
$PYTHON ./test_basic.py
12 changes: 10 additions & 2 deletions test3/test_packing.py → test3/test_basic.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
#!/usr/bin/env python3
import random
import threading
import socket
import unittest
from io import StringIO
from zio import *

class ServerSock(threading.Thread):
def __init__(self, addr=None, port=None):
threading.Thread.__init__(self, name='ServerSock')
self.addr = addr or '127.0.0.1'
self.port = port or 9527
self.port = port or random.choice(range(9527, 10000))
self.setDaemon(True)

def run(self):
Expand Down Expand Up @@ -61,17 +64,22 @@ def test_socket_io(self):
server = ServerSock()
server.start()

io = zio(server.target_addr())
logfile = StringIO()

io = zio(server.target_addr(), logfile=logfile, print_read=True, print_write=False)

content = io.read(5)
self.assertEqual(content, b'hello')
self.assertEqual(logfile.getvalue(), 'hello')

content = io.read(1)
self.assertEqual(content, b' ')

content = io.read(5)
self.assertEqual(content, b'world')

self.assertEqual(logfile.getvalue(), 'hello world')

io.close()

if __name__ == '__main__':
Expand Down
50 changes: 43 additions & 7 deletions zio.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ def __init__(self, target,
self.target = target
self.print_read = print_read
self.print_write = print_write
self.logfile = logfile

# zio object itself is a buffered reader/writer
self.buffer = bytearray()
Expand All @@ -275,22 +276,57 @@ def __init__(self, target,
# do process io
raise NotImplementedError

def log_read(self, byte_buf):
'''
bytes -> IO unicode
'''
if self.print_read:
content = self.read_transform(byte_buf)
self.logfile.write(content)
self.logfile.flush()

def log_write(self, byte_buf):
'''
bytes -> IO unicode
'''
if self.print_write:
content = self.write_transform(byte_buf)
self.logfile.write(content)
self.logfile.flush()

@property
def print_read(self):
return self._print_read and (self._print_read is not NONE)
return self.read_transform is not None and self.read_transform is not NONE

@print_read.setter
def print_read(self, value):
if value == True:
self._print_read = RAW
self.read_transform = RAW
elif value == False:
self.read_transform = NONE
elif callable(value):
self.read_transform = value
else:
raise ValueError('bad print_read value')

assert callable(self.read_transform)

@property
def print_write(self):
return self.write_transform is not None and self.write_transform is not NONE

@print_write.setter
def print_write(self, value):
if value == True:
self.write_transform = RAW
elif value == False:
self._print_read = NONE
self.write_transform = NONE
elif callable(value):
self._print_read = value
self.write_transform = value
else:
raise ValueError('bad print_read value')

assert callable(self._print_read)
assert callable(self.write_transform)

def read(self, size=None):
'''
Expand All @@ -306,6 +342,7 @@ def read(self, size=None):
if is_read_all:
ret = bytes(self.buffer)
self.buffer.clear()
self.log_read(ret)
return ret
else:
raise Exception('EOF occured before full size read, buffer = %s' % self.buffer)
Expand All @@ -314,8 +351,7 @@ def read(self, size=None):
if not is_read_all and len(self.buffer) >= size:
ret = bytes(self.buffer[:size])
self.buffer = self.buffer[size:]
# if self.print_read:

self.log_read(ret)
return ret

read_exact = read
Expand Down

0 comments on commit 62473d9

Please sign in to comment.