On 02/02/2016 04:24 PM, Ben Pfaff wrote: > On Fri, Jan 22, 2016 at 09:32:33PM -0500, Russell Bryant wrote: >> Python 3 has separate types for strings and bytes. Python 2 used the >> same type for both. We need to convert strings to bytes before writing >> them out to a socket. We also need to convert data read from the socket >> to a string. >> >> Signed-off-by: Russell Bryant <russ...@ovn.org> >> --- >> python/ovs/jsonrpc.py | 10 ++++++++++ >> python/ovs/socket_util.py | 3 +++ >> python/ovs/stream.py | 6 ++++++ >> 3 files changed, 19 insertions(+) >> >> diff --git a/python/ovs/jsonrpc.py b/python/ovs/jsonrpc.py >> index efe0f6c..5177980 100644 >> --- a/python/ovs/jsonrpc.py >> +++ b/python/ovs/jsonrpc.py >> @@ -264,6 +264,16 @@ class Connection(object): >> while True: >> if not self.input: >> error, data = self.stream.recv(4096) >> + # Python 3 has separate types for strings and bytes. We >> + # received bytes from a socket. We expect it to be string >> + # data, so we convert it here as soon as possible. >> + if (data and not error >> + and not isinstance(data, six.string_types)): >> + try: >> + data = data.decode('utf-8') >> + except UnicodeError: >> + # XXX Illegal byte sequence. Is there a better >> errno? >> + error = errno.EILSEQ > > Isn't EILSEQ perfect for this?
That was my best guess. Thanks for ACKing the choice. I'll remove the comment. :-) > Acked-by: Ben Pfaff <b...@ovn.org> > -- Russell Bryant _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev